Index: tests/cget.test =================================================================== diff -u -r77f50f6c6304355d638d5bf6f172d404940447de -rdc9120981daa00d27f8639ea98a71efc2078e0e8 --- tests/cget.test (.../cget.test) (revision 77f50f6c6304355d638d5bf6f172d404940447de) +++ tests/cget.test (.../cget.test) (revision dc9120981daa00d27f8639ea98a71efc2078e0e8) @@ -1,13 +1,11 @@ # -*- Tcl -*- package req nx - package require nx::test -namespace import ::nx::* # # The first test set checks just the basic behavior: # -Test case cget-simple { +nx::test case cget-simple { nx::Class create Person { :property famnam:required @@ -36,9 +34,9 @@ # - wrong parameter # - parameter without a value # - ? {p1 cget} {wrong # of arguments: should be "cget name"} - ? {p1 cget -foo} {cannot lookup parameter value for -foo} - ? {p1 cget foo} {cannot lookup parameter value for foo} + ? {p1 cget} {wrong # of arguments: should be "cget /name/"} + ? {p1 cget -foo} "cget: unknown configure parameter -foo" + ? {p1 cget foo} "cget: unknown configure parameter foo" ? {p1 cget -sex} {can't read "sex": no such variable} # @@ -55,34 +53,34 @@ # # configure without arguments # - ? {p1 configure} "?-sex value? -famnam value ?-age integer? ?-friends value ...? ?-volatile? ?-noinit? ?-mixin mixinreg ...? ?-class class? ?-filter filterreg ...? ?__initcmd?" + ? {p1 info configure} "?-sex /value/? -famnam /value/ ?-age /integer/? ?-friends /value .../? ?-volatile? ?-object-mixin /mixinreg .../? ?-class /class/? ?-object-filter /filterreg .../? ?/__initblock/?" } # # The second test set checks redirection of configure / cget to slot # methods "assign" and "get". # -Test parameter count 1 -Test case cget-via-slot { +nx::test configure -count 1 +nx::test case cget-via-slot { nx::Class create C { # Define a property with a "get" method :property bar1 { - :public method get { object property} { + :public object method get { object property} { incr ::count(cget) nsf::var::set $object $property } } # Define a property with a "get" and "assign" method :property bar2 { - :public method get { object property} { + :public object method get { object property} { incr ::count(cget) nsf::var::set $object $property } - :public method assign { object property value } { + :public object method assign { object property value } { incr ::count(assign) nsf::var::set $object $property $value } @@ -95,7 +93,7 @@ # # configure without arguments # - ? {p1 configure} "?-bar1 value? ?-bar2 value? ?-volatile? ?-noinit? ?-mixin mixinreg ...? ?-class class? ?-filter filterreg ...? ?__initcmd?" + ? {p1 info configure} "?-bar1 /value/? ?-bar2 /value/? ?-volatile? ?-object-mixin /mixinreg .../? ?-class /class/? ?-object-filter /filterreg .../? ?/__initblock/?" # # test gettin/setting via slots @@ -124,7 +122,7 @@ # The third test set checks method binding to parameter: # All cmds are supposed to return resonable values. # -Test case cget-parameter-methods { +nx::test case cget-parameter-methods { nx::Class create C { :property {foo:alias,method=m0 {1 2 3}} :property {{bar:forward,method=%self m1 a b c %method} bar1} @@ -136,30 +134,32 @@ # # class-level lookup # - ? {C info lookup parameter list} \ - "-superclass -object-mixin -mixin -object-filter -filter -volatile -noinit -class __initcmd" + ? {C info lookup configure syntax} \ + "/::C/ configure ?-superclass /class .../? ?-mixin /mixinreg .../? ?-filter /filterreg .../? ?-volatile? ?-object-mixin /mixinreg .../? ?-class /class/? ?-object-filter /filterreg .../? ?/__initblock/?" ? {C cget -superclass} "::nx::Object" ? {C cget -object-mixin} "" ? {C cget -mixin} "" ? {C cget -filter} "" ? {C cget -volatile} 0 - ? {C cget -noinit} "" + #? {C cget -noinit} "" ? {C cget -class} "::nx::Class" # # object-level lookup # - ? {c1 info lookup parameter list} \ - "-foo -bar -volatile -noinit -mixin -class -filter __initcmd" + ? {c1 info lookup configure syntax} \ + "/::c1/ configure ?-foo /value/? ?-bar /value/? ?-volatile? ?-object-mixin /mixinreg .../? ?-class /class/? ?-object-filter /filterreg .../? ?/__initblock/?" # # query all properties from base classes # ? {c1 cget -volatile} 0 - ? {c1 cget -noinit} "" - ? {c1 cget -mixin} "" + #? {c1 cget -noinit} "" + #? {c1 cget -mixin} "" + ? {c1 cget -object-mixin} "" ? {c1 cget -class} ::C - ? {c1 cget -filter} "" + #? {c1 cget -filter} "" + ? {c1 cget -object-filter} "" # # query alias and forward @@ -175,8 +175,8 @@ # # The fourth test set checks performance of "cget" and "configure". # -nx::Test parameter count 10000 -Test case cget-performance { +nx::test configure -count 10000 +nx::test case cget-performance { nx::Class create Person { :property famnam:required @@ -186,10 +186,10 @@ # Define a property with a "get" and "assign" method :property bar { - :public method get { object property } { + :public object method get { object property } { nsf::var::set $object $property } - :public method assign { object property value } { + :public object method assign { object property value } { nsf::var::set $object $property $value } } @@ -218,4 +218,192 @@ ? {p1 configure -age 27} "" ? {p1 configure -bar 102} "" -} \ No newline at end of file +} + +nx::test configure -count 1 +nx::test case configure-trace-class { + + # + # class case with no default + # + nx::Class create C + C property p { + set :valuechangedcmd { + #puts stderr "C.p valuechangedcmd $obj $var +1" + ::nsf::var::set $obj $var [expr [list [::nsf::var::set $obj $var] + 1]] + } + } + + C create c1 + + ? {c1 eval {info exists :p}} 0 + ? {c1 cget -p} {can't read "p": no such variable} + ? {c1 configure -p 1} "" + ? {c1 eval {info exists :p}} 1 + ? {c1 cget -p} "2" + + # + # class case with default + # + C property {q 100} { + set :valuechangedcmd { + #puts stderr "C.q valuechangedcmd $obj $var +1" + ::nsf::var::set $obj $var [expr [list [::nsf::var::set $obj $var] + 1]] + } + } + C create c2 + + ? {c2 eval {info exists :q}} 1 + ? {c2 cget -q} 100 + ? {c2 configure -q 101} "" + ? {c2 cget -q} "102" +} + +nx::test case configure-trace-object { + # + # object case with no default + # + + nx::Object create o + ? {o eval {info exists :A}} 0 + o object property A { + set :valuechangedcmd { + #puts stderr "o.A valuechangedcmd $obj $var +1" + ::nsf::var::set $obj $var [expr [list [::nsf::var::set $obj $var] + 1]] + } + } + # puts [o info object variables A] + # puts [o info variable parameter [o info object variables A]] + # puts [[o info object slots A] getParameterSpec] + + ? {o eval {info exists :A}} 0 + ? {o cget -A} {can't read "A": no such variable} + ? {o configure -A 1} "" + ? {o cget -A} "2" + + # + # object case with default + # + + ? {o eval {info exists :B}} 0 + o object property {B 1000} { + #puts stderr "o.B valuechangedcmd $obj $var +1" + set :valuechangedcmd {::nsf::var::set $obj $var [expr [list [::nsf::var::set $obj $var] + 1]]} + } + + ? {o eval {info exists :B}} 1 + ? {o cget -B} 1000 + ? {o configure -B 1001} "" + ? {o cget -B} 1002 +} + + + +nx::test case configure-trace-class-type { + + # + # class case with type and no default + # + nx::Class create C + C property p:integer { + set :valuechangedcmd { + #puts stderr "C.p valuechangedcmd $obj $var +1" + ::nsf::var::set $obj $var [expr [list [::nsf::var::set $obj $var] + 1]] + } + } + + C create c1 + + ? {c1 eval {info exists :p}} 0 + ? {c1 cget -p} {can't read "p": no such variable} + ? {c1 configure -p a} {expected integer but got "a" for parameter "-p"} + ? {c1 eval {info exists :p}} 0 + ? {c1 configure -p 1} "" + ? {c1 eval {info exists :p}} 1 + ? {c1 cget -p} "2" + + # + # class case with type and default + # + + ? {C property {q:integer aaa} { + set :valuechangedcmd { + #puts stderr "C.q valuechangedcmd $obj $var +1" + ::nsf::var::set $obj $var [expr [list [::nsf::var::set $obj $var] + 1]] + } + }} {expected integer but got "aaa" for parameter "q"} + + # slot should no exist + ? {C info slots q} "" + + ? {C property {q:integer 99} { + set :valuechangedcmd { + #puts stderr "C.q valuechangedcmd $obj $var +1" + ::nsf::var::set $obj $var [expr [list [::nsf::var::set $obj $var] + 1]] + } + }} "" + + # slot should exist + ? {C info slots q} "::C::slot::q" + + ? {C create c2 -q 111} ::c2 + ? {c2 eval {info exists :q}} 1 + + ? {c2 cget -q} 112 + ? {c2 configure -q 101} "" + ? {c2 cget -q} "102" +} + + +nx::test case configure-trace-object-type { + # + # object case with no default + # + + nx::Object create o + ? {o eval {info exists :A}} 0 + o object property A:integer { + set :valuechangedcmd { + #puts stderr "o.A valuechangedcmd $obj $var +1" + ::nsf::var::set $obj $var [expr [list [::nsf::var::set $obj $var] + 1]] + } + } + # puts [o info object variables A] + # puts [o info variable parameter [o info object variables A]] + # puts [[o info object slots A] getParameterSpec] + + ? {o eval {info exists :A}} 0 + ? {o cget -A} {can't read "A": no such variable} + ? {o configure -A 1} "" + ? {o cget -A} "2" + ? {o configure -A x} {expected integer but got "x" for parameter "-A"} + ? {o cget -A} "2" + + # + # object case with default + # + + ? {o eval {info exists :B}} 0 + ? {o object property {B:integer x} { + #puts stderr "o.B valuechangedcmd $obj $var +1" + set :valuechangedcmd {::nsf::var::set $obj $var [expr [list [::nsf::var::set $obj $var] + 1]]} + }} {expected integer but got "x" for parameter "B"} + ? {o eval {info exists :B}} 0 + + ? {o info object slots B} "" + + ? {o object property {B:integer 1000} { + #puts stderr "o.B valuechangedcmd $obj $var +1" + set :valuechangedcmd {::nsf::var::set $obj $var [expr [list [::nsf::var::set $obj $var] + 1]]} + }} {} + + ? {o info object slots B} {::o::per-object-slot::B} + ? {o eval {info exists :B}} 1 + + ? {o cget -B} 1000 + ? {o configure -B 1001} "" + ? {o cget -B} 1002 + + ? {o configure -B x} {expected integer but got "x" for parameter "-B"} + ? {o cget -B} 1002 +}