aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2011-12-01 14:32:09 +1000
committerSteve Bennett <steveb@workware.net.au>2023-02-13 10:52:21 +1000
commit4255d54c254a5f49a19017a3071b8d7ff35e70e9 (patch)
tree3f0a7d263850cb461321d76b6ca5f84a286f7322 /tests
parentd295fb1b6124575793add4b95860fabd1539a099 (diff)
downloadjimtcl-4255d54c254a5f49a19017a3071b8d7ff35e70e9.zip
jimtcl-4255d54c254a5f49a19017a3071b8d7ff35e70e9.tar.gz
jimtcl-4255d54c254a5f49a19017a3071b8d7ff35e70e9.tar.bz2
ensemble: Add a simple ensemble command
Uses a prefix to automatically map from subcommand to implementation. Includes support for namespace ensemble Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'tests')
-rw-r--r--tests/ensemble.test47
-rw-r--r--tests/nsensemble.test75
2 files changed, 122 insertions, 0 deletions
diff --git a/tests/ensemble.test b/tests/ensemble.test
new file mode 100644
index 0000000..507cd20
--- /dev/null
+++ b/tests/ensemble.test
@@ -0,0 +1,47 @@
+source [file dirname [info script]]/testing.tcl
+
+needs constraint jim
+needs package ensemble
+
+# Let's create some procs for our ensembles
+
+proc {foo a} {x} {
+ incr x
+}
+proc {foo b} {y} {
+ incr y 2
+}
+test ensemble-1.1 {Basic ensemble} {
+ ensemble foo
+ foo a 5
+} 6
+
+test ensemble-1.2 {ensemble -commands} {
+ foo -commands
+} {a b}
+
+test ensemble-1.3 {ensemble -help} {
+ foo -help
+} {Usage: "foo command ... ", where command is one of: a, b}
+
+test ensemble-1.4 {ensemble with invalid subcommand} -body {
+ foo c x
+} -returnCodes error -result {invalid command name "foo c"}
+
+test ensemble-1.5 {ensemble add new commands} {
+ proc {foo c} {z} {
+ append z @
+ }
+ foo c x
+} {x@}
+
+test ensemble-1.6 {ensemble remove mapping} -body {
+ rename {foo a} ""
+ foo a 4
+} -returnCodes error -result {invalid command name "foo a"}
+
+test ensemble-1.7 {ensemble updated -commands} {
+ foo -commands
+} {b c}
+
+testreport
diff --git a/tests/nsensemble.test b/tests/nsensemble.test
new file mode 100644
index 0000000..9306167
--- /dev/null
+++ b/tests/nsensemble.test
@@ -0,0 +1,75 @@
+source [file dirname [info script]]/testing.tcl
+
+needs constraint jim
+needs cmd ensemble
+needs cmd namespace
+testConstraint package-ensemble [expr {"ensemble" in [package list]}]
+
+# Let's create some procs for our ensemble
+namespace eval foo {
+ proc a {x} {
+ incr x
+ }
+ proc b {y} {
+ incr y 2
+ }
+ proc c {z} {
+ append z @
+ }
+}
+
+test nsensemble-1.0 {Create ensemble outside namespace} -body {
+ # Create an ensemble for our namespace
+ namespace ensemble create
+} -returnCodes error -result {namespace ensemble create: must be called within a namespace}
+
+test nsensemble-1.1 {Basic namespace ensemble} {
+ # Create an ensemble for our namespace
+ namespace eval foo {
+ namespace ensemble create
+ }
+ # And invoke a method
+ foo a 5
+} 6
+
+test nsensemble-1.2 {namespace ensemble -commands} package-ensemble {
+ foo -commands
+} {a b c}
+
+test nsensemble-1.3 {namespace ensemble -help} package-ensemble {
+ foo -help
+} {Usage: "foo command ... ", where command is one of: a, b, c}
+
+test nsensemble-1.4 {namespace ensemble with invalid subcommand} -constraints package-ensemble -body {
+ foo d x
+} -returnCodes error -result {invalid command name "foo::d"}
+
+# Now a nested namespace ensemble
+namespace eval foo {
+ namespace eval bar {
+ proc a {x} {
+ incr x 10
+ }
+ proc b {y} {
+ incr y 20
+ }
+ proc c {z} {
+ append z %
+ }
+ namespace ensemble create
+ }
+}
+
+test nsensemble-2.1 {Nested namespace ensemble} {
+ # And invoke a method
+ foo::bar a 5
+} 15
+
+test nsensemble-2.2 {Nested namespace ensemble from namespace} {
+ # And invoke a method
+ namespace eval foo {
+ bar a 6
+ }
+} 16
+
+testreport