summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordkf <donal.k.fellows@manchester.ac.uk>2020-01-01 16:57:08 (GMT)
committerdkf <donal.k.fellows@manchester.ac.uk>2020-01-01 16:57:08 (GMT)
commit743e0e4e1a39cf24723ff9390322f904113e770b (patch)
tree3f6da4626da132c5b9a3dd827f470336badfd9b1
parent8249e877dffdca52ba20e0ffebdc9c7bd37c30ae (diff)
downloadtcl-743e0e4e1a39cf24723ff9390322f904113e770b.zip
tcl-743e0e4e1a39cf24723ff9390322f904113e770b.tar.gz
tcl-743e0e4e1a39cf24723ff9390322f904113e770b.tar.bz2
Move the TIP 558 tests into their own file
-rw-r--r--tests/oo.test840
-rw-r--r--tests/ooProp.test862
2 files changed, 862 insertions, 840 deletions
diff --git a/tests/oo.test b/tests/oo.test
index 4d28794..1ec33e7 100644
--- a/tests/oo.test
+++ b/tests/oo.test
@@ -5448,846 +5448,6 @@ test oo-43.13 {TIP 524: definition namespace control: user-level introspection}
parent destroy
namespace delete foodef
} -result {{} {} ::foodef {} {}}
-
-test oo-44.1 {TIP 558: properties: core support} -setup {
- oo::class create parent
- unset -nocomplain result
- set result {}
-} -body {
- oo::class create c {superclass parent}
- lappend result [info class properties c] [info class properties c -writable]
- oo::define c ::oo::configuresupport::readableproperties -set a b c
- lappend result [info class properties c] [info class properties c -writable]
- oo::define c ::oo::configuresupport::readableproperties -set f e d
- lappend result [info class properties c] [info class properties c -writable]
- oo::define c ::oo::configuresupport::readableproperties -set a a a
- lappend result [info class properties c] [info class properties c -writable]
- oo::define c ::oo::configuresupport::readableproperties -set
- lappend result [info class properties c] [info class properties c -writable]
-} -cleanup {
- parent destroy
-} -result {{} {} {a b c} {} {d e f} {} a {} {} {}}
-test oo-44.2 {TIP 558: properties: core support} -setup {
- oo::class create parent
- unset -nocomplain result
- set result {}
-} -body {
- oo::class create c {superclass parent}
- lappend result [info class properties c -all] [info class properties c -writable -all]
- oo::define c ::oo::configuresupport::readableproperties -set a b c
- lappend result [info class properties c -all] [info class properties c -writable -all]
- oo::define c ::oo::configuresupport::readableproperties -set f e d
- lappend result [info class properties c -all] [info class properties c -writable -all]
- oo::define c ::oo::configuresupport::readableproperties -set a a a
- lappend result [info class properties c -all] [info class properties c -writable -all]
- oo::define c ::oo::configuresupport::readableproperties -set
- lappend result [info class properties c -all] [info class properties c -writable -all]
-} -cleanup {
- parent destroy
-} -result {{} {} {a b c} {} {d e f} {} a {} {} {}}
-test oo-44.3 {TIP 558: properties: core support} -setup {
- oo::class create parent
- unset -nocomplain result
- set result {}
-} -body {
- oo::class create c {superclass parent}
- lappend result [info class properties c] [info class properties c -writable]
- oo::define c ::oo::configuresupport::writableproperties -set a b c
- lappend result [info class properties c] [info class properties c -writable]
- oo::define c ::oo::configuresupport::writableproperties -set f e d
- lappend result [info class properties c] [info class properties c -writable]
- oo::define c ::oo::configuresupport::writableproperties -set a a a
- lappend result [info class properties c] [info class properties c -writable]
- oo::define c ::oo::configuresupport::writableproperties -set
- lappend result [info class properties c] [info class properties c -writable]
-} -cleanup {
- parent destroy
-} -result {{} {} {} {a b c} {} {d e f} {} a {} {}}
-test oo-44.4 {TIP 558: properties: core support} -setup {
- oo::class create parent
- unset -nocomplain result
- set result {}
-} -body {
- oo::class create c {superclass parent}
- lappend result [info class properties c -all] [info class properties c -writable -all]
- oo::define c ::oo::configuresupport::writableproperties -set a b c
- lappend result [info class properties c -all] [info class properties c -writable -all]
- oo::define c ::oo::configuresupport::writableproperties -set f e d
- lappend result [info class properties c -all] [info class properties c -writable -all]
- oo::define c ::oo::configuresupport::writableproperties -set a a a
- lappend result [info class properties c -all] [info class properties c -writable -all]
- oo::define c ::oo::configuresupport::writableproperties -set
- lappend result [info class properties c -all] [info class properties c -writable -all]
-} -cleanup {
- parent destroy
-} -result {{} {} {} {a b c} {} {d e f} {} a {} {}}
-test oo-44.5 {TIP 558: properties: core support} -setup {
- oo::class create parent
- unset -nocomplain result
- set result {}
-} -body {
- oo::class create c {superclass parent}
- oo::class create d {superclass c}
- lappend result [info class properties d -all] [info class properties d -writable -all]
- oo::define c ::oo::configuresupport::readableproperties -set a b c
- oo::define d ::oo::configuresupport::readableproperties -set x y z
- lappend result [info class properties d -all] [info class properties d -writable -all]
- oo::define c ::oo::configuresupport::readableproperties -set f e d
- oo::define d ::oo::configuresupport::readableproperties -set r p q
- lappend result [info class properties d -all] [info class properties d -writable -all]
- oo::define c ::oo::configuresupport::readableproperties -set a a h
- oo::define d ::oo::configuresupport::readableproperties -set g h g
- lappend result [info class properties d -all] [info class properties d -writable -all]
- oo::define c ::oo::configuresupport::readableproperties -set
- lappend result [info class properties d -all] [info class properties d -writable -all]
- oo::define d ::oo::configuresupport::readableproperties -set
- lappend result [info class properties d -all] [info class properties d -writable -all]
-} -cleanup {
- parent destroy
-} -result {{} {} {a b c x y z} {} {d e f p q r} {} {a g h} {} {g h} {} {} {}}
-test oo-44.6 {TIP 558: properties: core support} -setup {
- oo::class create parent
- unset -nocomplain result
- set result {}
-} -body {
- oo::class create c {superclass parent}
- oo::class create d {superclass c}
- lappend result [info class properties d -all] [info class properties d -writable -all]
- oo::define c ::oo::configuresupport::writableproperties -set a b c
- oo::define d ::oo::configuresupport::writableproperties -set x y z
- lappend result [info class properties d -all] [info class properties d -writable -all]
- oo::define c ::oo::configuresupport::writableproperties -set f e d
- oo::define d ::oo::configuresupport::writableproperties -set r p q
- lappend result [info class properties d -all] [info class properties d -writable -all]
- oo::define c ::oo::configuresupport::writableproperties -set a a h
- oo::define d ::oo::configuresupport::writableproperties -set g h g
- lappend result [info class properties d -all] [info class properties d -writable -all]
- oo::define c ::oo::configuresupport::writableproperties -set
- lappend result [info class properties d -all] [info class properties d -writable -all]
- oo::define d ::oo::configuresupport::writableproperties -set
- lappend result [info class properties d -all] [info class properties d -writable -all]
-} -cleanup {
- parent destroy
-} -result {{} {} {} {a b c x y z} {} {d e f p q r} {} {a g h} {} {g h} {} {}}
-test oo-44.7 {TIP 558: properties: core support} -setup {
- oo::class create parent
- unset -nocomplain result
- set result {}
-} -body {
- oo::class create c {superclass parent}
- c create o
- lappend result [info object properties o] [info object properties o -writable]
- oo::objdefine o ::oo::configuresupport::objreadableproperties -set a b c
- lappend result [info object properties o] [info object properties o -writable]
- oo::objdefine o ::oo::configuresupport::objreadableproperties -set f e d
- lappend result [info object properties o] [info object properties o -writable]
- oo::objdefine o ::oo::configuresupport::objreadableproperties -set a a h
- lappend result [info object properties o] [info object properties o -writable]
- oo::objdefine o ::oo::configuresupport::objreadableproperties -set
- lappend result [info object properties o] [info object properties o -writable]
-} -cleanup {
- parent destroy
-} -result {{} {} {a b c} {} {d e f} {} {a h} {} {} {}}
-test oo-44.8 {TIP 558: properties: core support} -setup {
- oo::class create parent
- unset -nocomplain result
- set result {}
-} -body {
- oo::class create c {superclass parent}
- c create o
- lappend result [info object properties o] [info object properties o -writable]
- oo::objdefine o ::oo::configuresupport::objwritableproperties -set a b c
- lappend result [info object properties o] [info object properties o -writable]
- oo::objdefine o ::oo::configuresupport::objwritableproperties -set f e d
- lappend result [info object properties o] [info object properties o -writable]
- oo::objdefine o ::oo::configuresupport::objwritableproperties -set a a h
- lappend result [info object properties o] [info object properties o -writable]
- oo::objdefine o ::oo::configuresupport::objwritableproperties -set
- lappend result [info object properties o] [info object properties o -writable]
-} -cleanup {
- parent destroy
-} -result {{} {} {} {a b c} {} {d e f} {} {a h} {} {}}
-test oo-44.9 {TIP 558: properties: core support} -setup {
- oo::class create parent
- unset -nocomplain result
- set result {}
-} -body {
- oo::class create c {superclass parent}
- oo::class create d {superclass c}
- d create o
- lappend result [info object properties o -all] [info object properties o -writable -all]
- oo::define c ::oo::configuresupport::readableproperties -set a b
- oo::define d ::oo::configuresupport::readableproperties -set c d
- oo::objdefine o ::oo::configuresupport::objreadableproperties -set e f
- lappend result [info object properties o -all] [info object properties o -writable -all]
- oo::objdefine o ::oo::configuresupport::objreadableproperties -set f e d b e
- lappend result [info object properties o -all] [info object properties o -writable -all]
-} -cleanup {
- parent destroy
-} -result {{} {} {a b c d e f} {} {a b c d e f} {}}
-test oo-44.10 {TIP 558: properties: core support} -setup {
- oo::class create parent
- unset -nocomplain result
- set result {}
-} -body {
- oo::class create c {superclass parent}
- oo::class create d {superclass c}
- d create o
- lappend result [info object properties o -all] [info object properties o -writable -all]
- oo::define c ::oo::configuresupport::writableproperties -set a b
- oo::define d ::oo::configuresupport::writableproperties -set c d
- oo::objdefine o ::oo::configuresupport::objwritableproperties -set e f
- lappend result [info object properties o -all] [info object properties o -writable -all]
- oo::objdefine o ::oo::configuresupport::objwritableproperties -set f e d b e
- lappend result [info object properties o -all] [info object properties o -writable -all]
-} -cleanup {
- parent destroy
-} -result {{} {} {} {a b c d e f} {} {a b c d e f}}
-
-test oo-45.1 {TIP 558: properties: configurable class system} -setup {
- oo::class create parent
- unset -nocomplain result
- set result {}
-} -body {
- oo::configurable create Point {
- superclass parent
- property x y
- constructor args {
- my configure -x 0 -y 0 {*}$args
- }
- variable x y
- method report {} {
- lappend ::result "x=$x, y=$y"
- }
- }
- set pt [Point new -x 3]
- $pt report
- $pt configure -y 4
- $pt report
- lappend result [$pt configure -x],[$pt configure -y] [$pt configure]
-} -cleanup {
- parent destroy
-} -result {{x=3, y=0} {x=3, y=4} 3,4 {-x 3 -y 4}}
-test oo-45.2 {TIP 558: properties: configurable class system} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {
- superclass parent
- property x y
- constructor args {
- my configure -x 0 -y 0 {*}$args
- }
- }
- oo::configurable create 3DPoint {
- superclass Point
- property z
- constructor args {
- next -z 0 {*}$args
- }
- }
- set pt [3DPoint new -x 3 -y 4 -z 5]
- list [$pt configure -x],[$pt configure -y],[$pt configure -z] \
- [$pt configure]
-} -cleanup {
- parent destroy
-} -result {3,4,5 {-x 3 -y 4 -z 5}}
-test oo-45.3 {TIP 558: properties: configurable class system} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {
- superclass parent
- property x y
- constructor args {
- my configure -x 0 -y 0 {*}$args
- }
- }
- set pt [Point new -x 3 -y 4]
- oo::objdefine $pt property z
- $pt configure -z 5
- list [$pt configure -x],[$pt configure -y],[$pt configure -z] \
- [$pt configure]
-} -cleanup {
- parent destroy
-} -result {3,4,5 {-x 3 -y 4 -z 5}}
-test oo-45.4 {TIP 558: properties: configurable class system} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {
- superclass parent
- property x y
- constructor args {
- my configure -x 0 -y 0 {*}$args
- }
- }
- [Point new] configure gorp
-} -returnCodes error -cleanup {
- parent destroy
-} -result {bad property "gorp": must be -x or -y}
-test oo-45.5 {TIP 558: properties: configurable class system} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {
- superclass parent
- property x y
- constructor args {
- my configure -x 0 -y 0 {*}$args
- }
- }
- oo::configurable create 3DPoint {
- superclass Point
- property z
- constructor args {
- next -z 0 {*}$args
- }
- }
- [3DPoint new] configure gorp
-} -returnCodes error -cleanup {
- parent destroy
-} -result {bad property "gorp": must be -x, -y, or -z}
-test oo-45.6 {TIP 558: properties: configurable class system} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {
- superclass parent
- property x y
- constructor args {
- my configure -x 0 -y 0 {*}$args
- }
- }
- [Point create p] configure -x 1 -y
-} -returnCodes error -cleanup {
- parent destroy
-} -result {wrong # args: should be "::p configure ?-option value ...?"}
-test oo-45.7 {TIP 558: properties: configurable class system} -setup {
- oo::class create parent
- unset -nocomplain msg
-} -body {
- oo::configurable create Point {
- superclass parent
- property x y -kind writable
- constructor args {
- my configure -x 0 -y 0 {*}$args
- }
- }
- Point create p
- list [p configure -y ok] [catch {p configure -y} msg] $msg
-} -cleanup {
- parent destroy
-} -result {{} 1 {property "-y" is write only}}
-test oo-45.8 {TIP 558: properties: configurable class system} -setup {
- oo::class create parent
- unset -nocomplain msg
-} -body {
- oo::configurable create Point {
- superclass parent
- property x y -kind readable
- constructor args {
- my configure -x 0 {*}$args
- variable y 123
- }
- }
- Point create p
- list [p configure] [p configure -y] [catch {p configure -y foo} msg] $msg
-} -cleanup {
- parent destroy
-} -result {{-x 0 -y 123} 123 1 {property "-y" is read only}}
-
-test oo-46.1 {TIP 558: properties: declaration semantics} -setup {
- oo::class create parent
- unset -nocomplain result
- set result {}
-} -body {
- oo::configurable create Point {superclass parent}
- oo::define Point {
- variable xyz
- property x -get {
- global result
- lappend result "get"
- return [lrepeat 3 $xyz]
- } -set {
- global result
- lappend result [list set $value]
- set xyz [expr {$value * 3}]
- }
- }
- Point create pt
- pt configure -x 5
- lappend result >[pt configure -x]<
-} -cleanup {
- parent destroy
-} -result {{set 5} get {>15 15 15<}}
-test oo-46.2 {TIP 558: properties: declaration semantics} -setup {
- oo::class create parent
- unset -nocomplain result
- set result {}
-} -body {
- oo::configurable create Point {superclass parent}
- oo::define Point {
- variable xyz
- property x -get {
- global result
- lappend result "get"
- return [lrepeat 3 $xyz]
- } -set {
- global result
- lappend result [list set $value]
- set xyz [expr {$value * 3}]
- } y -kind readable -get {return $xyz}
- }
- Point create pt
- pt configure -x 5
- lappend result >[pt configure -x]< [pt configure -y]
-} -cleanup {
- parent destroy
-} -result {{set 5} get {>15 15 15<} 15}
-test oo-46.3 {TIP 558: properties: declaration semantics} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {superclass parent}
- oo::define Point {
- variable xyz
- property -x -get {return $xyz}
- }
-} -returnCodes error -cleanup {
- parent destroy
-} -result {bad property name "-x": must not begin with -}
-test oo-46.4 {TIP 558: properties: declaration semantics} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {superclass parent}
- oo::define Point {
- property "x y"
- }
-} -returnCodes error -cleanup {
- parent destroy
-} -result {bad property name "x y": must be a simple word}
-test oo-46.5 {TIP 558: properties: declaration semantics} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {superclass parent}
- oo::define Point {
- property ::x
- }
-} -returnCodes error -cleanup {
- parent destroy
-} -result {bad property name "::x": must not contain namespace separators}
-test oo-46.6 {TIP 558: properties: declaration semantics} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {superclass parent}
- oo::define Point {
- property x(
- }
-} -returnCodes error -cleanup {
- parent destroy
-} -result {bad property name "x(": must not contain parentheses}
-test oo-46.7 {TIP 558: properties: declaration semantics} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {superclass parent}
- oo::define Point {
- property x)
- }
-} -returnCodes error -cleanup {
- parent destroy
-} -result {bad property name "x)": must not contain parentheses}
-test oo-46.8 {TIP 558: properties: declaration semantics} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {superclass parent}
- oo::define Point {
- property x -get
- }
-} -returnCodes error -cleanup {
- parent destroy
-} -result {missing body to go with -get option}
-test oo-46.9 {TIP 558: properties: declaration semantics} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {superclass parent}
- oo::define Point {
- property x -set
- }
-} -returnCodes error -cleanup {
- parent destroy
-} -result {missing body to go with -set option}
-test oo-46.10 {TIP 558: properties: declaration semantics} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {superclass parent}
- oo::define Point {
- property x -kind
- }
-} -returnCodes error -cleanup {
- parent destroy
-} -result {missing kind value to go with -kind option}
-test oo-46.11 {TIP 558: properties: declaration semantics} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {superclass parent}
- oo::define Point {
- property x -get {} -set
- }
-} -returnCodes error -cleanup {
- parent destroy
-} -result {missing body to go with -set option}
-test oo-46.12 {TIP 558: properties: declaration semantics} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {
- superclass parent
- property x -get {} -get {return ok}
- }
- [Point new] configure -x
-} -cleanup {
- parent destroy
-} -result ok
-test oo-46.13 {TIP 558: properties: declaration semantics} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {
- superclass parent
- property x -kind gorp
- }
-} -returnCodes error -cleanup {
- parent destroy
-} -result {bad kind "gorp": must be readable, readwrite, or writable}
-test oo-46.14 {TIP 558: properties: declaration semantics} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {
- superclass parent
- property x -k reada -g {return ok}
- }
- [Point new] configure -x
-} -cleanup {
- parent destroy
-} -result ok
-test oo-46.15 {TIP 558: properties: declaration semantics} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {
- superclass parent
- property {*}{
- x -kind writable
- y -get {return ok}
- }
- }
- [Point new] configure -y
-} -cleanup {
- parent destroy
-} -result ok
-test oo-46.16 {TIP 558: properties: declaration semantics} -setup {
- oo::class create parent
- unset -nocomplain msg
-} -body {
- oo::configurable create Point {
- superclass parent
- variable xy
- property x -kind readable -get {return $xy}
- property x -kind writable -set {set xy $value}
- }
- Point create pt
- list [catch {
- pt configure -x ok
- } msg] $msg [catch {
- pt configure -x
- } msg] $msg [catch {
- pt configure -y 1
- } msg] $msg
-} -cleanup {
- parent destroy
-} -result {0 {} 1 {property "-x" is write only} 1 {bad property "-y": must be -x}}
-test oo-46.17 {TIP 558: properties: declaration semantics} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {
- superclass parent
- property x -get {return -code break}
- }
- while 1 {
- [Point new] configure -x
- break
- }
-} -returnCodes error -cleanup {
- parent destroy
-} -result {property getter for -x did a break}
-test oo-46.18 {TIP 558: properties: declaration semantics} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {
- superclass parent
- property x -get {return -code break}
- }
- while 1 {
- [Point new] configure
- break
- }
-} -returnCodes error -cleanup {
- parent destroy
-} -result {property getter for -x did a break}
-test oo-46.19 {TIP 558: properties: declaration semantics} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {
- superclass parent
- property x -get {error "boo"}
- }
- while 1 {
- [Point new] configure -x
- break
- }
-} -returnCodes error -cleanup {
- parent destroy
-} -result boo
-test oo-46.20 {TIP 558: properties: declaration semantics} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {
- superclass parent
- property x -get {error "boo"}
- }
- while 1 {
- [Point new] configure
- break
- }
-} -returnCodes error -cleanup {
- parent destroy
-} -result boo
-test oo-46.21 {TIP 558: properties: declaration semantics} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {
- superclass parent
- property x -get {return -code continue}
- }
- while 1 {
- [Point new] configure -x
- break
- }
-} -returnCodes error -cleanup {
- parent destroy
-} -result {property getter for -x did a continue}
-test oo-46.22 {TIP 558: properties: declaration semantics} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {
- superclass parent
- property x -get {return -level 2 ok}
- }
- apply {{} {
- [Point new] configure
- return bad
- }}
-} -cleanup {
- parent destroy
-} -result ok
-test oo-46.23 {TIP 558: properties: declaration semantics} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {
- superclass parent
- property x -get {return -level 2 ok}
- }
- apply {{} {
- [Point new] configure -x
- return bad
- }}
-} -cleanup {
- parent destroy
-} -result ok
-test oo-46.24 {TIP 558: properties: declaration semantics} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {
- superclass parent
- property x -set {return -code break}
- }
- while 1 {
- [Point new] configure -x gorp
- break
- }
-} -returnCodes error -cleanup {
- parent destroy
-} -result {property setter for -x did a break}
-test oo-46.25 {TIP 558: properties: declaration semantics} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {
- superclass parent
- property x -set {return -code continue}
- }
- while 1 {
- [Point new] configure -x gorp
- break
- }
-} -returnCodes error -cleanup {
- parent destroy
-} -result {property setter for -x did a continue}
-test oo-46.26 {TIP 558: properties: declaration semantics} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {
- superclass parent
- property x -set {error "boo"}
- }
- while 1 {
- [Point new] configure -x gorp
- break
- }
-} -returnCodes error -cleanup {
- parent destroy
-} -result boo
-test oo-46.27 {TIP 558: properties: declaration semantics} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {
- superclass parent
- property x -set {return -level 2 ok}
- }
- apply {{} {
- [Point new] configure -x gorp
- return bad
- }}
-} -cleanup {
- parent destroy
-} -result ok
-test oo-46.28 {TIP 558: properties: declaration semantics} -setup {
- oo::class create parent
-} -body {
- oo::configurable create Point {
- superclass parent
- private property var
- }
- Point create pt
- pt configure -var ok
- pt configure -var
-} -cleanup {
- parent destroy
-} -result ok
-
-test oo-47.1 {TIP 558: properties: error details} -setup {
- oo::class create parent
- unset -nocomplain msg opt
-} -body {
- oo::configurable create Point {superclass parent}
- list [catch {oo::define Point {property -x}} msg opt] \
- [dict get $opt -errorinfo] [dict get $opt -errorcode]
-} -cleanup {
- parent destroy
-} -result {1 {bad property name "-x": must not begin with -
- while executing
-"property -x"
- (in definition script for class "::Point" line 1)
- invoked from within
-"oo::define Point {property -x}"} {TCLOO PROPERTY_FORMAT}}
-test oo-47.2 {TIP 558: properties: error details} -setup {
- oo::class create parent
- unset -nocomplain msg opt
-} -body {
- oo::configurable create Point {superclass parent}
- list [catch {oo::define Point {property x -get}} msg opt] \
- [dict get $opt -errorinfo] [dict get $opt -errorcode]
-} -cleanup {
- parent destroy
-} -result {1 {missing body to go with -get option
- while executing
-"property x -get"
- (in definition script for class "::Point" line 1)
- invoked from within
-"oo::define Point {property x -get}"} {TCL WRONGARGS}}
-test oo-47.3 {TIP 558: properties: error details} -setup {
- oo::class create parent
- unset -nocomplain msg opt
-} -body {
- oo::configurable create Point {superclass parent}
- list [catch {oo::define Point {property x -set}} msg opt] \
- [dict get $opt -errorinfo] [dict get $opt -errorcode]
-} -cleanup {
- parent destroy
-} -result {1 {missing body to go with -set option
- while executing
-"property x -set"
- (in definition script for class "::Point" line 1)
- invoked from within
-"oo::define Point {property x -set}"} {TCL WRONGARGS}}
-test oo-47.4 {TIP 558: properties: error details} -setup {
- oo::class create parent
- unset -nocomplain msg opt
-} -body {
- oo::configurable create Point {superclass parent}
- list [catch {oo::define Point {property x -kind}} msg opt] \
- [dict get $opt -errorinfo] [dict get $opt -errorcode]
-} -cleanup {
- parent destroy
-} -result {1 {missing kind value to go with -kind option
- while executing
-"property x -kind"
- (in definition script for class "::Point" line 1)
- invoked from within
-"oo::define Point {property x -kind}"} {TCL WRONGARGS}}
-test oo-47.5 {TIP 558: properties: error details} -setup {
- oo::class create parent
- unset -nocomplain msg opt
-} -body {
- oo::configurable create Point {superclass parent}
- list [catch {oo::define Point {property x -kind gorp}} msg opt] \
- [dict get $opt -errorinfo] [dict get $opt -errorcode]
-} -cleanup {
- parent destroy
-} -result {1 {bad kind "gorp": must be readable, readwrite, or writable
- while executing
-"property x -kind gorp"
- (in definition script for class "::Point" line 1)
- invoked from within
-"oo::define Point {property x -kind gorp}"} {TCL LOOKUP INDEX kind gorp}}
-test oo-47.6 {TIP 558: properties: error details} -setup {
- oo::class create parent
- unset -nocomplain msg opt
-} -body {
- oo::configurable create Point {superclass parent}
- list [catch {oo::define Point {property x -gorp}} msg opt] \
- [dict get $opt -errorinfo] [dict get $opt -errorcode]
-} -cleanup {
- parent destroy
-} -result {1 {bad option "-gorp": must be -get, -kind, or -set
- while executing
-"property x -gorp"
- (in definition script for class "::Point" line 1)
- invoked from within
-"oo::define Point {property x -gorp}"} {TCL LOOKUP INDEX option -gorp}}
-test oo-47.7 {TIP 558: properties: error details} -setup {
- oo::class create parent
- unset -nocomplain msg opt
-} -body {
- oo::configurable create Point {
- superclass parent
- property x
- }
- Point create pt
- list [catch {pt configure -gorp} msg opt] \
- [dict get $opt -errorinfo] [dict get $opt -errorcode]
-} -cleanup {
- parent destroy
-} -result {1 {bad property "-gorp": must be -x
- while executing
-"pt configure -gorp"} {TCL LOOKUP INDEX property -gorp}}
-test oo-47.8 {TIP 558: properties: error details} -setup {
- oo::class create parent
- unset -nocomplain msg opt
-} -body {
- oo::configurable create Point {
- superclass parent
- property x
- }
- Point create pt
- list [catch {pt configure -gorp blarg} msg opt] \
- [dict get $opt -errorinfo] [dict get $opt -errorcode]
-} -cleanup {
- parent destroy
-} -result {1 {bad property "-gorp": must be -x
- while executing
-"pt configure -gorp blarg"} {TCL LOOKUP INDEX property -gorp}}
cleanupTests
return
diff --git a/tests/ooProp.test b/tests/ooProp.test
new file mode 100644
index 0000000..55f945a
--- /dev/null
+++ b/tests/ooProp.test
@@ -0,0 +1,862 @@
+# This file contains a collection of tests for Tcl's built-in object system,
+# specifically the parts that support configurable properties on objects.
+# Sourcing this file into Tcl runs the tests and generates output for errors.
+# No output means no errors were found.
+#
+# Copyright (c) 2019-2020 Donal K. Fellows
+#
+# See the file "license.terms" for information on usage and redistribution of
+# this file, and for a DISCLAIMER OF ALL WARRANTIES.
+
+package require TclOO 1.0.3
+package require tcltest 2
+if {"::tcltest" in [namespace children]} {
+ namespace import -force ::tcltest::*
+}
+
+test ooProp-1.1 {TIP 558: properties: core support} -setup {
+ oo::class create parent
+ unset -nocomplain result
+ set result {}
+} -body {
+ oo::class create c {superclass parent}
+ lappend result [info class properties c] [info class properties c -writable]
+ oo::define c ::oo::configuresupport::readableproperties -set a b c
+ lappend result [info class properties c] [info class properties c -writable]
+ oo::define c ::oo::configuresupport::readableproperties -set f e d
+ lappend result [info class properties c] [info class properties c -writable]
+ oo::define c ::oo::configuresupport::readableproperties -set a a a
+ lappend result [info class properties c] [info class properties c -writable]
+ oo::define c ::oo::configuresupport::readableproperties -set
+ lappend result [info class properties c] [info class properties c -writable]
+} -cleanup {
+ parent destroy
+} -result {{} {} {a b c} {} {d e f} {} a {} {} {}}
+test ooProp-1.2 {TIP 558: properties: core support} -setup {
+ oo::class create parent
+ unset -nocomplain result
+ set result {}
+} -body {
+ oo::class create c {superclass parent}
+ lappend result [info class properties c -all] [info class properties c -writable -all]
+ oo::define c ::oo::configuresupport::readableproperties -set a b c
+ lappend result [info class properties c -all] [info class properties c -writable -all]
+ oo::define c ::oo::configuresupport::readableproperties -set f e d
+ lappend result [info class properties c -all] [info class properties c -writable -all]
+ oo::define c ::oo::configuresupport::readableproperties -set a a a
+ lappend result [info class properties c -all] [info class properties c -writable -all]
+ oo::define c ::oo::configuresupport::readableproperties -set
+ lappend result [info class properties c -all] [info class properties c -writable -all]
+} -cleanup {
+ parent destroy
+} -result {{} {} {a b c} {} {d e f} {} a {} {} {}}
+test ooProp-1.3 {TIP 558: properties: core support} -setup {
+ oo::class create parent
+ unset -nocomplain result
+ set result {}
+} -body {
+ oo::class create c {superclass parent}
+ lappend result [info class properties c] [info class properties c -writable]
+ oo::define c ::oo::configuresupport::writableproperties -set a b c
+ lappend result [info class properties c] [info class properties c -writable]
+ oo::define c ::oo::configuresupport::writableproperties -set f e d
+ lappend result [info class properties c] [info class properties c -writable]
+ oo::define c ::oo::configuresupport::writableproperties -set a a a
+ lappend result [info class properties c] [info class properties c -writable]
+ oo::define c ::oo::configuresupport::writableproperties -set
+ lappend result [info class properties c] [info class properties c -writable]
+} -cleanup {
+ parent destroy
+} -result {{} {} {} {a b c} {} {d e f} {} a {} {}}
+test ooProp-1.4 {TIP 558: properties: core support} -setup {
+ oo::class create parent
+ unset -nocomplain result
+ set result {}
+} -body {
+ oo::class create c {superclass parent}
+ lappend result [info class properties c -all] [info class properties c -writable -all]
+ oo::define c ::oo::configuresupport::writableproperties -set a b c
+ lappend result [info class properties c -all] [info class properties c -writable -all]
+ oo::define c ::oo::configuresupport::writableproperties -set f e d
+ lappend result [info class properties c -all] [info class properties c -writable -all]
+ oo::define c ::oo::configuresupport::writableproperties -set a a a
+ lappend result [info class properties c -all] [info class properties c -writable -all]
+ oo::define c ::oo::configuresupport::writableproperties -set
+ lappend result [info class properties c -all] [info class properties c -writable -all]
+} -cleanup {
+ parent destroy
+} -result {{} {} {} {a b c} {} {d e f} {} a {} {}}
+test ooProp-1.5 {TIP 558: properties: core support} -setup {
+ oo::class create parent
+ unset -nocomplain result
+ set result {}
+} -body {
+ oo::class create c {superclass parent}
+ oo::class create d {superclass c}
+ lappend result [info class properties d -all] [info class properties d -writable -all]
+ oo::define c ::oo::configuresupport::readableproperties -set a b c
+ oo::define d ::oo::configuresupport::readableproperties -set x y z
+ lappend result [info class properties d -all] [info class properties d -writable -all]
+ oo::define c ::oo::configuresupport::readableproperties -set f e d
+ oo::define d ::oo::configuresupport::readableproperties -set r p q
+ lappend result [info class properties d -all] [info class properties d -writable -all]
+ oo::define c ::oo::configuresupport::readableproperties -set a a h
+ oo::define d ::oo::configuresupport::readableproperties -set g h g
+ lappend result [info class properties d -all] [info class properties d -writable -all]
+ oo::define c ::oo::configuresupport::readableproperties -set
+ lappend result [info class properties d -all] [info class properties d -writable -all]
+ oo::define d ::oo::configuresupport::readableproperties -set
+ lappend result [info class properties d -all] [info class properties d -writable -all]
+} -cleanup {
+ parent destroy
+} -result {{} {} {a b c x y z} {} {d e f p q r} {} {a g h} {} {g h} {} {} {}}
+test ooProp-1.6 {TIP 558: properties: core support} -setup {
+ oo::class create parent
+ unset -nocomplain result
+ set result {}
+} -body {
+ oo::class create c {superclass parent}
+ oo::class create d {superclass c}
+ lappend result [info class properties d -all] [info class properties d -writable -all]
+ oo::define c ::oo::configuresupport::writableproperties -set a b c
+ oo::define d ::oo::configuresupport::writableproperties -set x y z
+ lappend result [info class properties d -all] [info class properties d -writable -all]
+ oo::define c ::oo::configuresupport::writableproperties -set f e d
+ oo::define d ::oo::configuresupport::writableproperties -set r p q
+ lappend result [info class properties d -all] [info class properties d -writable -all]
+ oo::define c ::oo::configuresupport::writableproperties -set a a h
+ oo::define d ::oo::configuresupport::writableproperties -set g h g
+ lappend result [info class properties d -all] [info class properties d -writable -all]
+ oo::define c ::oo::configuresupport::writableproperties -set
+ lappend result [info class properties d -all] [info class properties d -writable -all]
+ oo::define d ::oo::configuresupport::writableproperties -set
+ lappend result [info class properties d -all] [info class properties d -writable -all]
+} -cleanup {
+ parent destroy
+} -result {{} {} {} {a b c x y z} {} {d e f p q r} {} {a g h} {} {g h} {} {}}
+test ooProp-1.7 {TIP 558: properties: core support} -setup {
+ oo::class create parent
+ unset -nocomplain result
+ set result {}
+} -body {
+ oo::class create c {superclass parent}
+ c create o
+ lappend result [info object properties o] [info object properties o -writable]
+ oo::objdefine o ::oo::configuresupport::objreadableproperties -set a b c
+ lappend result [info object properties o] [info object properties o -writable]
+ oo::objdefine o ::oo::configuresupport::objreadableproperties -set f e d
+ lappend result [info object properties o] [info object properties o -writable]
+ oo::objdefine o ::oo::configuresupport::objreadableproperties -set a a h
+ lappend result [info object properties o] [info object properties o -writable]
+ oo::objdefine o ::oo::configuresupport::objreadableproperties -set
+ lappend result [info object properties o] [info object properties o -writable]
+} -cleanup {
+ parent destroy
+} -result {{} {} {a b c} {} {d e f} {} {a h} {} {} {}}
+test ooProp-1.8 {TIP 558: properties: core support} -setup {
+ oo::class create parent
+ unset -nocomplain result
+ set result {}
+} -body {
+ oo::class create c {superclass parent}
+ c create o
+ lappend result [info object properties o] [info object properties o -writable]
+ oo::objdefine o ::oo::configuresupport::objwritableproperties -set a b c
+ lappend result [info object properties o] [info object properties o -writable]
+ oo::objdefine o ::oo::configuresupport::objwritableproperties -set f e d
+ lappend result [info object properties o] [info object properties o -writable]
+ oo::objdefine o ::oo::configuresupport::objwritableproperties -set a a h
+ lappend result [info object properties o] [info object properties o -writable]
+ oo::objdefine o ::oo::configuresupport::objwritableproperties -set
+ lappend result [info object properties o] [info object properties o -writable]
+} -cleanup {
+ parent destroy
+} -result {{} {} {} {a b c} {} {d e f} {} {a h} {} {}}
+test ooProp-1.9 {TIP 558: properties: core support} -setup {
+ oo::class create parent
+ unset -nocomplain result
+ set result {}
+} -body {
+ oo::class create c {superclass parent}
+ oo::class create d {superclass c}
+ d create o
+ lappend result [info object properties o -all] [info object properties o -writable -all]
+ oo::define c ::oo::configuresupport::readableproperties -set a b
+ oo::define d ::oo::configuresupport::readableproperties -set c d
+ oo::objdefine o ::oo::configuresupport::objreadableproperties -set e f
+ lappend result [info object properties o -all] [info object properties o -writable -all]
+ oo::objdefine o ::oo::configuresupport::objreadableproperties -set f e d b e
+ lappend result [info object properties o -all] [info object properties o -writable -all]
+} -cleanup {
+ parent destroy
+} -result {{} {} {a b c d e f} {} {a b c d e f} {}}
+test ooProp-1.10 {TIP 558: properties: core support} -setup {
+ oo::class create parent
+ unset -nocomplain result
+ set result {}
+} -body {
+ oo::class create c {superclass parent}
+ oo::class create d {superclass c}
+ d create o
+ lappend result [info object properties o -all] [info object properties o -writable -all]
+ oo::define c ::oo::configuresupport::writableproperties -set a b
+ oo::define d ::oo::configuresupport::writableproperties -set c d
+ oo::objdefine o ::oo::configuresupport::objwritableproperties -set e f
+ lappend result [info object properties o -all] [info object properties o -writable -all]
+ oo::objdefine o ::oo::configuresupport::objwritableproperties -set f e d b e
+ lappend result [info object properties o -all] [info object properties o -writable -all]
+} -cleanup {
+ parent destroy
+} -result {{} {} {} {a b c d e f} {} {a b c d e f}}
+
+test ooProp-2.1 {TIP 558: properties: configurable class system} -setup {
+ oo::class create parent
+ unset -nocomplain result
+ set result {}
+} -body {
+ oo::configurable create Point {
+ superclass parent
+ property x y
+ constructor args {
+ my configure -x 0 -y 0 {*}$args
+ }
+ variable x y
+ method report {} {
+ lappend ::result "x=$x, y=$y"
+ }
+ }
+ set pt [Point new -x 3]
+ $pt report
+ $pt configure -y 4
+ $pt report
+ lappend result [$pt configure -x],[$pt configure -y] [$pt configure]
+} -cleanup {
+ parent destroy
+} -result {{x=3, y=0} {x=3, y=4} 3,4 {-x 3 -y 4}}
+test ooProp-2.2 {TIP 558: properties: configurable class system} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {
+ superclass parent
+ property x y
+ constructor args {
+ my configure -x 0 -y 0 {*}$args
+ }
+ }
+ oo::configurable create 3DPoint {
+ superclass Point
+ property z
+ constructor args {
+ next -z 0 {*}$args
+ }
+ }
+ set pt [3DPoint new -x 3 -y 4 -z 5]
+ list [$pt configure -x],[$pt configure -y],[$pt configure -z] \
+ [$pt configure]
+} -cleanup {
+ parent destroy
+} -result {3,4,5 {-x 3 -y 4 -z 5}}
+test ooProp-2.3 {TIP 558: properties: configurable class system} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {
+ superclass parent
+ property x y
+ constructor args {
+ my configure -x 0 -y 0 {*}$args
+ }
+ }
+ set pt [Point new -x 3 -y 4]
+ oo::objdefine $pt property z
+ $pt configure -z 5
+ list [$pt configure -x],[$pt configure -y],[$pt configure -z] \
+ [$pt configure]
+} -cleanup {
+ parent destroy
+} -result {3,4,5 {-x 3 -y 4 -z 5}}
+test ooProp-2.4 {TIP 558: properties: configurable class system} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {
+ superclass parent
+ property x y
+ constructor args {
+ my configure -x 0 -y 0 {*}$args
+ }
+ }
+ [Point new] configure gorp
+} -returnCodes error -cleanup {
+ parent destroy
+} -result {bad property "gorp": must be -x or -y}
+test ooProp-2.5 {TIP 558: properties: configurable class system} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {
+ superclass parent
+ property x y
+ constructor args {
+ my configure -x 0 -y 0 {*}$args
+ }
+ }
+ oo::configurable create 3DPoint {
+ superclass Point
+ property z
+ constructor args {
+ next -z 0 {*}$args
+ }
+ }
+ [3DPoint new] configure gorp
+} -returnCodes error -cleanup {
+ parent destroy
+} -result {bad property "gorp": must be -x, -y, or -z}
+test ooProp-2.6 {TIP 558: properties: configurable class system} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {
+ superclass parent
+ property x y
+ constructor args {
+ my configure -x 0 -y 0 {*}$args
+ }
+ }
+ [Point create p] configure -x 1 -y
+} -returnCodes error -cleanup {
+ parent destroy
+} -result {wrong # args: should be "::p configure ?-option value ...?"}
+test ooProp-2.7 {TIP 558: properties: configurable class system} -setup {
+ oo::class create parent
+ unset -nocomplain msg
+} -body {
+ oo::configurable create Point {
+ superclass parent
+ property x y -kind writable
+ constructor args {
+ my configure -x 0 -y 0 {*}$args
+ }
+ }
+ Point create p
+ list [p configure -y ok] [catch {p configure -y} msg] $msg
+} -cleanup {
+ parent destroy
+} -result {{} 1 {property "-y" is write only}}
+test ooProp-2.8 {TIP 558: properties: configurable class system} -setup {
+ oo::class create parent
+ unset -nocomplain msg
+} -body {
+ oo::configurable create Point {
+ superclass parent
+ property x y -kind readable
+ constructor args {
+ my configure -x 0 {*}$args
+ variable y 123
+ }
+ }
+ Point create p
+ list [p configure] [p configure -y] [catch {p configure -y foo} msg] $msg
+} -cleanup {
+ parent destroy
+} -result {{-x 0 -y 123} 123 1 {property "-y" is read only}}
+
+test ooProp-3.1 {TIP 558: properties: declaration semantics} -setup {
+ oo::class create parent
+ unset -nocomplain result
+ set result {}
+} -body {
+ oo::configurable create Point {superclass parent}
+ oo::define Point {
+ variable xyz
+ property x -get {
+ global result
+ lappend result "get"
+ return [lrepeat 3 $xyz]
+ } -set {
+ global result
+ lappend result [list set $value]
+ set xyz [expr {$value * 3}]
+ }
+ }
+ Point create pt
+ pt configure -x 5
+ lappend result >[pt configure -x]<
+} -cleanup {
+ parent destroy
+} -result {{set 5} get {>15 15 15<}}
+test ooProp-3.2 {TIP 558: properties: declaration semantics} -setup {
+ oo::class create parent
+ unset -nocomplain result
+ set result {}
+} -body {
+ oo::configurable create Point {superclass parent}
+ oo::define Point {
+ variable xyz
+ property x -get {
+ global result
+ lappend result "get"
+ return [lrepeat 3 $xyz]
+ } -set {
+ global result
+ lappend result [list set $value]
+ set xyz [expr {$value * 3}]
+ } y -kind readable -get {return $xyz}
+ }
+ Point create pt
+ pt configure -x 5
+ lappend result >[pt configure -x]< [pt configure -y]
+} -cleanup {
+ parent destroy
+} -result {{set 5} get {>15 15 15<} 15}
+test ooProp-3.3 {TIP 558: properties: declaration semantics} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {superclass parent}
+ oo::define Point {
+ variable xyz
+ property -x -get {return $xyz}
+ }
+} -returnCodes error -cleanup {
+ parent destroy
+} -result {bad property name "-x": must not begin with -}
+test ooProp-3.4 {TIP 558: properties: declaration semantics} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {superclass parent}
+ oo::define Point {
+ property "x y"
+ }
+} -returnCodes error -cleanup {
+ parent destroy
+} -result {bad property name "x y": must be a simple word}
+test ooProp-3.5 {TIP 558: properties: declaration semantics} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {superclass parent}
+ oo::define Point {
+ property ::x
+ }
+} -returnCodes error -cleanup {
+ parent destroy
+} -result {bad property name "::x": must not contain namespace separators}
+test ooProp-3.6 {TIP 558: properties: declaration semantics} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {superclass parent}
+ oo::define Point {
+ property x(
+ }
+} -returnCodes error -cleanup {
+ parent destroy
+} -result {bad property name "x(": must not contain parentheses}
+test ooProp-3.7 {TIP 558: properties: declaration semantics} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {superclass parent}
+ oo::define Point {
+ property x)
+ }
+} -returnCodes error -cleanup {
+ parent destroy
+} -result {bad property name "x)": must not contain parentheses}
+test ooProp-3.8 {TIP 558: properties: declaration semantics} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {superclass parent}
+ oo::define Point {
+ property x -get
+ }
+} -returnCodes error -cleanup {
+ parent destroy
+} -result {missing body to go with -get option}
+test ooProp-3.9 {TIP 558: properties: declaration semantics} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {superclass parent}
+ oo::define Point {
+ property x -set
+ }
+} -returnCodes error -cleanup {
+ parent destroy
+} -result {missing body to go with -set option}
+test ooProp-3.10 {TIP 558: properties: declaration semantics} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {superclass parent}
+ oo::define Point {
+ property x -kind
+ }
+} -returnCodes error -cleanup {
+ parent destroy
+} -result {missing kind value to go with -kind option}
+test ooProp-3.11 {TIP 558: properties: declaration semantics} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {superclass parent}
+ oo::define Point {
+ property x -get {} -set
+ }
+} -returnCodes error -cleanup {
+ parent destroy
+} -result {missing body to go with -set option}
+test ooProp-3.12 {TIP 558: properties: declaration semantics} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {
+ superclass parent
+ property x -get {} -get {return ok}
+ }
+ [Point new] configure -x
+} -cleanup {
+ parent destroy
+} -result ok
+test ooProp-3.13 {TIP 558: properties: declaration semantics} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {
+ superclass parent
+ property x -kind gorp
+ }
+} -returnCodes error -cleanup {
+ parent destroy
+} -result {bad kind "gorp": must be readable, readwrite, or writable}
+test ooProp-3.14 {TIP 558: properties: declaration semantics} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {
+ superclass parent
+ property x -k reada -g {return ok}
+ }
+ [Point new] configure -x
+} -cleanup {
+ parent destroy
+} -result ok
+test ooProp-3.15 {TIP 558: properties: declaration semantics} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {
+ superclass parent
+ property {*}{
+ x -kind writable
+ y -get {return ok}
+ }
+ }
+ [Point new] configure -y
+} -cleanup {
+ parent destroy
+} -result ok
+test ooProp-3.16 {TIP 558: properties: declaration semantics} -setup {
+ oo::class create parent
+ unset -nocomplain msg
+} -body {
+ oo::configurable create Point {
+ superclass parent
+ variable xy
+ property x -kind readable -get {return $xy}
+ property x -kind writable -set {set xy $value}
+ }
+ Point create pt
+ list [catch {
+ pt configure -x ok
+ } msg] $msg [catch {
+ pt configure -x
+ } msg] $msg [catch {
+ pt configure -y 1
+ } msg] $msg
+} -cleanup {
+ parent destroy
+} -result {0 {} 1 {property "-x" is write only} 1 {bad property "-y": must be -x}}
+test ooProp-3.17 {TIP 558: properties: declaration semantics} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {
+ superclass parent
+ property x -get {return -code break}
+ }
+ while 1 {
+ [Point new] configure -x
+ break
+ }
+} -returnCodes error -cleanup {
+ parent destroy
+} -result {property getter for -x did a break}
+test ooProp-3.18 {TIP 558: properties: declaration semantics} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {
+ superclass parent
+ property x -get {return -code break}
+ }
+ while 1 {
+ [Point new] configure
+ break
+ }
+} -returnCodes error -cleanup {
+ parent destroy
+} -result {property getter for -x did a break}
+test ooProp-3.19 {TIP 558: properties: declaration semantics} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {
+ superclass parent
+ property x -get {error "boo"}
+ }
+ while 1 {
+ [Point new] configure -x
+ break
+ }
+} -returnCodes error -cleanup {
+ parent destroy
+} -result boo
+test ooProp-3.20 {TIP 558: properties: declaration semantics} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {
+ superclass parent
+ property x -get {error "boo"}
+ }
+ while 1 {
+ [Point new] configure
+ break
+ }
+} -returnCodes error -cleanup {
+ parent destroy
+} -result boo
+test ooProp-3.21 {TIP 558: properties: declaration semantics} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {
+ superclass parent
+ property x -get {return -code continue}
+ }
+ while 1 {
+ [Point new] configure -x
+ break
+ }
+} -returnCodes error -cleanup {
+ parent destroy
+} -result {property getter for -x did a continue}
+test ooProp-3.22 {TIP 558: properties: declaration semantics} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {
+ superclass parent
+ property x -get {return -level 2 ok}
+ }
+ apply {{} {
+ [Point new] configure
+ return bad
+ }}
+} -cleanup {
+ parent destroy
+} -result ok
+test ooProp-3.23 {TIP 558: properties: declaration semantics} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {
+ superclass parent
+ property x -get {return -level 2 ok}
+ }
+ apply {{} {
+ [Point new] configure -x
+ return bad
+ }}
+} -cleanup {
+ parent destroy
+} -result ok
+test ooProp-3.24 {TIP 558: properties: declaration semantics} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {
+ superclass parent
+ property x -set {return -code break}
+ }
+ while 1 {
+ [Point new] configure -x gorp
+ break
+ }
+} -returnCodes error -cleanup {
+ parent destroy
+} -result {property setter for -x did a break}
+test ooProp-3.25 {TIP 558: properties: declaration semantics} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {
+ superclass parent
+ property x -set {return -code continue}
+ }
+ while 1 {
+ [Point new] configure -x gorp
+ break
+ }
+} -returnCodes error -cleanup {
+ parent destroy
+} -result {property setter for -x did a continue}
+test ooProp-3.26 {TIP 558: properties: declaration semantics} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {
+ superclass parent
+ property x -set {error "boo"}
+ }
+ while 1 {
+ [Point new] configure -x gorp
+ break
+ }
+} -returnCodes error -cleanup {
+ parent destroy
+} -result boo
+test ooProp-3.27 {TIP 558: properties: declaration semantics} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {
+ superclass parent
+ property x -set {return -level 2 ok}
+ }
+ apply {{} {
+ [Point new] configure -x gorp
+ return bad
+ }}
+} -cleanup {
+ parent destroy
+} -result ok
+test ooProp-3.28 {TIP 558: properties: declaration semantics} -setup {
+ oo::class create parent
+} -body {
+ oo::configurable create Point {
+ superclass parent
+ private property var
+ }
+ Point create pt
+ pt configure -var ok
+ pt configure -var
+} -cleanup {
+ parent destroy
+} -result ok
+
+test ooProp-4.1 {TIP 558: properties: error details} -setup {
+ oo::class create parent
+ unset -nocomplain msg opt
+} -body {
+ oo::configurable create Point {superclass parent}
+ list [catch {oo::define Point {property -x}} msg opt] \
+ [dict get $opt -errorinfo] [dict get $opt -errorcode]
+} -cleanup {
+ parent destroy
+} -result {1 {bad property name "-x": must not begin with -
+ while executing
+"property -x"
+ (in definition script for class "::Point" line 1)
+ invoked from within
+"oo::define Point {property -x}"} {TCLOO PROPERTY_FORMAT}}
+test ooProp-4.2 {TIP 558: properties: error details} -setup {
+ oo::class create parent
+ unset -nocomplain msg opt
+} -body {
+ oo::configurable create Point {superclass parent}
+ list [catch {oo::define Point {property x -get}} msg opt] \
+ [dict get $opt -errorinfo] [dict get $opt -errorcode]
+} -cleanup {
+ parent destroy
+} -result {1 {missing body to go with -get option
+ while executing
+"property x -get"
+ (in definition script for class "::Point" line 1)
+ invoked from within
+"oo::define Point {property x -get}"} {TCL WRONGARGS}}
+test ooProp-4.3 {TIP 558: properties: error details} -setup {
+ oo::class create parent
+ unset -nocomplain msg opt
+} -body {
+ oo::configurable create Point {superclass parent}
+ list [catch {oo::define Point {property x -set}} msg opt] \
+ [dict get $opt -errorinfo] [dict get $opt -errorcode]
+} -cleanup {
+ parent destroy
+} -result {1 {missing body to go with -set option
+ while executing
+"property x -set"
+ (in definition script for class "::Point" line 1)
+ invoked from within
+"oo::define Point {property x -set}"} {TCL WRONGARGS}}
+test ooProp-4.4 {TIP 558: properties: error details} -setup {
+ oo::class create parent
+ unset -nocomplain msg opt
+} -body {
+ oo::configurable create Point {superclass parent}
+ list [catch {oo::define Point {property x -kind}} msg opt] \
+ [dict get $opt -errorinfo] [dict get $opt -errorcode]
+} -cleanup {
+ parent destroy
+} -result {1 {missing kind value to go with -kind option
+ while executing
+"property x -kind"
+ (in definition script for class "::Point" line 1)
+ invoked from within
+"oo::define Point {property x -kind}"} {TCL WRONGARGS}}
+test ooProp-4.5 {TIP 558: properties: error details} -setup {
+ oo::class create parent
+ unset -nocomplain msg opt
+} -body {
+ oo::configurable create Point {superclass parent}
+ list [catch {oo::define Point {property x -kind gorp}} msg opt] \
+ [dict get $opt -errorinfo] [dict get $opt -errorcode]
+} -cleanup {
+ parent destroy
+} -result {1 {bad kind "gorp": must be readable, readwrite, or writable
+ while executing
+"property x -kind gorp"
+ (in definition script for class "::Point" line 1)
+ invoked from within
+"oo::define Point {property x -kind gorp}"} {TCL LOOKUP INDEX kind gorp}}
+test ooProp-4.6 {TIP 558: properties: error details} -setup {
+ oo::class create parent
+ unset -nocomplain msg opt
+} -body {
+ oo::configurable create Point {superclass parent}
+ list [catch {oo::define Point {property x -gorp}} msg opt] \
+ [dict get $opt -errorinfo] [dict get $opt -errorcode]
+} -cleanup {
+ parent destroy
+} -result {1 {bad option "-gorp": must be -get, -kind, or -set
+ while executing
+"property x -gorp"
+ (in definition script for class "::Point" line 1)
+ invoked from within
+"oo::define Point {property x -gorp}"} {TCL LOOKUP INDEX option -gorp}}
+test ooProp-4.7 {TIP 558: properties: error details} -setup {
+ oo::class create parent
+ unset -nocomplain msg opt
+} -body {
+ oo::configurable create Point {
+ superclass parent
+ property x
+ }
+ Point create pt
+ list [catch {pt configure -gorp} msg opt] \
+ [dict get $opt -errorinfo] [dict get $opt -errorcode]
+} -cleanup {
+ parent destroy
+} -result {1 {bad property "-gorp": must be -x
+ while executing
+"pt configure -gorp"} {TCL LOOKUP INDEX property -gorp}}
+test ooProp-4.8 {TIP 558: properties: error details} -setup {
+ oo::class create parent
+ unset -nocomplain msg opt
+} -body {
+ oo::configurable create Point {
+ superclass parent
+ property x
+ }
+ Point create pt
+ list [catch {pt configure -gorp blarg} msg opt] \
+ [dict get $opt -errorinfo] [dict get $opt -errorcode]
+} -cleanup {
+ parent destroy
+} -result {1 {bad property "-gorp": must be -x
+ while executing
+"pt configure -gorp blarg"} {TCL LOOKUP INDEX property -gorp}}
+
+cleanupTests
+return
+
+# Local Variables:
+# mode: tcl
+# End: