From 4255d54c254a5f49a19017a3071b8d7ff35e70e9 Mon Sep 17 00:00:00 2001 From: Steve Bennett Date: Thu, 1 Dec 2011 14:32:09 +1000 Subject: 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 --- tests/ensemble.test | 47 ++++++++++++++++++++++++++++++++ tests/nsensemble.test | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 tests/ensemble.test create mode 100644 tests/nsensemble.test (limited to 'tests') 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 -- cgit v1.1