summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authordkf <donal.k.fellows@manchester.ac.uk>2018-10-18 14:58:28 (GMT)
committerdkf <donal.k.fellows@manchester.ac.uk>2018-10-18 14:58:28 (GMT)
commite0064189465e2ea63ca9e2dd531928a14c968f52 (patch)
treed291965a7b623423224119db98788ab42009c7eb /tests
parent2881b5c3df298c14a851a8bed7d618a5761f4274 (diff)
downloadtcl-e0064189465e2ea63ca9e2dd531928a14c968f52.zip
tcl-e0064189465e2ea63ca9e2dd531928a14c968f52.tar.gz
tcl-e0064189465e2ea63ca9e2dd531928a14c968f52.tar.bz2
Tests for advanced object mutation issues.
Diffstat (limited to 'tests')
-rw-r--r--tests/oo.test77
1 files changed, 77 insertions, 0 deletions
diff --git a/tests/oo.test b/tests/oo.test
index 024f890..7f0de4a 100644
--- a/tests/oo.test
+++ b/tests/oo.test
@@ -1804,6 +1804,83 @@ test oo-13.4 {OO: changing an object's class} -body {
foo destroy
bar destroy
} -result {::foo ::foo ::foo ::bar}
+test oo-13.5 {OO: changing an object's class} -setup {
+ oo::object create fooObj
+} -body {
+ oo::objdefine fooObj {
+ class oo::class
+ }
+ oo::define fooObj {
+ method x {} {expr 1+2+3}
+ }
+ [fooObj new] x
+} -cleanup {
+ fooObj destroy
+} -result 6
+test oo-13.6 {OO: changing an object's class} -setup {
+ oo::class create foo
+} -body {
+ oo::define foo {
+ method x {} {expr 1+2+3}
+ }
+ foo create bar
+ oo::objdefine foo {
+ class oo::object
+ }
+ list [catch {bar x} msg] $msg
+} -cleanup {
+ catch {bar destroy}
+ foo destroy
+} -result {1 {}}
+test oo-13.7 {OO: changing an object's class} -setup {
+ oo::class create foo
+ oo::class create bar
+ unset -nocomplain result
+} -body {
+ oo::define bar method x {} {return ok}
+ oo::define foo {
+ method x {} {expr 1+2+3}
+ self mixin foo
+ }
+ lappend result [foo x]
+ oo::objdefine foo class bar
+ lappend result [foo x]
+} -cleanup {
+ foo destroy
+ bar destroy
+} -result {6 ok}
+test oo-13.7 {OO: changing an object's class to itself} -setup {
+ oo::class create foo
+} -body {
+ oo::define foo {
+ method x {} {expr 1+2+3}
+ }
+ oo::objdefine foo class foo
+} -cleanup {
+ foo destroy
+} -returnCodes error -result {may not change classes into an instance of themselves}
+test oo-13.9 {OO: changing an object's class: roots are special} -setup {
+ set i [interp create]
+} -body {
+ $i eval {
+ oo::objdefine oo::object {
+ class oo::class
+ }
+ }
+} -cleanup {
+ interp delete $i
+} -returnCodes error -result {may not modify the class of the root object class}
+test oo-13.10 {OO: changing an object's class: roots are special} -setup {
+ set i [interp create]
+} -body {
+ $i eval {
+ oo::objdefine oo::class {
+ class oo::object
+ }
+ }
+} -cleanup {
+ interp delete $i
+} -returnCodes error -result {may not modify the class of the class of classes}
# todo: changing a class subtype (metaclass) to another class subtype
test oo-14.1 {OO: mixins} {