summaryrefslogtreecommitdiff
path: root/tests/alias.test
diff options
context:
space:
mode:
Diffstat (limited to 'tests/alias.test')
-rw-r--r--tests/alias.test248
1 files changed, 248 insertions, 0 deletions
diff --git a/tests/alias.test b/tests/alias.test
new file mode 100644
index 0000000..c539920
--- /dev/null
+++ b/tests/alias.test
@@ -0,0 +1,248 @@
+source [file dirname [info script]]/testing.tcl
+
+needs constraint jim
+needs cmd array
+needs cmd ref
+
+test alias-1.1 "One word alias" {
+ set x 2
+ alias newincr incr
+ newincr x
+} {3}
+
+test alias-1.4 "Two word alias" {
+ alias infoexists info exists
+ infoexists x
+} {1}
+
+test alias-1.5 "Replace alias" {
+ alias newincr infoexists
+ newincr x
+} {1}
+
+test alias-1.6 "Delete alias" {
+ rename newincr ""
+ catch {newincr x}
+} {1}
+
+test alias-1.7 "Replace alias with proc" {
+ proc infoexists {n} {
+ return yes
+ }
+ infoexists any
+} {yes}
+
+test alias-1.8 "Replace proc with alias" {
+ alias infoexists info exists
+ infoexists any
+} {0}
+
+test alias-1.9 "error message from alias" -body {
+ alias newstring string
+ newstring match
+} -returnCodes error -result {wrong # args: should be "string match ?-nocase? pattern string"}
+
+test alias-1.10 "info alias" {
+ alias x info exists
+ info alias x
+} {info exists}
+
+test alias-1.10 "info alias on non-alias" -body {
+ info alias format
+} -returnCodes error -result {command "format" is not an alias}
+
+test curry-1.1 "One word curry" {
+ set x 2
+ set one [curry incr]
+ $one x
+} {3}
+
+test curry-1.4 "Two word curry" {
+ set two [curry info exists]
+ list [$two x] [$two y]
+} {1 0}
+
+collect
+test curry-1.5 "Delete curry" {
+ unset one two
+ collect
+} {2}
+
+test local-1.2 "local curry in proc" {
+ proc a {} {
+ local set p [curry info exists]
+ set x 1
+ list $p [$p x] [$p y]
+ }
+ lassign [a] p exists_x exists_y
+ list [info procs $p] $exists_x $exists_y
+} {{} 1 0}
+
+test local-1.2 "set local curry in proc" {
+ proc a {} {
+ set p [local curry info exists]
+ set x 1
+ list $p [$p x] [$p y]
+ }
+ lassign [a] p exists_x exists_y
+ list [info procs $p] $exists_x $exists_y
+} {{} 1 0}
+
+test local-1.3 "local alias in proc" {
+ proc a {} {
+ local alias p info exists
+ set x 1
+ list [p x] [p y]
+ }
+ lassign [a] exists_x exists_y
+ list [info commands p] $exists_x $exists_y
+} {{} 1 0}
+
+test local-1.5 "local proc in proc" {
+ set ::x 1
+ proc a {} {
+ local proc b {} { incr ::x }
+ b
+ set ::x
+ }
+ a
+ list [info procs b] $::x
+} {{} 2}
+
+test local-1.6 "local lambda in lsort" {
+ proc a {} {
+ lsort -command [local lambda {a b} {string compare $a $b}] {d a f g}
+ }
+ a
+} {a d f g}
+
+test local-1.7 "check no reference procs" {
+ info procs "<reference*"
+} {}
+
+test local-1.8 "local on non-existent command" {
+ list [catch {local set x blah} msg] $msg
+} {1 {invalid command name "blah"}}
+
+test local-1.9 "local on existing proc" {
+ proc x {} {
+ proc a {b} {incr b}
+ local function a
+ set c [lambda b {incr b -1}]
+ local function $c
+ lappend result [a 1] [$c 2]
+ }
+ set result [x]
+ list [info procs a] $result
+} {{} {2 1}}
+
+test statics-1.1 "missing static variable init" {
+ unset -nocomplain c
+ catch {
+ proc a {b} {c} {
+ # No initialiser for c
+ }
+ }
+} 1
+
+test statics-1.2 "static variable with invalid name" {
+ catch {
+ proc a {b} "{c\0d 4}" {
+ }
+ }
+} 1
+
+test statics-1.3 "duplicate static variable" {
+ catch {
+ proc a {b} {{c 1} {c 2}} {
+ }
+ }
+} 1
+
+test statics-1.4 "bad static variable init" {
+ catch {
+ proc a {b} {{c 1 2}} {
+ }
+ }
+} 1
+
+test local-2.1 "proc over existing proc" {
+ proc a {b} {incr b}
+ proc t {x} {
+ proc a {b} {incr b -1}
+ a $x
+ }
+ unset -nocomplain x
+ lappend x [a 5]
+ lappend x [t 5]
+ lappend x [a 5]
+} {6 4 4}
+
+test local-2.2 "local proc over existing proc" {
+ proc a {b} {incr b}
+ proc t {x} {
+ local proc a {b} {incr b -1}
+ a $x
+ }
+ unset -nocomplain x
+ lappend x [a 5]
+ lappend x [t 5]
+ lappend x [a 5]
+} {6 4 6}
+
+test local-2.3 "local proc over existing proc" {
+ proc a {b} {incr b}
+ proc t {x} {
+ local proc a {b} {incr b -1}
+ a $x
+ }
+ unset -nocomplain x
+ lappend x [a 5]
+ lappend x [t 5]
+ lappend x [a 5]
+} {6 4 6}
+
+test upcall-1.1 "upcall pushed proc" {
+ proc a {b} {incr b}
+ local proc a {b} {
+ incr b 10
+ # invoke the original defn via upcall
+ return [upcall a $b]
+ }
+ # Should call the new defn which will call the original defn
+ a 3
+} 14
+
+test upcall-1.2 "upcall in proc" {
+ proc a {b} {incr b}
+ proc t {c} {
+ local proc a {b} {
+ incr b 10
+ return [upcall a $b]
+ }
+ a $c
+ }
+ unset -nocomplain x
+ lappend x [t 5]
+ lappend x [a 5]
+ set x
+} {16 6}
+
+test upcall-1.3 "double upcall" {
+ proc a {} {return 1}
+ local proc a {} {list 2 {*}[upcall a]}
+ local proc a {} {list 3 {*}[upcall a]}
+ a
+} {3 2 1}
+
+test upcall-1.4 "upcall errors" {
+ proc a {} {return 1}
+ list [catch {upcall a} msg] $msg
+} {1 {no previous command: "a"}}
+
+test upcall-1.4 "upcall errors" {
+ proc a {} {upcall a}
+ list [catch a msg] $msg
+} {1 {no previous command: "a"}}
+
+testreport