package require tcltest namespace eval ::testspace { namespace import ::tcltest::* variable common { set result "" } test nsprefix {Test the basic cases of nsprefix that are different to 'namespace qualifiers'}\ -setup $common -body { lappend result [punk::ns::nsprefix ::tcl] ;# :: lappend result [punk::ns::nsprefix ::::tcl] ;# parts {} tcl - the prefix is :: (because Tcl disallows further empty ns name after root - so we collapse it to ::) #the rightmost colon is *only sometimes* associated with the word tcl to be an *unwisely* named child namespace of ":tcl" #(specifically when the number of colons is divisble by 3) #see nsparts to understand the splitting mechanism. (colons processed 2 at a time from left, no empty ns aside from root allowed, no trailing colons in ns - except that single colon ns allowed) #Colons as part of an ns generally shouldn't exist - but punk::ns, punk::nav::ns are intended to be able to deal with oddly named namespaces as much as possible #This still leaves ambiguities and impossibilities with another unwise namespace name - with trailing colon - such as "tcl:" #A pathological case would be a tree of namespaces with mixed leading and trailing colons in each namespace name. lappend result [punk::ns::nsprefix :::tcl] ; # parts {} :tcl - the prefix is :: lappend result [punk::ns::nsprefix ::tcl::x] lappend result [punk::ns::nsprefix :::tcl::x] lappend result [punk::ns::nsprefix ::::tcl::x] lappend result [punk::ns::nsprefix :::::tcl::x] ;# parts {} : tcl x - the prefix is :::::tcl lappend result [punk::ns::nsprefix :::::tcl] ;# parts {} : tcl - the prefix is ::: - such that joining the prefix ::: to suffix x with 2 colons gives :::::tcl #this is somewhat counterintuitive lappend result [punk::ns::nsprefix ::::::tcl] ;#parts {} : :tcl - the prefix is ::: lappend result [punk::ns::nsprefix ::::::tcl::x] ;#parts {} : :tcl x - the prefix is ::::::tcl }\ -cleanup { }\ -result [list\ :: :: :: ::tcl :::tcl ::tcl :::::tcl ::: ::: ::::::tcl ] }