📄 namespace.test
字号:
} {1 {wrong # args: should be "namespace eval name arg ?arg...?"}}test namespace-25.2 {NamespaceEvalCmd, bad args} { list [catch {namespace test_ns_1} msg] $msg} {1 {bad option "test_ns_1": must be children, code, current, delete, eval, export, forget, import, inscope, origin, parent, qualifiers, tail, or which}}catch {unset v}test namespace-25.3 {NamespaceEvalCmd, new namespace} { set v 123 namespace eval test_ns_1 { variable v 314159 proc p {} { variable v return $v } } test_ns_1::p} {314159}test namespace-25.4 {NamespaceEvalCmd, existing namespace} { namespace eval test_ns_1 { proc q {} {return [expr {[p]+1}]} } test_ns_1::q} {314160}test namespace-25.5 {NamespaceEvalCmd, multiple args} { namespace eval test_ns_1 "set" "v"} {314159}test namespace-25.6 {NamespaceEvalCmd, error in eval'd script} { list [catch {namespace eval test_ns_1 {xxxx}} msg] $msg $errorInfo} {1 {invalid command name "xxxx"} {invalid command name "xxxx" while executing"xxxx" (in namespace eval "::test_ns_1" script line 1) invoked from within"namespace eval test_ns_1 {xxxx}"}}catch {unset v}test namespace-26.1 {NamespaceExportCmd, no args and new ns} { catch {eval namespace delete [namespace children :: test_ns_*]} namespace export} {}test namespace-26.2 {NamespaceExportCmd, just -clear arg} { namespace export -clear} {}test namespace-26.3 {NamespaceExportCmd, pattern can't specify a namespace} { namespace eval test_ns_1 { list [catch {namespace export ::zzz} msg] $msg }} {1 {invalid export pattern "::zzz": pattern can't specify a namespace}}test namespace-26.4 {NamespaceExportCmd, one pattern} { namespace eval test_ns_1 { namespace export cmd1 proc cmd1 {args} {return "cmd1: $args"} proc cmd2 {args} {return "cmd2: $args"} proc cmd3 {args} {return "cmd3: $args"} proc cmd4 {args} {return "cmd4: $args"} } namespace eval test_ns_2 { namespace import ::test_ns_1::* } list [info commands test_ns_2::*] [test_ns_2::cmd1 hello]} {::test_ns_2::cmd1 {cmd1: hello}}test namespace-26.5 {NamespaceExportCmd, sequence of patterns, patterns accumulate} { namespace eval test_ns_1 { namespace export cmd1 cmd3 } namespace eval test_ns_2 { namespace import -force ::test_ns_1::* } list [info commands test_ns_2::*] [test_ns_2::cmd3 hello]} {{::test_ns_2::cmd1 ::test_ns_2::cmd3} {cmd3: hello}}test namespace-26.6 {NamespaceExportCmd, no patterns means return export list} { namespace eval test_ns_1 { namespace export }} {cmd1 cmd1 cmd3}test namespace-26.7 {NamespaceExportCmd, -clear resets export list} { namespace eval test_ns_1 { namespace export -clear cmd4 } namespace eval test_ns_2 { namespace import ::test_ns_1::* } list [info commands test_ns_2::*] [test_ns_2::cmd4 hello]} {{::test_ns_2::cmd4 ::test_ns_2::cmd1 ::test_ns_2::cmd3} {cmd4: hello}}test namespace-27.1 {NamespaceForgetCmd, no args} { catch {eval namespace delete [namespace children :: test_ns_*]} namespace forget} {}test namespace-27.2 {NamespaceForgetCmd, args must be valid namespaces} { list [catch {namespace forget ::test_ns_1::xxx} msg] $msg} {1 {unknown namespace in namespace forget pattern "::test_ns_1::xxx"}}test namespace-27.3 {NamespaceForgetCmd, arg is forgotten} { namespace eval test_ns_1 { namespace export cmd* proc cmd1 {args} {return "cmd1: $args"} proc cmd2 {args} {return "cmd2: $args"} } namespace eval test_ns_2 { namespace import ::test_ns_1::* namespace forget ::test_ns_1::cmd1 } info commands ::test_ns_2::*} {::test_ns_2::cmd2}test namespace-28.1 {NamespaceImportCmd, no args} { catch {eval namespace delete [namespace children :: test_ns_*]} namespace import} {}test namespace-28.2 {NamespaceImportCmd, no args and just "-force"} { namespace import -force} {}test namespace-28.3 {NamespaceImportCmd, arg is imported} { namespace eval test_ns_1 { namespace export cmd2 proc cmd1 {args} {return "cmd1: $args"} proc cmd2 {args} {return "cmd2: $args"} } namespace eval test_ns_2 { namespace import ::test_ns_1::* namespace forget ::test_ns_1::cmd1 } info commands test_ns_2::*} {::test_ns_2::cmd2}test namespace-29.1 {NamespaceInscopeCmd, bad args} { catch {eval namespace delete [namespace children :: test_ns_*]} list [catch {namespace inscope} msg] $msg} {1 {wrong # args: should be "namespace inscope name arg ?arg...?"}}test namespace-29.2 {NamespaceInscopeCmd, bad args} { list [catch {namespace inscope ::} msg] $msg} {1 {wrong # args: should be "namespace inscope name arg ?arg...?"}}test namespace-29.3 {NamespaceInscopeCmd, specified ns must exist} { list [catch {namespace inscope test_ns_1 {set v}} msg] $msg} {1 {unknown namespace "test_ns_1" in inscope namespace command}}test namespace-29.4 {NamespaceInscopeCmd, simple case} { namespace eval test_ns_1 { variable v 747 proc cmd {args} { variable v return "[namespace current]::cmd: v=$v, args=$args" } } namespace inscope test_ns_1 cmd} {::test_ns_1::cmd: v=747, args=}test namespace-29.5 {NamespaceInscopeCmd, has lappend semantics} { list [namespace inscope test_ns_1 cmd x y z] \ [namespace eval test_ns_1 [concat cmd [list x y z]]]} {{::test_ns_1::cmd: v=747, args=x y z} {::test_ns_1::cmd: v=747, args=x y z}}test namespace-30.1 {NamespaceOriginCmd, bad args} { catch {eval namespace delete [namespace children :: test_ns_*]} list [catch {namespace origin} msg] $msg} {1 {wrong # args: should be "namespace origin name"}}test namespace-30.2 {NamespaceOriginCmd, bad args} { list [catch {namespace origin x y} msg] $msg} {1 {wrong # args: should be "namespace origin name"}}test namespace-30.3 {NamespaceOriginCmd, command not found} { list [catch {namespace origin fred} msg] $msg} {1 {invalid command name "fred"}}test namespace-30.4 {NamespaceOriginCmd, command isn't imported} { namespace origin set} {::set}test namespace-30.5 {NamespaceOriginCmd, imported command} { namespace eval test_ns_1 { namespace export cmd* proc cmd1 {args} {return "cmd1: $args"} proc cmd2 {args} {return "cmd2: $args"} } namespace eval test_ns_2 { namespace export * namespace import ::test_ns_1::* proc p {} {} } namespace eval test_ns_3 { namespace import ::test_ns_2::* list [namespace origin foreach] \ [namespace origin p] \ [namespace origin cmd1] \ [namespace origin ::test_ns_2::cmd2] }} {::foreach ::test_ns_2::p ::test_ns_1::cmd1 ::test_ns_1::cmd2}test namespace-31.1 {NamespaceParentCmd, bad args} { catch {eval namespace delete [namespace children :: test_ns_*]} list [catch {namespace parent a b} msg] $msg} {1 {wrong # args: should be "namespace parent ?name?"}}test namespace-31.2 {NamespaceParentCmd, no args} { namespace parent} {}test namespace-31.3 {NamespaceParentCmd, namespace specified} { namespace eval test_ns_1 { namespace eval test_ns_2 { namespace eval test_ns_3 {} } } list [namespace parent ::] \ [namespace parent test_ns_1::test_ns_2] \ [namespace eval test_ns_1::test_ns_2::test_ns_3 {namespace parent ::test_ns_1::test_ns_2}]} {{} ::test_ns_1 ::test_ns_1}test namespace-31.4 {NamespaceParentCmd, bad namespace specified} { list [catch {namespace parent test_ns_1::test_ns_foo} msg] $msg} {1 {unknown namespace "test_ns_1::test_ns_foo" in namespace parent command}}test namespace-32.1 {NamespaceQualifiersCmd, bad args} { catch {eval namespace delete [namespace children :: test_ns_*]} list [catch {namespace qualifiers} msg] $msg} {1 {wrong # args: should be "namespace qualifiers string"}}test namespace-32.2 {NamespaceQualifiersCmd, bad args} { list [catch {namespace qualifiers x y} msg] $msg} {1 {wrong # args: should be "namespace qualifiers string"}}test namespace-32.3 {NamespaceQualifiersCmd, simple name} { namespace qualifiers foo} {}test namespace-32.4 {NamespaceQualifiersCmd, leading ::} { namespace qualifiers ::x::y::z} {::x::y}test namespace-32.5 {NamespaceQualifiersCmd, no leading ::} { namespace qualifiers a::b} {a}test namespace-32.6 {NamespaceQualifiersCmd, :: argument} { namespace qualifiers ::} {}test namespace-32.7 {NamespaceQualifiersCmd, odd number of :s} { namespace qualifiers :::::} {}test namespace-32.8 {NamespaceQualifiersCmd, odd number of :s} { namespace qualifiers foo:::} {foo}test namespace-33.1 {NamespaceTailCmd, bad args} { catch {eval namespace delete [namespace children :: test_ns_*]} list [catch {namespace tail} msg] $msg} {1 {wrong # args: should be "namespace tail string"}}test namespace-33.2 {NamespaceTailCmd, bad args} { list [catch {namespace tail x y} msg] $msg} {1 {wrong # args: should be "namespace tail string"}}test namespace-33.3 {NamespaceTailCmd, simple name} { namespace tail foo} {foo}test namespace-33.4 {NamespaceTailCmd, leading ::} { namespace tail ::x::y::z} {z}test namespace-33.5 {NamespaceTailCmd, no leading ::} { namespace tail a::b} {b}test namespace-33.6 {NamespaceTailCmd, :: argument} { namespace tail ::} {}test namespace-33.7 {NamespaceTailCmd, odd number of :s} { namespace tail :::::} {}test namespace-33.8 {NamespaceTailCmd, odd number of :s} { namespace tail foo:::} {}test namespace-34.1 {NamespaceWhichCmd, bad args} { catch {eval namespace delete [namespace children :: test_ns_*]} list [catch {namespace which} msg] $msg} {1 {wrong # args: should be "namespace which ?-command? ?-variable? name"}}test namespace-34.2 {NamespaceWhichCmd, bad args} { list [catch {namespace which -fred} msg] $msg} {1 {wrong # args: should be "namespace which ?-command? ?-variable? name"}}test namespace-34.3 {NamespaceWhichCmd, bad args} { list [catch {namespace which -command} msg] $msg} {1 {wrong # args: should be "namespace which ?-command? ?-variable? name"}}test namespace-34.4 {NamespaceWhichCmd, bad args} { list [catch {namespace which a b} msg] $msg} {1 {wrong # args: should be "namespace which ?-command? ?-variable? name"}}test namespace-34.5 {NamespaceWhichCmd, command lookup} { namespace eval test_ns_1 { namespace export cmd* variable v1 111 proc cmd1 {args} {return "cmd1: $args"} proc cmd2 {args} {return "cmd2: $args"} } namespace eval test_ns_2 { namespace export * namespace import ::test_ns_1::* variable v2 222 proc p {} {} } namespace eval test_ns_3 { namespace import ::test_ns_2::* variable v3 333 list [namespace which -command foreach] \ [namespace which -command p] \ [namespace which -command cmd1] \ [namespace which -command ::test_ns_2::cmd2] \ [catch {namespace which -command ::test_ns_2::noSuchCmd} msg] $msg }} {::foreach ::test_ns_3::p ::test_ns_3::cmd1 ::test_ns_2::cmd2 0 {}}test namespace-34.6 {NamespaceWhichCmd, -command is default} { namespace eval test_ns_3 { list [namespace which foreach] \ [namespace which p] \ [namespace which cmd1] \ [namespace which ::test_ns_2::cmd2] }} {::foreach ::test_ns_3::p ::test_ns_3::cmd1 ::test_ns_2::cmd2}test namespace-34.7 {NamespaceWhichCmd, variable lookup} { namespace eval test_ns_3 { list [namespace which -variable env] \ [namespace which -variable v3] \ [namespace which -variable ::test_ns_2::v2] \ [catch {namespace which -variable ::test_ns_2::noSuchVar} msg] $msg }} {::env ::test_ns_3::v3 ::test_ns_2::v2 0 {}}test namespace-35.1 {FreeNsNameInternalRep, resulting ref count > 0} { catch {eval namespace delete [namespace children :: test_ns_*]} namespace eval test_ns_1 { proc p {} { namespace delete [namespace current] return [namespace current] } } test_ns_1::p} {::test_ns_1}test namespace-35.2 {FreeNsNameInternalRep, resulting ref count == 0} { namespace eval test_ns_1 { proc q {} { return [namespace current] } } list [test_ns_1::q] \ [namespace delete test_ns_1] \ [catch {test_ns_1::q} msg] $msg} {::test_ns_1 {} 1 {invalid command name "test_ns_1::q"}}catch {unset x}catch {unset y}test namespace-36.1 {DupNsNameInternalRep} { catch {eval namespace delete [namespace children :: test_ns_*]} namespace eval test_ns_1 {} set x "::test_ns_1" list [namespace parent $x] [set y $x] [namespace parent $y]} {:: ::test_ns_1 ::}catch {unset x}catch {unset y}test namespace-37.1 {SetNsNameFromAny, ns name found} { catch {eval namespace delete [namespace children :: test_ns_*]} namespace eval test_ns_1::test_ns_2 {} namespace eval test_ns_1 { namespace children ::test_ns_1 }} {::test_ns_1::test_ns_2}test namespace-37.2 {SetNsNameFromAny, ns name not found} { namespace eval test_ns_1 { list [catch {namespace children ::test_ns_1::test_ns_foo} msg] $msg }} {1 {unknown namespace "::test_ns_1::test_ns_foo" in namespace children command}}test namespace-38.1 {UpdateStringOfNsName} { catch {eval namespace delete [namespace children :: test_ns_*]} ;# Tcl_NamespaceObjCmd calls UpdateStringOfNsName to get subcmd name list [namespace eval {} {namespace current}] \ [namespace eval {} {namespace current}]} {:: ::}catch {rename cmd1 {}}catch {unset l}catch {unset msg}catch {unset trigger}eval namespace delete [namespace children :: test_ns_*]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -