Index: TODO =================================================================== diff -u -rdf860654b8c8c9b3ed13abd1700ec4dd128626bc -r3b5d2f4e0bc018420ebea39e54ad3212ade2a5bd --- TODO (.../TODO) (revision df860654b8c8c9b3ed13abd1700ec4dd128626bc) +++ TODO (.../TODO) (revision 3b5d2f4e0bc018420ebea39e54ad3212ade2a5bd) @@ -4245,13 +4245,20 @@ nx.tcl: - change parameter name in "/cls/ inif paramameter ... ?pattern?" from "name" to "pattern" +- changed name "/obj|cls/ slot info definition" to + "/obj|cls/ slot info definition" since result is a set +- dropped parameter method "properties" +- dropped "/obj/ info properties" + (since "properties" or "variables" are returned") ======================================================================== TODO: - finalize handling of parameter methods in cget * what to do with "cget -noinit" * check all provided definitions * handling of extra args in parameter methods? +- "/obj|cls/ info slot definition" should return a full command + (containing flags and property|variable) - regression tests for "/obj/ info lookup parameter ...." - handling of "required" in reconfigure (see parameter-object-mixin-dependency in parameters.test) @@ -4264,7 +4271,6 @@ - Property reform part 3: change defaultPropertyAccessor or nx to none - update documentation with property reform -- do we need "-properties" in nx? - do we need "config" as parameter property? - handling of method names in error messages from nsfAPI.h. The following Index: library/lib/nx-traits.tcl =================================================================== diff -u -re884c2b0d63fa1b5a691e866ccff8d4094a2a8e4 -r3b5d2f4e0bc018420ebea39e54ad3212ade2a5bd --- library/lib/nx-traits.tcl (.../nx-traits.tcl) (revision e884c2b0d63fa1b5a691e866ccff8d4094a2a8e4) +++ library/lib/nx-traits.tcl (.../nx-traits.tcl) (revision 3b5d2f4e0bc018420ebea39e54ad3212ade2a5bd) @@ -78,7 +78,7 @@ $obj public alias $newName $traitMethodHandle # We define property inheritance for the time being only for # instance properties. - foreach d [$traitName info slot definition] { + foreach d [$traitName info slot definitions] { $obj property $d } } Index: library/nx/nx.tcl =================================================================== diff -u -rdf860654b8c8c9b3ed13abd1700ec4dd128626bc -r3b5d2f4e0bc018420ebea39e54ad3212ade2a5bd --- library/nx/nx.tcl (.../nx.tcl) (revision df860654b8c8c9b3ed13abd1700ec4dd128626bc) +++ library/nx/nx.tcl (.../nx.tcl) (revision 3b5d2f4e0bc018420ebea39e54ad3212ade2a5bd) @@ -703,7 +703,7 @@ :alias "info name" ::nsf::methods::object::info::name :alias "info parent" ::nsf::methods::object::info::parent :alias "info precedence" ::nsf::methods::object::info::precedence - :method "info slot definition" {{-type:class ::nx::Slot} pattern:optional} { + :method "info slot definitions" {{-type:class ::nx::Slot} pattern:optional} { set result {} foreach slot [: ::nsf::methods::object::info::slotobjects -type $type {*}[current args]] { lappend result [$slot getPropertyDefinition] @@ -721,7 +721,7 @@ return [: ::nsf::methods::object::info::slotobjects -type $type {*}[current args]] } # "info properties" is a short form of "info slot definition" - :alias "info properties" ::nx::Object::slot::__info::slot::definition + #:alias "info properties" ::nx::Object::slot::__info::slot::definition :alias "info vars" ::nsf::methods::object::info::vars } @@ -799,7 +799,7 @@ if {[info exists pattern]} {lappend cmd $pattern} return [: {*}$cmd] } - :method "info slot definition" {{-type ::nx::Slot} -closure:switch -source:optional pattern:optional} { + :method "info slot definitions" {{-type ::nx::Slot} -closure:switch -source:optional pattern:optional} { set result {} foreach slot [: ::nsf::methods::class::info::slotobjects -type $type {*}[current args]] { lappend result [$slot getPropertyDefinition] @@ -814,7 +814,7 @@ return $result } # "info properties" is a short form of "info slot definition" - :alias "info properties" ::nx::Class::slot::__info::slot::definition + #:alias "info properties" ::nx::Class::slot::__info::slot::definition :alias "info subclass" ::nsf::methods::class::info::subclass :alias "info superclass" ::nsf::methods::class::info::superclass } @@ -1333,7 +1333,7 @@ if {[info exists :positional]} {lappend options positional} if {!${:config}} {lappend options noconfig} if {[info exists :default]} { - return [list [:namedParameterSpec "" ${:name} $options] ${:default}] + return [list [:namedParameterSpec "" ${:name} $options] ${:default}] } else { return [list [:namedParameterSpec "" ${:name} $options]] } @@ -2044,13 +2044,13 @@ # Define method "properties" for convenience to define multiple # properties based on a list of parameter specifications. ###################################################################### + # + #proc ::nx::internal::addProperties {arglist} { + # foreach arg $arglist {:property $arg} + #} + #::nx::ObjectParameterSlot create ::nx::Object::slot::properties \ + # -methodname "::nx::internal::addProperties" - proc ::nx::internal::addProperties {arglist} { - foreach arg $arglist {:property $arg} - } - ::nx::ObjectParameterSlot create ::nx::Object::slot::properties \ - -methodname "::nx::internal::addProperties" - ###################################################################### # Minimal definition of a value checker that permits every value # without warnings. The primary purpose of this value checker is to Index: tests/cget.test =================================================================== diff -u -r200af46a04ef0a09e4d27b6662a5a49b82c8ba52 -r3b5d2f4e0bc018420ebea39e54ad3212ade2a5bd --- tests/cget.test (.../cget.test) (revision 200af46a04ef0a09e4d27b6662a5a49b82c8ba52) +++ tests/cget.test (.../cget.test) (revision 3b5d2f4e0bc018420ebea39e54ad3212ade2a5bd) @@ -55,7 +55,7 @@ # # configure without arguments # - ? {p1 configure} "?-sex value? -famnam value ?-age integer? ?-friends value ...? ?-volatile? ?-properties value? ?-noinit? ?-mixin mixinreg ...? ?-class class? ?-filter filterreg ...? ?__initcmd?" + ? {p1 configure} "?-sex value? -famnam value ?-age integer? ?-friends value ...? ?-volatile? ?-noinit? ?-mixin mixinreg ...? ?-class class? ?-filter filterreg ...? ?__initcmd?" } # @@ -95,7 +95,7 @@ # # configure without arguments # - ? {p1 configure} "?-bar1 value? ?-bar2 value? ?-volatile? ?-properties value? ?-noinit? ?-mixin mixinreg ...? ?-class class? ?-filter filterreg ...? ?__initcmd?" + ? {p1 configure} "?-bar1 value? ?-bar2 value? ?-volatile? ?-noinit? ?-mixin mixinreg ...? ?-class class? ?-filter filterreg ...? ?__initcmd?" # # test gettin/setting via slots @@ -121,8 +121,34 @@ } # -# The third test set checks performance of "cget" and "configure". +# The third test set checks method binding to parameter # +Test case cget-parameter-methods { + nx::Class create C { + :create c1 + } + + # : ::nsf::methods::object::info::objectparameter syntax + #? {C configure} "-volatile -noinit -mixin -class -filter __initcmd" + ? {C info lookup parameter list} \ + "-superclass -object-mixin -mixin -object-filter -filter -volatile -noinit -class __initcmd" + ? {C cget -superclass} "::nx::Object" + ? {C cget -object-mixin} "" + ? {C cget -mixin} "" + ? {C cget -filter} "" + ? {C cget -volatile} 0 + ? {C cget -noinit} "" + ? {C cget -class} "::nx::Class" + + ? {c1 info lookup parameter list} \ + "-volatile -noinit -mixin -class -filter __initcmd" + +} + + +# +# The fourth test set checks performance of "cget" and "configure". +# nx::Test parameter count 10000 Test case cget-performance { Index: tests/info-method.test =================================================================== diff -u -r200af46a04ef0a09e4d27b6662a5a49b82c8ba52 -r3b5d2f4e0bc018420ebea39e54ad3212ade2a5bd --- tests/info-method.test (.../info-method.test) (revision 200af46a04ef0a09e4d27b6662a5a49b82c8ba52) +++ tests/info-method.test (.../info-method.test) (revision 3b5d2f4e0bc018420ebea39e54ad3212ade2a5bd) @@ -502,13 +502,13 @@ :method "sub foo" args {;} } - ? {D info lookup slots} "::D::per-object-slot::a2 ::nx::Class::slot::superclass ::nx::Class::slot::object-mixin ::nx::Class::slot::mixin ::nx::Class::slot::object-filter ::nx::Class::slot::filter ::nx::Object::slot::volatile ::nx::Object::slot::properties ::nx::Object::slot::noinit ::nx::Object::slot::__initcmd ::nx::Object::slot::class" + ? {D info lookup slots} "::D::per-object-slot::a2 ::nx::Class::slot::superclass ::nx::Class::slot::object-mixin ::nx::Class::slot::mixin ::nx::Class::slot::object-filter ::nx::Class::slot::filter ::nx::Object::slot::volatile ::nx::Object::slot::noinit ::nx::Object::slot::__initcmd ::nx::Object::slot::class" C create c1 ? {c1 info precedence} "::C ::nx::Object" ? {C info heritage} "::nx::Object" ? {C info slot objects -closure -source application} "::C::slot::a ::C::slot::b" - ? {C info slot objects -closure} "::C::slot::a ::C::slot::b ::nx::Object::slot::volatile ::nx::Object::slot::properties ::nx::Object::slot::noinit ::nx::Object::slot::mixin ::nx::Object::slot::__initcmd ::nx::Object::slot::class ::nx::Object::slot::filter" + ? {C info slot objects -closure} "::C::slot::a ::C::slot::b ::nx::Object::slot::volatile ::nx::Object::slot::noinit ::nx::Object::slot::mixin ::nx::Object::slot::__initcmd ::nx::Object::slot::class ::nx::Object::slot::filter" ? {C info slot objects} "::C::slot::a ::C::slot::b" @@ -545,7 +545,7 @@ ? {::nx::Object info method parameter info} "" ? {d1 info precedence} "::D ::C ::nx::Object" - ? {d1 info lookup slots} "::D::slot::b ::D::slot::c ::C::slot::a ::nx::Object::slot::volatile ::nx::Object::slot::properties ::nx::Object::slot::noinit ::nx::Object::slot::mixin ::nx::Object::slot::__initcmd ::nx::Object::slot::class ::nx::Object::slot::filter" + ? {d1 info lookup slots} "::D::slot::b ::D::slot::c ::C::slot::a ::nx::Object::slot::volatile ::nx::Object::slot::noinit ::nx::Object::slot::mixin ::nx::Object::slot::__initcmd ::nx::Object::slot::class ::nx::Object::slot::filter" # Fully qualified name, with metachars # The following command returns the slots of D inherited from @@ -698,23 +698,23 @@ } C new - ? {C info parameter syntax} "?-a value? ?-b value? ?-volatile? ?-properties value? ?-noinit? ?-mixin mixinreg ...? ?-class class? ?-filter filterreg ...? ?__initcmd?" + ? {C info parameter syntax} "?-a value? ?-b value? ?-volatile? ?-noinit? ?-mixin mixinreg ...? ?-class class? ?-filter filterreg ...? ?__initcmd?" ? {C info parameter syntax a} "?-a value?" - ? {C info parameter definitions} "-a {-b 1} -volatile:alias,slot=::nx::Object::slot::volatile,slotassign,noarg -properties:alias,method=::nx::internal::addProperties -noinit:alias,method=::nsf::methods::object::noinit,noarg -mixin:mixinreg,alias,0..n -class:class,alias,method=::nsf::methods::object::class -filter:filterreg,alias,0..n __initcmd:initcmd,optional,noleadingdash" + ? {C info parameter definitions} "-a {-b 1} -volatile:alias,slot=::nx::Object::slot::volatile,slotassign,noarg -noinit:alias,method=::nsf::methods::object::noinit,noarg -mixin:mixinreg,alias,0..n -class:class,alias,method=::nsf::methods::object::class -filter:filterreg,alias,0..n __initcmd:initcmd,optional,noleadingdash" - ? {C info parameter list} "-a -b -volatile -properties -noinit -mixin -class -filter __initcmd" - ? {C info parameter names} "a b volatile properties noinit mixin class filter __initcmd" - ? {lsort [C info slot objects -closure]} "::C::slot::a ::C::slot::b ::nx::Object::slot::__initcmd ::nx::Object::slot::class ::nx::Object::slot::filter ::nx::Object::slot::mixin ::nx::Object::slot::noinit ::nx::Object::slot::properties ::nx::Object::slot::volatile" + ? {C info parameter list} "-a -b -volatile -noinit -mixin -class -filter __initcmd" + ? {C info parameter names} "a b volatile noinit mixin class filter __initcmd" + ? {lsort [C info slot objects -closure]} "::C::slot::a ::C::slot::b ::nx::Object::slot::__initcmd ::nx::Object::slot::class ::nx::Object::slot::filter ::nx::Object::slot::mixin ::nx::Object::slot::noinit ::nx::Object::slot::volatile" ? {C info parameter definitions b} "{-b 1}" ? {D info parameter definitions b} "{-b 2}" ? {D info slot objects -closure b} "::D::slot::b" ? {D info slot objects -closure a} "::C::slot::a" ? {D info slot objects -closure class} "::nx::Object::slot::class" - ? {D info parameter list} "-b -c -a -volatile -properties -noinit -mixin -class -filter __initcmd" - ? {D info parameter names} "b c a volatile properties noinit mixin class filter __initcmd" + ? {D info parameter list} "-b -c -a -volatile -noinit -mixin -class -filter __initcmd" + ? {D info parameter names} "b c a volatile noinit mixin class filter __initcmd" } # @@ -733,7 +733,7 @@ ? {lsort [::nx::Object info methods "slots"]} "" ? {lsort [::nx::Object info methods "*slots*"]} "" ? {lsort [::nx::Object info methods -path "*slot*"]} \ - "{info lookup slots} {info slot definition} {info slot names} {info slot objects}" + "{info lookup slots} {info slot definitions} {info slot names} {info slot objects}" ? {lsort [::nx::Object info methods -path "*filter*"]} \ "filter {info filter guard} {info filter methods} {info lookup filter}" Index: tests/object-system.test =================================================================== diff -u -r5d1617640ad71fd52b069f81cfcadbe4cbb6f2a2 -r3b5d2f4e0bc018420ebea39e54ad3212ade2a5bd --- tests/object-system.test (.../object-system.test) (revision 5d1617640ad71fd52b069f81cfcadbe4cbb6f2a2) +++ tests/object-system.test (.../object-system.test) (revision 3b5d2f4e0bc018420ebea39e54ad3212ade2a5bd) @@ -212,11 +212,11 @@ #? {X::slot info vars} __parameter -#? {X info attributes} {{x 1} {y 2}} +? {X info parameter definitions ?} {{-x 1} {-y 2}} ? {X info parameter definitions x} {{-x 1}} ? {X info parameter definitions y} {{-y 2}} -? {X info properties} {{x 1} {y 2}} -? {X info properties -closure *a*} {volatile:alias,noarg class:class,alias,method=::nsf::methods::object::class} +#? {X info properties} {{x 1} {y 2}} +#? {X info properties -closure *a*} {volatile:alias,noarg class:class,alias,method=::nsf::methods::object::class} # actually, we want c1 to test below the recreation of c1 in another # object system Index: tests/parameters.test =================================================================== diff -u -r200af46a04ef0a09e4d27b6662a5a49b82c8ba52 -r3b5d2f4e0bc018420ebea39e54ad3212ade2a5bd --- tests/parameters.test (.../parameters.test) (revision 200af46a04ef0a09e4d27b6662a5a49b82c8ba52) +++ tests/parameters.test (.../parameters.test) (revision 3b5d2f4e0bc018420ebea39e54ad3212ade2a5bd) @@ -274,7 +274,7 @@ C create c1 ? {C eval :__objectparameter} \ - "{-superclass:class,alias,method=::nsf::methods::class::superclass,1..n ::nx::Object} -object-mixin:mixinreg,alias,method=::nsf::classes::nx::Object::mixin -mixin:mixinreg,alias,0..n -object-filter:filterreg,alias,method=::nsf::classes::nx::Object::filter -filter:filterreg,alias,0..n -volatile:alias,slot=::nx::Object::slot::volatile,slotassign,noarg -properties:alias,method=::nx::internal::addProperties -noinit:alias,method=::nsf::methods::object::noinit,noarg -class:class,alias,method=::nsf::methods::object::class __initcmd:initcmd,optional,noleadingdash" + "{-superclass:class,alias,method=::nsf::methods::class::superclass,1..n ::nx::Object} -object-mixin:mixinreg,alias,method=::nsf::classes::nx::Object::mixin -mixin:mixinreg,alias,0..n -object-filter:filterreg,alias,method=::nsf::classes::nx::Object::filter -filter:filterreg,alias,0..n -volatile:alias,slot=::nx::Object::slot::volatile,slotassign,noarg -noinit:alias,method=::nsf::methods::object::noinit,noarg -class:class,alias,method=::nsf::methods::object::class __initcmd:initcmd,optional,noleadingdash" #### TOOD: remove or add #? {c1 eval :__objectparameter} \ @@ -306,7 +306,7 @@ "::D::slot::d ::C::slot::a ::C::slot::b ::C::slot::c" ? {d1 eval :__objectparameter} \ - "-d:required -a -b:boolean {-c 1} -volatile:alias,slot=::nx::Object::slot::volatile,slotassign,noarg -properties:alias,method=::nx::internal::addProperties -noinit:alias,method=::nsf::methods::object::noinit,noarg -mixin:mixinreg,alias,0..n -class:class,alias,method=::nsf::methods::object::class -filter:filterreg,alias,0..n __initcmd:initcmd,optional,noleadingdash" + "-d:required -a -b:boolean {-c 1} -volatile:alias,slot=::nx::Object::slot::volatile,slotassign,noarg -noinit:alias,method=::nsf::methods::object::noinit,noarg -mixin:mixinreg,alias,0..n -class:class,alias,method=::nsf::methods::object::class -filter:filterreg,alias,0..n __initcmd:initcmd,optional,noleadingdash" } ####################################################### @@ -335,29 +335,29 @@ D mixin M ? {d1 eval :__objectparameter} \ - "-b -m1 -m2 -d:required -a {-c 1} -volatile:alias,slot=::nx::Object::slot::volatile,slotassign,noarg -properties:alias,method=::nx::internal::addProperties -noinit:alias,method=::nsf::methods::object::noinit,noarg -mixin:mixinreg,alias,0..n -class:class,alias,method=::nsf::methods::object::class -filter:filterreg,alias,0..n __initcmd:initcmd,optional,noleadingdash" \ + "-b -m1 -m2 -d:required -a {-c 1} -volatile:alias,slot=::nx::Object::slot::volatile,slotassign,noarg -noinit:alias,method=::nsf::methods::object::noinit,noarg -mixin:mixinreg,alias,0..n -class:class,alias,method=::nsf::methods::object::class -filter:filterreg,alias,0..n __initcmd:initcmd,optional,noleadingdash" \ "mixin added" M mixin M2 ? {d1 eval :__objectparameter} \ - "-b2 -b -m1 -m2 -d:required -a {-c 1} -volatile:alias,slot=::nx::Object::slot::volatile,slotassign,noarg -properties:alias,method=::nx::internal::addProperties -noinit:alias,method=::nsf::methods::object::noinit,noarg -mixin:mixinreg,alias,0..n -class:class,alias,method=::nsf::methods::object::class -filter:filterreg,alias,0..n __initcmd:initcmd,optional,noleadingdash" \ + "-b2 -b -m1 -m2 -d:required -a {-c 1} -volatile:alias,slot=::nx::Object::slot::volatile,slotassign,noarg -noinit:alias,method=::nsf::methods::object::noinit,noarg -mixin:mixinreg,alias,0..n -class:class,alias,method=::nsf::methods::object::class -filter:filterreg,alias,0..n __initcmd:initcmd,optional,noleadingdash" \ "transitive mixin added" D mixin "" #we should have again the old interface ? {d1 eval :__objectparameter} \ - "-d:required -a -b:boolean {-c 1} -volatile:alias,slot=::nx::Object::slot::volatile,slotassign,noarg -properties:alias,method=::nx::internal::addProperties -noinit:alias,method=::nsf::methods::object::noinit,noarg -mixin:mixinreg,alias,0..n -class:class,alias,method=::nsf::methods::object::class -filter:filterreg,alias,0..n __initcmd:initcmd,optional,noleadingdash" + "-d:required -a -b:boolean {-c 1} -volatile:alias,slot=::nx::Object::slot::volatile,slotassign,noarg -noinit:alias,method=::nsf::methods::object::noinit,noarg -mixin:mixinreg,alias,0..n -class:class,alias,method=::nsf::methods::object::class -filter:filterreg,alias,0..n __initcmd:initcmd,optional,noleadingdash" C mixin M ? {d1 eval :__objectparameter} \ - "-b2 -b -m1 -m2 -d:required -a {-c 1} -volatile:alias,slot=::nx::Object::slot::volatile,slotassign,noarg -properties:alias,method=::nx::internal::addProperties -noinit:alias,method=::nsf::methods::object::noinit,noarg -mixin:mixinreg,alias,0..n -class:class,alias,method=::nsf::methods::object::class -filter:filterreg,alias,0..n __initcmd:initcmd,optional,noleadingdash" \ + "-b2 -b -m1 -m2 -d:required -a {-c 1} -volatile:alias,slot=::nx::Object::slot::volatile,slotassign,noarg -noinit:alias,method=::nsf::methods::object::noinit,noarg -mixin:mixinreg,alias,0..n -class:class,alias,method=::nsf::methods::object::class -filter:filterreg,alias,0..n __initcmd:initcmd,optional,noleadingdash" \ "mixin added" C mixin "" #we should have again the old interface ? {d1 eval :__objectparameter} \ - "-d:required -a -b:boolean {-c 1} -volatile:alias,slot=::nx::Object::slot::volatile,slotassign,noarg -properties:alias,method=::nx::internal::addProperties -noinit:alias,method=::nsf::methods::object::noinit,noarg -mixin:mixinreg,alias,0..n -class:class,alias,method=::nsf::methods::object::class -filter:filterreg,alias,0..n __initcmd:initcmd,optional,noleadingdash" + "-d:required -a -b:boolean {-c 1} -volatile:alias,slot=::nx::Object::slot::volatile,slotassign,noarg -noinit:alias,method=::nsf::methods::object::noinit,noarg -mixin:mixinreg,alias,0..n -class:class,alias,method=::nsf::methods::object::class -filter:filterreg,alias,0..n __initcmd:initcmd,optional,noleadingdash" } ####################################################### @@ -379,7 +379,7 @@ ? {D create d1} \ {required argument 'd' is missing, should be: - ::d1 __configure -d value ?-a value? ?-b boolean? ?-c value? ?-volatile? ?-properties value? ?-noinit? ?-mixin mixinreg ...? ?-class class? ?-filter filterreg ...? ?__initcmd?} + ::d1 __configure -d value ?-a value? ?-b boolean? ?-c value? ?-volatile? ?-noinit? ?-mixin mixinreg ...? ?-class class? ?-filter filterreg ...? ?__initcmd?} ? {D create d2 -d x -b a} \ {expected boolean but got "a" for parameter "-b"} \ @@ -1843,13 +1843,13 @@ nx::Class create M1 {:property b1:required} nx::Class create M2 {:property b2:required} - ? {c1 eval :__objectparameter} "-a1 -volatile:alias,slot=::nx::Object::slot::volatile,slotassign,noarg -properties:alias,method=::nx::internal::addProperties -noinit:alias,method=::nsf::methods::object::noinit,noarg -mixin:mixinreg,alias,0..n -class:class,alias,method=::nsf::methods::object::class -filter:filterreg,alias,0..n __initcmd:initcmd,optional,noleadingdash" + ? {c1 eval :__objectparameter} "-a1 -volatile:alias,slot=::nx::Object::slot::volatile,slotassign,noarg -noinit:alias,method=::nsf::methods::object::noinit,noarg -mixin:mixinreg,alias,0..n -class:class,alias,method=::nsf::methods::object::class -filter:filterreg,alias,0..n __initcmd:initcmd,optional,noleadingdash" c1 mixin M1 ? {c1 info precedence} "::M1 ::C ::nx::Object" - ? {c1 eval :__objectparameter} "-b1:required -a1 -volatile:alias,slot=::nx::Object::slot::volatile,slotassign,noarg -properties:alias,method=::nx::internal::addProperties -noinit:alias,method=::nsf::methods::object::noinit,noarg -mixin:mixinreg,alias,0..n -class:class,alias,method=::nsf::methods::object::class -filter:filterreg,alias,0..n __initcmd:initcmd,optional,noleadingdash" + ? {c1 eval :__objectparameter} "-b1:required -a1 -volatile:alias,slot=::nx::Object::slot::volatile,slotassign,noarg -noinit:alias,method=::nsf::methods::object::noinit,noarg -mixin:mixinreg,alias,0..n -class:class,alias,method=::nsf::methods::object::class -filter:filterreg,alias,0..n __initcmd:initcmd,optional,noleadingdash" # # Invalidate the object parameter and expect that the per-class @@ -1948,9 +1948,9 @@ ? {c1 info precedence} "::M ::C ::nx::Object" - ? {C info slot objects -closure} "::C::slot::a1 ::nx::Object::slot::volatile ::nx::Object::slot::properties ::nx::Object::slot::noinit ::nx::Object::slot::mixin ::nx::Object::slot::__initcmd ::nx::Object::slot::class ::nx::Object::slot::filter" + ? {C info slot objects -closure} "::C::slot::a1 ::nx::Object::slot::volatile ::nx::Object::slot::noinit ::nx::Object::slot::mixin ::nx::Object::slot::__initcmd ::nx::Object::slot::class ::nx::Object::slot::filter" - ? {c1 eval :__objectparameter} "-a2 -b1:required -a1 -volatile:alias,slot=::nx::Object::slot::volatile,slotassign,noarg -properties:alias,method=::nx::internal::addProperties -noinit:alias,method=::nsf::methods::object::noinit,noarg -mixin:mixinreg,alias,0..n -class:class,alias,method=::nsf::methods::object::class -filter:filterreg,alias,0..n __initcmd:initcmd,optional,noleadingdash" + ? {c1 eval :__objectparameter} "-a2 -b1:required -a1 -volatile:alias,slot=::nx::Object::slot::volatile,slotassign,noarg -noinit:alias,method=::nsf::methods::object::noinit,noarg -mixin:mixinreg,alias,0..n -class:class,alias,method=::nsf::methods::object::class -filter:filterreg,alias,0..n __initcmd:initcmd,optional,noleadingdash" # # invalidate object parameter and expect that the per-class mixin @@ -1962,9 +1962,9 @@ ? {c1 info precedence} "::M ::C ::nx::Object" - ? {C info slot objects -closure} "::C::slot::a1 ::nx::Object::slot::volatile ::nx::Object::slot::properties ::nx::Object::slot::noinit ::nx::Object::slot::mixin ::nx::Object::slot::__initcmd ::nx::Object::slot::class ::nx::Object::slot::filter" + ? {C info slot objects -closure} "::C::slot::a1 ::nx::Object::slot::volatile ::nx::Object::slot::noinit ::nx::Object::slot::mixin ::nx::Object::slot::__initcmd ::nx::Object::slot::class ::nx::Object::slot::filter" - ? {c1 eval :__objectparameter} "-a2 -b1:required -a1 -volatile:alias,slot=::nx::Object::slot::volatile,slotassign,noarg -properties:alias,method=::nx::internal::addProperties -noinit:alias,method=::nsf::methods::object::noinit,noarg -mixin:mixinreg,alias,0..n -class:class,alias,method=::nsf::methods::object::class -filter:filterreg,alias,0..n __initcmd:initcmd,optional,noleadingdash" + ? {c1 eval :__objectparameter} "-a2 -b1:required -a1 -volatile:alias,slot=::nx::Object::slot::volatile,slotassign,noarg -noinit:alias,method=::nsf::methods::object::noinit,noarg -mixin:mixinreg,alias,0..n -class:class,alias,method=::nsf::methods::object::class -filter:filterreg,alias,0..n __initcmd:initcmd,optional,noleadingdash" # should not require b1 ? {C create c2} ::c2 @@ -2261,14 +2261,14 @@ ? {C info parameter syntax a} "?-a value?" ? {C info parameter definitions v} "" - ? {C info slot definition v} "{v:noconfig v0}" + ? {C info slot definitions v} "{v:noconfig v0}" ? {C info parameter list v} "" ? {C info parameter syntax v} "" ? {C create c2 -a 10} ::c2 ? {C create c2 -v 10} \ - {invalid non-positional argument '-v', valid are : -a, -volatile, -properties, -noinit, -mixin, -class, -filter; - should be "::c2 configure ?-a value? ?-volatile? ?-properties value? ?-noinit? ?-mixin mixinreg ...? ?-class class? ?-filter filterreg ...? ?__initcmd?"} + {invalid non-positional argument '-v', valid are : -a, -volatile, -noinit, -mixin, -class, -filter; + should be "::c2 configure ?-a value? ?-volatile? ?-noinit? ?-mixin mixinreg ...? ?-class class? ?-filter filterreg ...? ?__initcmd?"} # # We expect a setter for "a" but not for "v". @@ -2423,7 +2423,7 @@ # # Test slots with configparameter true/false, accessor true/false -# against "info slot definition" and "info parameter" +# against "info slot definitions" and "info parameter" # nx::Test case class-info-slots-types { # @@ -2436,12 +2436,12 @@ } # "v" does NOT show up in "info parameter" - ? {C info parameter list} "-volatile -properties -noinit -mixin -class -filter __initcmd" - ? {C info parameter names} "volatile properties noinit mixin class filter __initcmd" + ? {C info parameter list} "-volatile -noinit -mixin -class -filter __initcmd" + ? {C info parameter names} "volatile noinit mixin class filter __initcmd" # "v" does show up in "info slot ..." ? {C info slot objects} "::C::slot::v" - ? {C info slot definition} "{v:noconfig 100}" + ? {C info slot definitions} "{v:noconfig 100}" nx::Class create D { :property {p0 200} @@ -2451,16 +2451,16 @@ } # "p2" and "p3" do NOT show up in "info parameter" - ? {D info parameter list} "-p0 -p1 -volatile -properties -noinit -mixin -class -filter __initcmd" - ? {D info parameter names} "p0 p1 volatile properties noinit mixin class filter __initcmd" + ? {D info parameter list} "-p0 -p1 -volatile -noinit -mixin -class -filter __initcmd" + ? {D info parameter names} "p0 p1 volatile noinit mixin class filter __initcmd" # "p1" and "p2" do NOT show up in "info methods" ? {D info methods} "p0 p3" # all properties show up in "info slot" ? {D info slot objects} "::D::slot::p0 ::D::slot::p1 ::D::slot::p2 ::D::slot::p3" - ? {D info slot definition} "{p0 200} {p1 201} {p2:noconfig 202} {p3:noconfig 203}" - ? {D info properties} "{p0 200} {p1 201} {p2:noconfig 202} {p3:noconfig 203}" + ? {D info slot definitions} "{p0 200} {p1 201} {p2:noconfig 202} {p3:noconfig 203}" + #? {D info properties} "{p0 200} {p1 201} {p2:noconfig 202} {p3:noconfig 203}" } @@ -2480,7 +2480,7 @@ # only the variables with slots show up in "info slot ..." ? {o1 info slot objects} "::o1::per-object-slot::v2 ::o1::per-object-slot::v1" - ? {o1 info slot definition} "{v2:0..n,noconfig 100} {v1:noconfig 100}" + ? {o1 info slot definitions} "{v2:0..n,noconfig 100} {v1:noconfig 100}" nx::Object create o2 { :property {p0 200} @@ -2494,8 +2494,8 @@ # all properties with slots show up in "info slot" ? {o2 info slot objects} "::o2::per-object-slot::p0 ::o2::per-object-slot::p1 ::o2::per-object-slot::p3" - ? {o2 info slot definition} "{p0 200} {p1 201} {p3:noconfig 203}" - ? {o2 info properties} "{p0 200} {p1 201} {p3:noconfig 203}" + ? {o2 info slot definitions} "{p0 200} {p1 201} {p3:noconfig 203}" + #? {o2 info properties} "{p0 200} {p1 201} {p3:noconfig 203}" } @@ -2505,32 +2505,37 @@ nx::Test case properties { # simple properties - nx::Class create Foo -properties {a {b 1}} - - ? {Foo info properties} "a {b 1}" + #nx::Class create Foo -properties {a {b 1}} + nx::Class create Foo { + :property a + :property {b 1} + } + ? {Foo info slot definitions} "a {b 1}" + + #? {Foo info properties} "a {b 1}" + # properties with value checker - nx::Class create Foo -properties { - a:boolean - {b:integer 1} + nx::Class create Foo { + :property a:boolean + :property {b:integer 1} } - ? {Foo info properties} "a:boolean {b:integer 1}" + ? {Foo info slot definitions} "a:boolean {b:integer 1}" # required/optional properties - nx::Class create Foo -properties { - a:required - b:boolean,required - } - ? {Foo info properties} "a:required b:boolean,required" + nx::Class create Foo { + :property a:required + :property b:boolean,required + } + ? {Foo info slot definitions} "a:required b:boolean,required" # properties with multiplicity - nx::Class create Foo -properties { - {ints:integer,0..n ""} - objs:object,1..n - obj:object,0..1 + nx::Class create Foo { + :property {ints:integer,0..n ""} + :property objs:object,1..n + :property obj:object,0..1 } - ? {Foo info properties} "objs:object,1..n {ints:integer,0..n {}} obj:object,0..1" - + ? {Foo info slot definitions} "objs:object,1..n {ints:integer,0..n {}} obj:object,0..1" } # Index: tests/properties.test =================================================================== diff -u -r200af46a04ef0a09e4d27b6662a5a49b82c8ba52 -r3b5d2f4e0bc018420ebea39e54ad3212ade2a5bd --- tests/properties.test (.../properties.test) (revision 200af46a04ef0a09e4d27b6662a5a49b82c8ba52) +++ tests/properties.test (.../properties.test) (revision 3b5d2f4e0bc018420ebea39e54ad3212ade2a5bd) @@ -39,7 +39,7 @@ # # just the public properties are accessible via the configure interface # - ? {c1 configure} { ?-e value? ?-a value? ?-b value? ?-volatile? ?-properties value? ?-noinit? ?-mixin mixinreg ...? ?-class class? ?-filter filterreg ...? ?__initcmd?} + ? {c1 configure} { ?-e value? ?-a value? ?-b value? ?-volatile? ?-noinit? ?-mixin mixinreg ...? ?-class class? ?-filter filterreg ...? ?__initcmd?} ? {c1 cget -a} a1 ? {c1 cget -b} b1 @@ -204,7 +204,7 @@ # # The use of "-incremental" implies multivalued # - ? {c1 configure} { ?-e value ...? ?-a value ...? ?-b value ...? ?-volatile? ?-properties value? ?-noinit? ?-mixin mixinreg ...? ?-class class? ?-filter filterreg ...? ?__initcmd?} + ? {c1 configure} { ?-e value ...? ?-a value ...? ?-b value ...? ?-volatile? ?-noinit? ?-mixin mixinreg ...? ?-class class? ?-filter filterreg ...? ?__initcmd?} ? {c1 cget -a} a1 ? {c1 cget -b} b1 @@ -386,7 +386,7 @@ # just the public properties are accessible via the configure interface # - ? {o1 configure} { ?-e value? ?-a value? ?-b value? ?-volatile? ?-properties value? ?-noinit? ?-mixin mixinreg ...? ?-class class? ?-filter filterreg ...? ?__initcmd?} + ? {o1 configure} { ?-e value? ?-a value? ?-b value? ?-volatile? ?-noinit? ?-mixin mixinreg ...? ?-class class? ?-filter filterreg ...? ?__initcmd?} # # just the public properties are accessible via the cget interface @@ -514,7 +514,7 @@ # # The use of "-incremental" implies multivalued # - ? {o1 configure} { ?-e value ...? ?-a value ...? ?-b value ...? ?-volatile? ?-properties value? ?-noinit? ?-mixin mixinreg ...? ?-class class? ?-filter filterreg ...? ?__initcmd?} + ? {o1 configure} { ?-e value ...? ?-a value ...? ?-b value ...? ?-volatile? ?-noinit? ?-mixin mixinreg ...? ?-class class? ?-filter filterreg ...? ?__initcmd?} ? {o1 cget -a} a1 ? {o1 cget -b} b1 @@ -680,12 +680,12 @@ # just the public properties are accessible via the configure interface # - ? {c1 configure} {?-a value? ?-volatile? ?-properties value? ?-noinit? ?-mixin mixinreg ...? ?-class class? ?-filter filterreg ...? ?__initcmd?} + ? {c1 configure} {?-a value? ?-volatile? ?-noinit? ?-mixin mixinreg ...? ?-class class? ?-filter filterreg ...? ?__initcmd?} ? {c1 cget -a} a1 ? {c1 configure -a a2} "" - ? {C configure} {?-b value? ?-superclass class ...? ?-object-mixin mixinreg? ?-mixin mixinreg ...? ?-object-filter filterreg? ?-filter filterreg ...? ?-volatile? ?-properties value? ?-noinit? ?-class class? ?__initcmd?} + ? {C configure} {?-b value? ?-superclass class ...? ?-object-mixin mixinreg? ?-mixin mixinreg ...? ?-object-filter filterreg? ?-filter filterreg ...? ?-volatile? ?-noinit? ?-class class? ?__initcmd?} ? {C cget -b} b1 ? {C configure -b b2} "" @@ -738,7 +738,7 @@ # just the public properties are accessible via the configure interface # - ? {c1 configure} { ?-e value? ?-a value? ?-b value? ?-volatile? ?-properties value? ?-noinit? ?-mixin mixinreg ...? ?-class class? ?-filter filterreg ...? ?__initcmd?} + ? {c1 configure} { ?-e value? ?-a value? ?-b value? ?-volatile? ?-noinit? ?-mixin mixinreg ...? ?-class class? ?-filter filterreg ...? ?__initcmd?} set e [C eval :__objectparameter] ? {C eval :__objectparameter} $e @@ -757,7 +757,7 @@ # # check influence of class-level per-object properties # - ? {d1 configure} { ?-e value? ?-a value? ?-b value? ?-volatile? ?-properties value? ?-noinit? ?-mixin mixinreg ...? ?-class class? ?-filter filterreg ...? ?__initcmd?} + ? {d1 configure} { ?-e value? ?-a value? ?-b value? ?-volatile? ?-noinit? ?-mixin mixinreg ...? ?-class class? ?-filter filterreg ...? ?__initcmd?} set e [D eval :__objectparameter] ? {D eval :__objectparameter} $e @@ -797,7 +797,7 @@ # just the public properties are accessible via the configure interface # - ? {o1 configure} { ?-e value? ?-a value? ?-b value? ?-volatile? ?-properties value? ?-noinit? ?-mixin mixinreg ...? ?-class class? ?-filter filterreg ...? ?__initcmd?} + ? {o1 configure} { ?-e value? ?-a value? ?-b value? ?-volatile? ?-noinit? ?-mixin mixinreg ...? ?-class class? ?-filter filterreg ...? ?__initcmd?} set e [o1 eval :__objectparameter] Index: tests/submethods.test =================================================================== diff -u -re884c2b0d63fa1b5a691e866ccff8d4094a2a8e4 -r3b5d2f4e0bc018420ebea39e54ad3212ade2a5bd --- tests/submethods.test (.../submethods.test) (revision e884c2b0d63fa1b5a691e866ccff8d4094a2a8e4) +++ tests/submethods.test (.../submethods.test) (revision 3b5d2f4e0bc018420ebea39e54ad3212ade2a5bd) @@ -229,7 +229,7 @@ # defaultcmd has to return also subcmds of other shadowed ensembles ? {lsort [o1 info has]} "valid submethods of ::o1 info has: mixin namespace something type" - ? {lsort [o1 info]} "valid submethods of ::o1 info: children class filter has info is lookup method methods mixin name parent precedence properties slot vars" + ? {lsort [o1 info]} "valid submethods of ::o1 info: children class filter has info is lookup method methods mixin name parent precedence slot vars" # returning methodpath in ensemble ? {o1 info has something path} "info has something path"