⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 namespace.test

📁 tcl是工具命令语言
💻 TEST
📖 第 1 页 / 共 3 页
字号:
# Functionality covered: this file contains a collection of tests for the# procedures in tclNamesp.c that implement Tcl's basic support for# namespaces. Other namespace-related tests appear in variable.test.## Sourcing this file into Tcl runs the tests and generates output for# errors. No output means no errors were found.## Copyright (c) 1997 Sun Microsystems, Inc.# Copyright (c) 1998-2000 by Scriptics Corporation.## See the file "license.terms" for information on usage and redistribution# of this file, and for a DISCLAIMER OF ALL WARRANTIES.## RCS: @(#) $Id: namespace.test,v 1.21 2002/06/22 04:19:47 dgp Exp $if {[lsearch [namespace children] ::tcltest] == -1} {    package require tcltest 2    namespace import -force ::tcltest::*}# Clear out any namespaces called test_ns_*catch {eval namespace delete [namespace children :: test_ns_*]}test namespace-1.1 {TclInitNamespaces, GetNamespaceFromObj, NamespaceChildrenCmd} {    namespace children :: test_ns_*} {}catch {unset l}test namespace-2.1 {Tcl_GetCurrentNamespace} {    list [namespace current] [namespace eval {} {namespace current}] \        [namespace eval {} {namespace current}]} {:: :: ::}test namespace-2.2 {Tcl_GetCurrentNamespace} {    set l {}    lappend l [namespace current]    namespace eval test_ns_1 {        lappend l [namespace current]        namespace eval foo {            lappend l [namespace current]        }    }    lappend l [namespace current]    set l} {:: ::test_ns_1 ::test_ns_1::foo ::}test namespace-3.1 {Tcl_GetGlobalNamespace} {    namespace eval test_ns_1 {namespace eval foo {namespace eval bar {} } }    # namespace children uses Tcl_GetGlobalNamespace     namespace eval test_ns_1 {namespace children foo b*}} {::test_ns_1::foo::bar}test namespace-4.1 {Tcl_PushCallFrame with isProcCallFrame=1} {    namespace eval test_ns_1 {        variable v 123        proc p {} {            variable v            return $v        }    }    test_ns_1::p    ;# does Tcl_PushCallFrame to push p's namespace} {123}test namespace-4.2 {Tcl_PushCallFrame with isProcCallFrame=0} {    namespace eval test_ns_1::baz {}  ;# does Tcl_PushCallFrame to create baz    proc test_ns_1::baz::p {} {        variable v        set v 789        set v}    test_ns_1::baz::p} {789}test namespace-5.1 {Tcl_PopCallFrame, no vars} {    namespace eval test_ns_1::blodge {}  ;# pushes then pops frame} {}test namespace-5.2 {Tcl_PopCallFrame, local vars must be deleted} {    proc test_ns_1::r {} {        set a 123    }    test_ns_1::r   ;# pushes then pop's r's frame} {123}test namespace-6.1 {Tcl_CreateNamespace} {    catch {eval namespace delete [namespace children :: test_ns_*]}    list [lsort [namespace children :: test_ns_*]] \        [namespace eval test_ns_1 {namespace current}] \	[namespace eval test_ns_2 {namespace current}] \	[namespace eval ::test_ns_3 {namespace current}] \	[namespace eval ::test_ns_4 \            {namespace eval foo {namespace current}}] \	[namespace eval ::test_ns_5 \            {namespace eval ::test_ns_6 {namespace current}}] \        [lsort [namespace children :: test_ns_*]]} {{} ::test_ns_1 ::test_ns_2 ::test_ns_3 ::test_ns_4::foo ::test_ns_6 {::test_ns_1 ::test_ns_2 ::test_ns_3 ::test_ns_4 ::test_ns_5 ::test_ns_6}}test namespace-6.2 {Tcl_CreateNamespace, odd number of :'s in name is okay} {    list [namespace eval :::test_ns_1::::foo {namespace current}] \         [namespace eval test_ns_2:::::foo {namespace current}]} {::test_ns_1::foo ::test_ns_2::foo}test namespace-6.3 {Tcl_CreateNamespace, trailing ::s in ns name are ignored} {    list [catch {namespace eval test_ns_7::: {namespace current}} msg] $msg } {0 ::test_ns_7}test namespace-6.4 {Tcl_CreateNamespace, trailing ::s in ns name are ignored} {    catch {eval namespace delete [namespace children :: test_ns_*]}    namespace eval test_ns_1:: {        namespace eval test_ns_2:: {}        namespace eval test_ns_3:: {}    }    lsort [namespace children ::test_ns_1]} [lsort {::test_ns_1::test_ns_2 ::test_ns_1::test_ns_3}]test namespace-6.5 {Tcl_CreateNamespace, relative ns names now only looked up in current ns} {    set trigger {        namespace eval test_ns_2 {namespace current}    }    set l {}    lappend l [namespace eval test_ns_1 $trigger]    namespace eval test_ns_1::test_ns_2 {}    lappend l [namespace eval test_ns_1 $trigger]} {::test_ns_1::test_ns_2 ::test_ns_1::test_ns_2}test namespace-7.1 {Tcl_DeleteNamespace, active call frames in ns} {    catch {eval namespace delete [namespace children :: test_ns_*]}    namespace eval test_ns_1 {        proc p {} {            namespace delete [namespace current]            return [namespace current]        }    }    list [test_ns_1::p] [catch {test_ns_1::p} msg] $msg} {::test_ns_1 1 {invalid command name "test_ns_1::p"}}test namespace-7.2 {Tcl_DeleteNamespace, no active call frames in ns} {    namespace eval test_ns_2 {        proc p {} {            return [namespace current]        }    }    list [test_ns_2::p] [namespace delete test_ns_2]} {::test_ns_2 {}}test namespace-8.1 {TclTeardownNamespace, delete global namespace} {    catch {interp delete test_interp}    interp create test_interp    interp eval test_interp {        namespace eval test_ns_1 {            namespace export p            proc p {} {                return [namespace current]            }        }        namespace eval test_ns_2 {            namespace import ::test_ns_1::p            variable v 27            proc q {} {                variable v                return "[p] $v"            }        }        set x [test_ns_2::q]        catch {set xxxx}    }    list [interp eval test_interp {test_ns_2::q}] \         [interp eval test_interp {namespace delete ::}] \         [catch {interp eval test_interp {set a 123}} msg] $msg \         [interp delete test_interp]} {{::test_ns_1 27} {} 1 {invalid command name "set"} {}}test namespace-8.2 {TclTeardownNamespace, remove deleted ns from parent} {    catch {eval namespace delete [namespace children :: test_ns_*]}    namespace eval test_ns_1::test_ns_2::test_ns_3a {proc p {} {}}    namespace eval test_ns_1::test_ns_2::test_ns_3b {proc q {} {}}    list [namespace children test_ns_1] \         [namespace delete test_ns_1::test_ns_2] \         [namespace children test_ns_1]} {::test_ns_1::test_ns_2 {} {}}test namespace-8.3 {TclTeardownNamespace, delete child namespaces} {    catch {eval namespace delete [namespace children :: test_ns_*]}    namespace eval test_ns_1::test_ns_2::test_ns_3a {proc p {} {}}    namespace eval test_ns_1::test_ns_2::test_ns_3b {proc q {} {}}    list [namespace children test_ns_1] \         [namespace delete test_ns_1::test_ns_2] \         [namespace children test_ns_1] \         [catch {namespace children test_ns_1::test_ns_2} msg] $msg \         [info commands test_ns_1::test_ns_2::test_ns_3a::*]} {::test_ns_1::test_ns_2 {} {} 1 {unknown namespace "test_ns_1::test_ns_2" in namespace children command} {}}test namespace-8.4 {TclTeardownNamespace, cmds imported from deleted ns go away} {    catch {eval namespace delete [namespace children :: test_ns_*]}    namespace eval test_ns_export {        namespace export cmd1 cmd2        proc cmd1 {args} {return "cmd1: $args"}        proc cmd2 {args} {return "cmd2: $args"}    }    namespace eval test_ns_import {        namespace import ::test_ns_export::*        proc p {} {return foo}    }    list [lsort [info commands test_ns_import::*]] \         [namespace delete test_ns_export] \         [info commands test_ns_import::*]} [list [lsort {::test_ns_import::p ::test_ns_import::cmd1 ::test_ns_import::cmd2}] {} ::test_ns_import::p]test namespace-9.1 {Tcl_Import, empty import pattern} {    catch {eval namespace delete [namespace children :: test_ns_*]}    list [catch {namespace eval test_ns_import {namespace import {}}} msg] $msg} {1 {empty import pattern}}test namespace-9.2 {Tcl_Import, unknown namespace in import pattern} {    list [catch {namespace eval test_ns_import {namespace import fred::x}} msg] $msg} {1 {unknown namespace in import pattern "fred::x"}}test namespace-9.3 {Tcl_Import, import ns == export ns} {    list [catch {namespace eval test_ns_import {namespace import ::test_ns_import::puts}} msg] $msg} {1 {import pattern "::test_ns_import::puts" tries to import from namespace "test_ns_import" into itself}}test namespace-9.4 {Tcl_Import, simple import} {    catch {eval namespace delete [namespace children :: test_ns_*]}    namespace eval test_ns_export {        namespace export cmd1        proc cmd1 {args} {return "cmd1: $args"}        proc cmd2 {args} {return "cmd2: $args"}    }    namespace eval test_ns_import {        namespace import ::test_ns_export::*        proc p {} {return [cmd1 123]}    }    test_ns_import::p} {cmd1: 123}test namespace-9.5 {Tcl_Import, can't redefine cmd unless allowOverwrite!=0} {    list [catch {namespace eval test_ns_import {namespace import ::test_ns_export::*}} msg] $msg} {1 {can't import command "cmd1": already exists}}test namespace-9.6 {Tcl_Import, cmd redefinition ok if allowOverwrite!=0} {    namespace eval test_ns_import {        namespace import -force ::test_ns_export::*        cmd1 555    }} {cmd1: 555}test namespace-9.7 {Tcl_Import, links are preserved if cmd is redefined} {    catch {eval namespace delete [namespace children :: test_ns_*]}    namespace eval test_ns_export {        namespace export cmd1        proc cmd1 {args} {return "cmd1: $args"}    }    namespace eval test_ns_import {        namespace import -force ::test_ns_export::*    }    list [test_ns_import::cmd1 a b c] \         [test_ns_export::cmd1 d e f] \         [proc test_ns_export::cmd1 {args} {return "new1: $args"}] \         [namespace origin test_ns_import::cmd1] \         [namespace origin test_ns_export::cmd1] \         [test_ns_import::cmd1 g h i] \         [test_ns_export::cmd1 j k l]} {{cmd1: a b c} {cmd1: d e f} {} ::test_ns_export::cmd1 ::test_ns_export::cmd1 {new1: g h i} {new1: j k l}}test namespace-10.1 {Tcl_ForgetImport, check for valid namespaces} {    catch {eval namespace delete [namespace children :: test_ns_*]}    list [catch {namespace forget xyzzy::*} msg] $msg} {1 {unknown namespace in namespace forget pattern "xyzzy::*"}}test namespace-10.2 {Tcl_ForgetImport, ignores patterns that don't match} {    namespace eval test_ns_export {        namespace export cmd1        proc cmd1 {args} {return "cmd1: $args"}        proc cmd2 {args} {return "cmd2: $args"}    }    namespace eval test_ns_import {        namespace forget ::test_ns_export::wombat    }} {}test namespace-10.3 {Tcl_ForgetImport, deletes matching imported cmds} {    namespace eval test_ns_import {        namespace import ::test_ns_export::*        proc p {} {return [cmd1 123]}        set l {}        lappend l [lsort [info commands ::test_ns_import::*]]        namespace forget ::test_ns_export::cmd1        lappend l [info commands ::test_ns_import::*]        lappend l [catch {cmd1 777} msg] $msg    }} [list [lsort {::test_ns_import::p ::test_ns_import::cmd1}] ::test_ns_import::p 1 {invalid command name "cmd1"}]test namespace-11.1 {TclGetOriginalCommand, check if not imported cmd} {    catch {eval namespace delete [namespace children :: test_ns_*]}    namespace eval test_ns_export {        namespace export cmd1        proc cmd1 {args} {return "cmd1: $args"}    }    list [namespace origin set] [namespace origin test_ns_export::cmd1]} {::set ::test_ns_export::cmd1}test namespace-11.2 {TclGetOriginalCommand, directly imported cmd} {    namespace eval test_ns_import1 {        namespace import ::test_ns_export::*        namespace export *        proc p {} {namespace origin cmd1}    }    list [test_ns_import1::p] [namespace origin test_ns_import1::cmd1]} {::test_ns_export::cmd1 ::test_ns_export::cmd1}test namespace-11.3 {TclGetOriginalCommand, indirectly imported cmd} {    namespace eval test_ns_import2 {        namespace import ::test_ns_import1::*        proc q {} {return [cmd1 123]}    }    list [test_ns_import2::q] [namespace origin test_ns_import2::cmd1]} {{cmd1: 123} ::test_ns_export::cmd1}test namespace-12.1 {InvokeImportedCmd} {    catch {eval namespace delete [namespace children :: test_ns_*]}    namespace eval test_ns_export {        namespace export cmd1        proc cmd1 {args} {namespace current}    }    namespace eval test_ns_import {        namespace import ::test_ns_export::*    }    list [test_ns_import::cmd1]} {::test_ns_export}test namespace-13.1 {DeleteImportedCmd, deletes imported cmds} {    namespace eval test_ns_import {        set l {}        lappend l [info commands ::test_ns_import::*]        namespace forget ::test_ns_export::cmd1        lappend l [info commands ::test_ns_import::*]    }} {::test_ns_import::cmd1 {}}test namespace-14.1 {TclGetNamespaceForQualName, absolute names} {    catch {eval namespace delete [namespace children :: test_ns_*]}    variable v 10    namespace eval test_ns_1::test_ns_2 {        variable v 20    }    namespace eval test_ns_2 {        variable v 30    }    namespace eval test_ns_1 {        list $::v $::test_ns_2::v $::test_ns_1::test_ns_2::v \		[lsort [namespace children :: test_ns_*]]    }} [list 10 30 20 [lsort {::test_ns_1 ::test_ns_2}]]test namespace-14.2 {TclGetNamespaceForQualName, invalid absolute names} {    namespace eval test_ns_1 {        list [catch {set ::test_ns_777::v} msg] $msg \             [catch {namespace children test_ns_777} msg] $msg    }} {1 {can't read "::test_ns_777::v": no such variable} 1 {unknown namespace "test_ns_777" in namespace children command}}test namespace-14.3 {TclGetNamespaceForQualName, relative names} {    namespace eval test_ns_1 {        list $v $test_ns_2::v    }} {10 20}test namespace-14.4 {TclGetNamespaceForQualName, relative ns names looked up only in current ns} {    namespace eval test_ns_1::test_ns_2 {        namespace eval foo {}    }    namespace eval test_ns_1 {        list [namespace children test_ns_2] \             [catch {namespace children test_ns_1} msg] $msg    }} {::test_ns_1::test_ns_2::foo 1 {unknown namespace "test_ns_1" in namespace children command}}test namespace-14.5 {TclGetNamespaceForQualName, relative ns names looked up only in current ns} {    namespace eval ::test_ns_2 {        namespace eval bar {}    }    namespace eval test_ns_1 {        set l [list [catch {namespace delete test_ns_2::bar} msg] $msg]    }    set l} {1 {unknown namespace "test_ns_2::bar" in namespace delete command}}test namespace-14.6 {TclGetNamespaceForQualName, relative ns names looked up only in current ns} {    namespace eval test_ns_1::test_ns_2 {        namespace eval foo {}    }    namespace eval test_ns_1 {        list [namespace children test_ns_2] \             [catch {namespace children test_ns_1} msg] $msg    }} {::test_ns_1::test_ns_2::foo 1 {unknown namespace "test_ns_1" in namespace children command}}test namespace-14.7 {TclGetNamespaceForQualName, ignore extra :s if ns} {    namespace children test_ns_1:::} {::test_ns_1::test_ns_2}test namespace-14.8 {TclGetNamespaceForQualName, ignore extra :s if ns} {    namespace children :::test_ns_1:::::test_ns_2:::} {::test_ns_1::test_ns_2::foo}test namespace-14.9 {TclGetNamespaceForQualName, extra ::s are significant for vars} {    set l {}    lappend l [catch {set test_ns_1::test_ns_2::} msg] $msg    namespace eval test_ns_1::test_ns_2 {variable {} 2525}    lappend l [set test_ns_1::test_ns_2::]} {1 {can't read "test_ns_1::test_ns_2::": no such variable} 2525}test namespace-14.10 {TclGetNamespaceForQualName, extra ::s are significant for vars} {    catch {unset test_ns_1::test_ns_2::}    set l {}    lappend l [catch {set test_ns_1::test_ns_2::} msg] $msg    set test_ns_1::test_ns_2:: 314159    lappend l [set test_ns_1::test_ns_2::]} {1 {can't read "test_ns_1::test_ns_2::": no such variable} 314159}test namespace-14.11 {TclGetNamespaceForQualName, extra ::s are significant for commands} {    catch {rename test_ns_1::test_ns_2:: {}}    set l {}    lappend l [catch {test_ns_1::test_ns_2:: hello} msg] $msg    proc test_ns_1::test_ns_2:: {args} {return "\{\}: $args"}    lappend l [test_ns_1::test_ns_2:: hello]} {1 {invalid command name "test_ns_1::test_ns_2::"} {{}: hello}}test namespace-14.12 {TclGetNamespaceForQualName, extra ::s are significant for vars} {    catch {eval namespace delete [namespace children :: test_ns_*]}    namespace eval test_ns_1 {        variable {}        set test_ns_1::(x) y    }    set test_ns_1::(x)} y

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -