# 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 © 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 tcl::oo 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-1.11 {TIP 558: properties: core support cache} -setup { oo::class create parent unset -nocomplain result } -body { oo::class create m { superclass parent ::oo::configuresupport::readableproperties -set a ::oo::configuresupport::writableproperties -set c } oo::class create c { superclass parent ::oo::configuresupport::readableproperties -set b ::oo::configuresupport::writableproperties -set d } c create o lappend result [info object properties o -all -readable] \ [info object properties o -all -writable] oo::objdefine o mixin m lappend result [info object properties o -all -readable] \ [info object properties o -all -writable] } -cleanup { parent destroy } -result {b d {a b} {c d}} 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: