Index: tests/methods.test =================================================================== diff -u -r86caad4d5db5f26fcf0d5b2fe009eefef554282c -r6671e05d628c0ecec739c584d997c11da73dbd19 --- tests/methods.test (.../methods.test) (revision 86caad4d5db5f26fcf0d5b2fe009eefef554282c) +++ tests/methods.test (.../methods.test) (revision 6671e05d628c0ecec739c584d997c11da73dbd19) @@ -1637,7 +1637,7 @@ objekt public object method intercept args { list [current method] {*}[next] } - objekt object filters add intercept + objekt object filters set intercept ? {uplevel #0 {objekt foo}} "intercept #0" ? {uplevel #0 { @@ -1694,6 +1694,155 @@ } ? {uplevel #0 {objekt foo}} "#0" + ? {uplevel #0 { + namespace eval ::ns1 { + namespace eval ns2 { + objekt foo + } + } + }} "#2" + namespace delete ::ns1 + + ? {uplevel #0 {apply {{} {objekt foo}}}} "#1" + ? {uplevel #0 { apply {{} { + namespace eval ::ns1 { + namespace eval ns2 { + objekt foo + } + } + }}}} "#1" + namespace delete ::ns1 + + objekt public object method intercept args { + if {[current calledmethod] eq "foo"} { + list [current method] {*}[next] + } else { + next + } + } + objekt object filters set intercept + + ? {uplevel #0 {objekt foo}} "intercept #0" + ? {uplevel #0 { + namespace eval ::ns1 { + namespace eval ns2 { + objekt foo + } + } + }} "intercept #2" + namespace delete ::ns1 + + ? {uplevel #0 {apply {{} {objekt foo}}}} "intercept #1" + ? {uplevel #0 { apply {{} { + namespace eval ::ns1 { + namespace eval ns2 { + objekt foo + } + } + }}}} "intercept #1" + namespace delete ::ns1 + + objekt object mixins add [nx::Class new { + :public method foo {args} { + list [current method] {*}[next] + } + }] + + ? {uplevel #0 {objekt foo}} "intercept foo #0" + ? {uplevel #0 { + namespace eval ::ns1 { + namespace eval ns2 { + objekt foo + } + } + }} "intercept foo #2" + namespace delete ::ns1 + + ? {uplevel #0 {apply {{} {objekt foo}}}} "intercept foo #1" + ? {uplevel #0 { apply {{} { + namespace eval ::ns1 { + namespace eval ns2 { + objekt foo + } + } + }}}} "intercept foo #1" + namespace delete ::ns1 + + set filters [objekt object filters clear] + set mixins [objekt object mixins clear] + unset -nocomplain ::_ + + objekt public object method foo {} { + :uplevel {set FOO 1} + } + + ? {uplevel #0 { + lappend _ [info exists FOO]; + objekt foo; + lappend _ [info exists FOO][unset FOO]} + } "0 1" + + unset -nocomplain ::_ + + ? {uplevel #0 { + namespace eval ::ns1 { + namespace eval ns2 { + lappend _ [info exists FOO]; + objekt foo; + lappend _ [info exists FOO][unset FOO]; + } + } + }} "0 1" + namespace delete ::ns1 + + ? {uplevel #0 { + namespace eval ::ns1 { + apply {{} { + lappend _ [info exists FOO]; + namespace eval ns2 { + objekt foo; + } + lappend _ [info exists FOO][unset FOO]; + }} + } + }} "0 1" + namespace delete ::ns1 + + objekt object filters set $filters + objekt object mixins set $mixins + + ? {uplevel #0 { + lappend _ [info exists FOO]; + objekt foo; + lappend _ [info exists FOO][unset FOO]} + } "0 1" + + unset -nocomplain ::_ + + ? {uplevel #0 { + namespace eval ::ns1 { + namespace eval ns2 { + lappend _ [info exists FOO]; + objekt foo; + lappend _ [info exists FOO][unset FOO]; + } + } + }} "0 1" + namespace delete ::ns1 + + ? {uplevel #0 { + namespace eval ::ns1 { + apply {{} { + lappend _ [info exists FOO]; + namespace eval ns2 { + objekt foo; + } + lappend _ [info exists FOO][unset FOO]; + }} + } + }} "0 1" + namespace delete ::ns1 + }