summaryrefslogtreecommitdiffstats
path: root/tests/oo.test
diff options
context:
space:
mode:
authordkf <donal.k.fellows@manchester.ac.uk>2015-05-15 13:54:52 (GMT)
committerdkf <donal.k.fellows@manchester.ac.uk>2015-05-15 13:54:52 (GMT)
commitd52ef74d40e9ea437e953e3f7d5ea021324b3b9e (patch)
treecc264c27ab55b00dfc7696ee502ec9afabf2dfb3 /tests/oo.test
parent0785ac4c8918cc64f8298aee9629017fc17ba86c (diff)
downloadtcl-d52ef74d40e9ea437e953e3f7d5ea021324b3b9e.zip
tcl-d52ef74d40e9ea437e953e3f7d5ea021324b3b9e.tar.gz
tcl-d52ef74d40e9ea437e953e3f7d5ea021324b3b9e.tar.bz2
[9dd1bd7a74] Ensure that [self] returns a sensible value in a destructor even when construction didn't complete.
Diffstat (limited to 'tests/oo.test')
-rw-r--r--tests/oo.test25
1 files changed, 25 insertions, 0 deletions
diff --git a/tests/oo.test b/tests/oo.test
index 5fa760b..22e6cfb 100644
--- a/tests/oo.test
+++ b/tests/oo.test
@@ -416,6 +416,31 @@ test oo-2.8 {construction, method calls and ensembles - Bug 3514761} -setup {
} -returnCodes error -cleanup {
namespace delete k
} -result {wrong # args: should be "k next j"}
+test oo-2.9 {construction failures and self creation} -setup {
+ set ::result {}
+ oo::class create Root
+} -body {
+ oo::class create A {
+ superclass Root
+ constructor {} {
+ lappend ::result "in A"
+ error "failure in A"
+ }
+ destructor {lappend ::result [self]}
+ }
+ oo::class create B {
+ superclass Root
+ constructor {} {
+ lappend ::result "in B [self]"
+ error "failure in B"
+ }
+ destructor {lappend ::result [self]}
+ }
+ lappend ::result [catch {A create a} msg] $msg
+ lappend ::result [catch {B create b} msg] $msg
+} -cleanup {
+ Root destroy
+} -result {{in A} ::a 1 {failure in A} {in B ::b} ::b 1 {failure in B}}
test oo-3.1 {basic test of OO functionality: destructor} -setup {
# This is a bit complex because it needs to run in a sub-interp as we're