aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2023-05-04 12:20:59 +1000
committerSteve Bennett <steveb@workware.net.au>2023-05-06 12:43:47 +1000
commit4e0e776b2b722302c9e3d622340599ea1f9e4fe0 (patch)
treef1db98efef0ed9e3cca4ce6fbc9f28ed4d608cfd /tests
parentfcbb4499a6b46ef69e7a95da53e30796e20817f0 (diff)
downloadjimtcl-4e0e776b2b722302c9e3d622340599ea1f9e4fe0.zip
jimtcl-4e0e776b2b722302c9e3d622340599ea1f9e4fe0.tar.gz
jimtcl-4e0e776b2b722302c9e3d622340599ea1f9e4fe0.tar.bz2
jim: info frame improvements
always include 'proc' even if introspection disabled correctly set 'proc' at the eval frame level that is currently running in the given proc. This makes it easier to produce an accurate level stacktrace even across uplevel, etc. Update stacktrace to use the new info frame. Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'tests')
-rw-r--r--tests/infoframe.test31
1 files changed, 17 insertions, 14 deletions
diff --git a/tests/infoframe.test b/tests/infoframe.test
index 9490589..e8544b1 100644
--- a/tests/infoframe.test
+++ b/tests/infoframe.test
@@ -1,11 +1,14 @@
source [file dirname [info script]]/testing.tcl
-needs constraint jim
+
proc a {n} {
if {$n eq "trace"} {
- # strip the frame levels for test and uplevel
- return [basename-stacktrace [lrange [stacktrace] 0 end-6]]
+ return [basename-stacktrace [stacktrace]]
+ }
+ set frame [info frame $n]
+ if {![dict exists $frame proc]} {
+ dict set frame proc {}
}
- set frame [info frame $n]; list [dict getdef $frame proc {}] [file tail [dict get $frame file]] [dict get $frame line]
+ basename-stacktrace [list [dict get $frame proc] [file tail [dict get $frame file]] [dict get $frame line]]
}
proc b {n} {
@@ -18,24 +21,24 @@ proc c {n} {
# --- Don't change line numbers above
-test info-frame-1.1 "Current command" {
+test info-frame-1.1 {Current command} -body {
c 0
-} {a infoframe.test 8}
+} -result {a infoframe.test 7}
-test info-frame-1.2 "Current Proc" {
+test info-frame-1.2 {Current Proc} -body {
c -1
-} {b infoframe.test 12}
+} -result {b infoframe.test 15}
-test info-frame-1.3 "Caller" {
+test info-frame-1.3 Caller -body {
c -2
-} {c infoframe.test 16}
+} -result {c infoframe.test 19}
-test info-frame-1.4 "Caller of Caller" {
+test info-frame-1.4 {Caller of Caller} -body {
c -3
-} {test infoframe.test 34}
+} -result {test infoframe.test 37}
-test stacktrace-1.1 "Full stack trace" {
+test stacktrace-1.1 {Full stack trace} -body {
c trace
-} {a infoframe.test 12 b infoframe.test 16 c infoframe.test 38}
+} -result {a infoframe.test 5 b infoframe.test 15 c infoframe.test 19 test infoframe.test 41}
testreport