Index: tests/destroy.test =================================================================== diff -u -N -rc29e5d3778a92e4bb20634fd67fed1b62f29c13d -r2330f518acadf0b6cd31df48cf7c062026159677 --- tests/destroy.test (.../destroy.test) (revision c29e5d3778a92e4bb20634fd67fed1b62f29c13d) +++ tests/destroy.test (.../destroy.test) (revision 2330f518acadf0b6cd31df48cf7c062026159677) @@ -946,6 +946,7 @@ # # Test on UnsetTracedVars() under revived vars & unset traces +# for per-object variable tables (no namespace involved). # nx::test case unset-traces-during-cleanup-with-reset-2 { global i @@ -966,16 +967,55 @@ } ? {$i eval {::nsf::object::exists ::o}} 1 ? {$i eval {info commands ::o}} ::o + ? {$i eval {namespace exists ::o}} 0 ? {$i eval {set ::called(reset)}} 0 $i eval {::nsf::finalize -keepvars} ? {$i eval {info commands ::o}} "" + ? {$i eval {namespace exists ::o}} 0 + # ? {$i eval {set ::called(reset)}} 1; # unset trace, also re-registered, is only called once! + + interp delete $i + unset i +} + +# +# Test on UnsetTracedVars() under revived vars & unset traces +# for namespaced variable tables. +# +nx::test case unset-traces-during-cleanup-with-reset-3 { + global i + set i [interp create] + $i eval { + package req nx + set ::called(reset) 0 + proc ::reset {obj var value} { + # + # ... revive object variable 'x' and add yet another unset trace + # + ::set ${obj}::$var $value + $obj eval [list ::trace add variable ${obj}::$var unset \ + "incr ::called(reset); ::reset $obj $var $value; #"] + } + nx::Object create ::o { + :require namespace + } + ::reset ::o x 100 + } + ? {$i eval {::nsf::object::exists ::o}} 1 + ? {$i eval {info commands ::o}} ::o + ? {$i eval {namespace exists ::o}} 1 + ? {$i eval {set ::called(reset)}} 0 + $i eval {::nsf::finalize -keepvars} + ? {$i eval {info commands ::o}} "" + ? {$i eval {namespace exists ::o}} 0 ? {$i eval {set ::called(reset)}} 1; # unset trace, also re-registered, is only called once! interp delete $i unset i } + # # Exercise renaming of cmds which are used as methods #