OpenFPGA/libs/EXTERNAL/tcl8.6.12/tests/package.test

1302 lines
45 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# This file contains tests for the package and ::pkg::* commands.
# Note that the tests are limited to Tcl scripts only, there are no shared
# libraries against which to test.
#
# Sourcing this file into Tcl runs the tests and generates output for errors.
# No output means no errors were found.
#
# Copyright (c) 1995-1996 Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
# Copyright (c) 2011 Donal K. Fellows
#
# See the file "license.terms" for information on usage and redistribution of
# this file, and for a DISCLAIMER OF ALL WARRANTIES.
if {"::tcltest" ni [namespace children]} {
package require tcltest 2.3.3
namespace import -force ::tcltest::*
}
# Do all this in a child interp to avoid garbaging the package list
set i [interp create]
tcltest::loadIntoChildInterpreter $i {*}$argv
interp eval $i {
namespace import -force ::tcltest::*
package forget {*}[package names]
set oldPkgUnknown [package unknown]
package unknown {}
set oldPath $auto_path
set auto_path ""
test package-1.1 {pkg::create gives error on insufficient args} -body {
::pkg::create
} -returnCodes error -match glob -result {wrong # args: should be "*"}
test package-1.2 {pkg::create gives error on bad args} -body {
::pkg::create -foo bar -bar baz -baz boo
} -returnCodes error -match glob -result {unknown option "bar": *}
test package-1.3 {pkg::create gives error on no value given} -body {
::pkg::create -name foo -version 1.0 -source test.tcl -load
} -returnCodes error -match glob -result {value for "-load" missing: *}
test package-1.4 {pkg::create gives error on no name given} -body {
::pkg::create -version 1.0 -source test.tcl -load foo.so
} -returnCodes error -match glob -result {value for "-name" missing: *}
test package-1.5 {pkg::create gives error on no version given} -body {
::pkg::create -name foo -source test.tcl -load foo.so
} -returnCodes error -match glob -result {value for "-version" missing: *}
test package-1.6 {pkg::create gives error on no source or load options} -body {
::pkg::create -name foo -version 1.0 -version 2.0
} -returnCodes error -result {at least one of -load and -source must be given}
test package-1.7 {pkg::create gives correct output for 1 direct source} {
::pkg::create -name foo -version 1.0 -source test.tcl
} {package ifneeded foo 1.0 [list source [file join $dir test.tcl]]}
test package-1.8 {pkg::create gives correct output for 2 direct sources} {
::pkg::create -name foo -version 1.0 -source test.tcl -source test2.tcl
} {package ifneeded foo 1.0 [list source [file join $dir test.tcl]]\n[list source [file join $dir test2.tcl]]}
test package-1.9 {pkg::create gives correct output for 1 direct load} {
::pkg::create -name foo -version 1.0 -load test.so
} {package ifneeded foo 1.0 [list load [file join $dir test.so]]}
test package-1.10 {pkg::create gives correct output for 2 direct loads} {
::pkg::create -name foo -version 1.0 -load test.so -load test2.so
} {package ifneeded foo 1.0 [list load [file join $dir test.so]]\n[list load [file join $dir test2.so]]}
test package-1.11 {pkg::create gives correct output for 1 lazy source} {
::pkg::create -name foo -version 1.0 -source {test.tcl {foo bar}}
} {package ifneeded foo 1.0 [list tclPkgSetup $dir foo 1.0 {{test.tcl source {foo bar}}}]}
test package-1.12 {pkg::create gives correct output for 2 lazy sources} {
::pkg::create -name foo -version 1.0 -source {test.tcl {foo bar}} \
-source {test2.tcl {baz boo}}
} {package ifneeded foo 1.0 [list tclPkgSetup $dir foo 1.0 {{test.tcl source {foo bar}} {test2.tcl source {baz boo}}}]}
test package-1.13 {pkg::create gives correct output for 1 lazy load} {
::pkg::create -name foo -version 1.0 -load {test.so {foo bar}}
} {package ifneeded foo 1.0 [list tclPkgSetup $dir foo 1.0 {{test.so load {foo bar}}}]}
test package-1.14 {pkg::create gives correct output for 2 lazy loads} {
::pkg::create -name foo -version 1.0 -load {test.so {foo bar}} \
-load {test2.so {baz boo}}
} {package ifneeded foo 1.0 [list tclPkgSetup $dir foo 1.0 {{test.so load {foo bar}} {test2.so load {baz boo}}}]}
test package-1.15 {pkg::create gives correct output for 1 each, direct} {
::pkg::create -name foo -version 1.0 -source test.tcl -load test2.so
} {package ifneeded foo 1.0 [list load [file join $dir test2.so]]\n[list source [file join $dir test.tcl]]}
test package-1.16 {pkg::create gives correct output for 1 direct, 1 lazy} {
::pkg::create -name foo -version 1.0 -source test.tcl \
-source {test2.tcl {foo bar}}
} {package ifneeded foo 1.0 [list source [file join $dir test.tcl]]\n[list tclPkgSetup $dir foo 1.0 {{test2.tcl source {foo bar}}}]}
test package-2.1 {Tcl_PkgProvide procedure} {
package forget t
package provide t 2.3
} {}
test package-2.2 {Tcl_PkgProvide procedure} -returnCodes error -setup {
package forget t
} -body {
package provide t 2.3
package provide t 2.2
} -result {conflicting versions provided for package "t": 2.3, then 2.2}
test package-2.3 {Tcl_PkgProvide procedure} -returnCodes error -setup {
package forget t
} -body {
package provide t 2.3
package provide t 2.4
} -result {conflicting versions provided for package "t": 2.3, then 2.4}
test package-2.4 {Tcl_PkgProvide procedure} -returnCodes error -setup {
package forget t
} -body {
package provide t 2.3
package provide t 3.3
} -result {conflicting versions provided for package "t": 2.3, then 3.3}
test package-2.5 {Tcl_PkgProvide procedure} -setup {
package forget t
} -body {
package provide t 2.3
package provide t 2.3
} -result {}
test package-2.6 {Tcl_PkgProvide procedure} {
package forget t
package provide t 2.3a1
} {}
set n 0
foreach v {
2.3k1 2a3a2 2ab3 2.a4 2.b4 2b.4 2a.4 2ba4 2a4b1
2b4a1 2b3b2
} {
test package-2.7.$n {Tcl_PkgProvide procedure} -setup {
package forget t
} -returnCodes error -body "
package provide t $v
" -result "expected version number but got \"$v\""
incr n
}
test package-3.1 {Tcl_PkgRequire procedure, picking best version} -setup {
package forget t
set x xxx
} -body {
foreach i {1.4 3.4 2.3 2.4 2.2} {
package ifneeded t $i "set x $i; package provide t $i"
}
package require t
return $x
} -result {3.4}
test package-3.2 {Tcl_PkgRequire procedure, picking best version} -setup {
package forget t
set x xxx
} -body {
foreach i {1.4 3.4 2.3 2.4 2.2 3.5 3.2} {
package ifneeded t $i "set x $i; package provide t $i"
}
package require t
return $x
} -result {3.5}
test package-3.3 {Tcl_PkgRequire procedure, picking best version} -setup {
package forget t
set x xxx
} -body {
foreach i {3.5 2.1 2.3} {
package ifneeded t $i "set x $i; package provide t $i"
}
package require t 2.2
return $x
} -result {2.3}
test package-3.4 {Tcl_PkgRequire procedure, picking best version} -setup {
package forget t
set x xxx
} -body {
foreach i {1.4 3.4 2.3 2.4 2.2} {
package ifneeded t $i "set x $i; package provide t $i"
}
package require -exact t 2.3
return $x
} -result {2.3}
test package-3.5 {Tcl_PkgRequire procedure, picking best version} -setup {
package forget t
set x xxx
} -body {
foreach i {1.4 3.4 2.3 2.4 2.2} {
package ifneeded t $i "set x $i; package provide t $i"
}
package require t 2.1
return $x
} -result {2.4}
test package-3.6 {Tcl_PkgRequire procedure, can't find suitable version} -setup {
package forget t
} -returnCodes error -body {
package unknown {}
foreach i {1.4 3.4 2.3 2.4 2.2} {
package ifneeded t $i "set x $i"
}
package require t 2.5
} -result {can't find package t 2.5}
test package-3.7 {Tcl_PkgRequire procedure, can't find suitable version} -setup {
package forget t
} -returnCodes error -body {
package unknown {}
foreach i {1.4 3.4 2.3 2.4 2.2} {
package ifneeded t $i "set x $i"
}
package require t 4.1
} -result {can't find package t 4.1}
test package-3.8 {Tcl_PkgRequire procedure, can't find suitable version} -setup {
package forget t
} -returnCodes error -body {
package unknown {}
foreach i {1.4 3.4 2.3 2.4 2.2} {
package ifneeded t $i "set x $i"
}
package require -exact t 1.3
} -result {can't find package t exactly 1.3}
test package-3.9 {Tcl_PkgRequire procedure, can't find suitable version} -setup {
package forget t
} -returnCodes error -body {
package unknown {}
package require t
} -result {can't find package t}
test package-3.10 {Tcl_PkgRequire procedure, error in ifneeded script} -setup {
package forget t
} -body {
package ifneeded t 2.1 {package provide t 2.1; error "ifneeded test"}
list [catch {package require t 2.1} msg] $msg $::errorInfo
} -match glob -result {1 {ifneeded test} {ifneeded test
while executing
"error "ifneeded test""
("package ifneeded*" script)
invoked from within
"package require t 2.1"}}
test package-3.11 {Tcl_PkgRequire procedure, ifneeded script doesn't provide package} -setup {
package forget t
set x xxx
} -body {
package ifneeded t 2.1 "set x invoked"
list [catch {package require t 2.1} msg] $msg $x
} -match glob -result {1 * invoked}
test package-3.12 {Tcl_PkgRequire procedure, self-deleting script} -setup {
package forget t
set x xxx
} -body {
package ifneeded t 1.2 "package forget t; set x 1.2; package provide t 1.2"
package require t 1.2
return $x
} -result {1.2}
test package-3.13 {Tcl_PkgRequire procedure, "package unknown" support} -setup {
package forget t
set x xxx
} -body {
proc pkgUnknown args {
# args = name requirement
# requirement = v-v (for exact version)
global x
set x $args
package provide [lindex $args 0] [lindex [split [lindex $args 1] -] 0]
}
foreach i {1.4 3.4 2.3 2.4 2.2} {
package ifneeded t $i "set x $i"
}
package unknown pkgUnknown
package require -exact t 1.5
return $x
} -cleanup {
package unknown {}
} -result {t 1.5-1.5}
test package-3.14 {Tcl_PkgRequire procedure, "package unknown" support} -setup {
package forget t
set x xxx
} -body {
proc pkgUnknown args {
package ifneeded t 1.2 "set x loaded; package provide t 1.2"
}
package unknown pkgUnknown
list [package require t] $x
} -cleanup {
package unknown {}
} -result {1.2 loaded}
test package-3.15 {Tcl_PkgRequire procedure, "package unknown" support} -setup {
package forget {a b}
package unknown pkgUnknown
set x xxx
} -body {
proc pkgUnknown args {
global x
set x $args
package provide [lindex $args 0] 2.0
}
package require {a b}
return $x
} -cleanup {
package unknown {}
} -result {{a b} 0-}
test package-3.16 {Tcl_PkgRequire procedure, "package unknown" error} -setup {
package forget t
} -body {
proc pkgUnknown args {
error "testing package unknown"
}
package unknown pkgUnknown
list [catch {package require t} msg] $msg $::errorInfo
} -cleanup {
package unknown {}
} -result {1 {testing package unknown} {testing package unknown
while executing
"error "testing package unknown""
(procedure "pkgUnknown" line 2)
invoked from within
"pkgUnknown t 0-"
("package unknown" script)
invoked from within
"package require t"}}
test package-3.17 {Tcl_PkgRequire procedure, "package unknown" doesn't load package} -setup {
package forget t
set x xxx
} -body {
proc pkgUnknown args {
global x
set x $args
}
foreach i {1.4 3.4 2.3 2.4 2.2} {
package ifneeded t $i "set x $i"
}
package unknown pkgUnknown
list [catch {package require -exact t 1.5} msg] $msg $x
} -cleanup {
package unknown {}
} -result {1 {can't find package t exactly 1.5} {t 1.5-1.5}}
test package-3.18 {Tcl_PkgRequire procedure, version checks} -setup {
package forget t
} -body {
package provide t 2.3
package require t
} -result {2.3}
test package-3.19 {Tcl_PkgRequire procedure, version checks} -setup {
package forget t
} -body {
package provide t 2.3
package require t 2.1
} -result {2.3}
test package-3.20 {Tcl_PkgRequire procedure, version checks} -setup {
package forget t
} -body {
package provide t 2.3
package require t 2.3
} -result {2.3}
test package-3.21 {Tcl_PkgRequire procedure, version checks} -setup {
package forget t
} -returnCodes error -body {
package provide t 2.3
package require t 2.4
} -result {version conflict for package "t": have 2.3, need 2.4}
test package-3.22 {Tcl_PkgRequire procedure, version checks} -setup {
package forget t
} -returnCodes error -body {
package provide t 2.3
package require t 1.2
} -result {version conflict for package "t": have 2.3, need 1.2}
test package-3.23 {Tcl_PkgRequire procedure, version checks} -setup {
package forget t
} -body {
package provide t 2.3
package require -exact t 2.3
} -result {2.3}
test package-3.24 {Tcl_PkgRequire procedure, version checks} -setup {
package forget t
} -returnCodes error -body {
package provide t 2.3
package require -exact t 2.2
} -result {version conflict for package "t": have 2.3, need exactly 2.2}
test package-3.25 {Tcl_PkgRequire procedure, error in ifneeded script} -setup {
package forget t
} -body {
package ifneeded t 2.1 {package provide t 2.1; error "ifneeded test" EI}
list [catch {package require t 2.1} msg] $msg $::errorInfo
} -match glob -result {1 {ifneeded test} {EI
("package ifneeded*" script)
invoked from within
"package require t 2.1"}}
test package-3.26 {Tcl_PkgRequire procedure, error in ifneeded script} -setup {
package forget t
} -body {
package ifneeded t 2.1 {package provide t 2.1; foreach x 1 {error "ifneeded test" EI}}
list [catch {package require t 2.1} msg] $msg $::errorInfo
} -match glob -result {1 {ifneeded test} {EI
("foreach" body line 1)
invoked from within
"foreach x 1 {error "ifneeded test" EI}"
("package ifneeded*" script)
invoked from within
"package require t 2.1"}}
test package-3.27 {Tcl_PkgRequire: circular dependency} -setup {
package forget foo
} -body {
package ifneeded foo 1 {package require foo 1}
package require foo 1
} -cleanup {
package forget foo
} -returnCodes error -match glob -result {circular package dependency:*}
test package-3.28 {Tcl_PkgRequire: circular dependency} -setup {
package forget foo
} -body {
package ifneeded foo 1 {package require foo 2}
package require foo 1
} -cleanup {
package forget foo
} -returnCodes error -match glob -result {circular package dependency:*}
test package-3.29 {Tcl_PkgRequire: circular dependency} -setup {
package forget foo
package forget bar
} -body {
package ifneeded foo 1 {package require bar 1; package provide foo 1}
package ifneeded bar 1 {package require foo 1; package provide bar 1}
package require foo 1
} -cleanup {
package forget foo
package forget bar
} -returnCodes error -match glob -result {circular package dependency:*}
test package-3.30 {Tcl_PkgRequire: circular dependency} -setup {
package forget foo
package forget bar
} -body {
package ifneeded foo 1 {package require bar 1; package provide foo 1}
package ifneeded foo 2 {package provide foo 2}
package ifneeded bar 1 {package require foo 2; package provide bar 1}
package require foo 1
} -cleanup {
package forget foo
package forget bar
} -returnCodes error -match glob -result {circular package dependency:*}
test package-3.31 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
package forget foo
} -body {
package ifneeded foo 1 {package provide foo 1; error foo}
package require foo 1
} -cleanup {
package forget foo
} -returnCodes error -match glob -result foo
test package-3.32 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
package forget foo
} -body {
package ifneeded foo 1 {package provide foo 1; error foo}
catch {package require foo 1}
package provide foo
} -cleanup {
package forget foo
} -result {}
test package-3.33 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
package forget foo
} -body {
package ifneeded foo 1 {package provide foo 2}
package require foo 1
} -cleanup {
package forget foo
} -returnCodes error -match glob -result {attempt to provide package * failed:*}
test package-3.34 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
package forget foo
} -body {
package ifneeded foo 1 {package provide foo 1.1}
package require foo 1
} -cleanup {
package forget foo
} -returnCodes error -match glob -result {attempt to provide package * failed:*}
test package-3.34.1 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
package forget foo
} -body {
package ifneeded foo 1.1 {package provide foo 1}
package require foo 1
} -cleanup {
package forget foo
} -returnCodes error -match glob -result {attempt to provide package * failed:*}
test package-3.34.2 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
package forget foo
} -body {
package ifneeded foo 1.1 {package provide foo 1}
package require foo 1.1
} -cleanup {
package forget foo
} -returnCodes error -match glob -result {attempt to provide package * failed:*}
test package-3.35 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
package forget foo
} -body {
package ifneeded foo 1 {}
package require foo 1
} -cleanup {
package forget foo
} -returnCodes error -match glob -result {attempt to provide package * failed:*}
test package-3.35.1 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
package forget foo
} -body {
package ifneeded foo 1 {break}
package require foo 1
} -cleanup {
package forget foo
} -returnCodes error -match glob \
-result {attempt to provide package * failed: bad return code:*}
test package-3.36 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
package forget foo
} -body {
package ifneeded foo 1 {continue}
package require foo 1
} -cleanup {
package forget foo
} -returnCodes error -match glob \
-result {attempt to provide package * failed: bad return code:*}
test package-3.37 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
package forget foo
} -body {
package ifneeded foo 1 {return}
package require foo 1
} -cleanup {
package forget foo
} -returnCodes error -match glob \
-result {attempt to provide package * failed: bad return code:*}
test package-3.38 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
package forget foo
} -body {
package ifneeded foo 1 {return -level 0 -code 10}
package require foo 1
} -cleanup {
package forget foo
} -returnCodes error -match glob \
-result {attempt to provide package * failed: bad return code:*}
test package-3.39 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
package forget foo
set saveUnknown [package unknown]
package unknown {package provide foo 2 ;#}
} -body {
package require foo 1
} -cleanup {
package forget foo
package unknown $saveUnknown
} -returnCodes error -match glob -result *
test package-3.40 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
package forget foo
set saveUnknown [package unknown]
package unknown {break ;#}
} -body {
package require foo 1
} -cleanup {
package forget foo
package unknown $saveUnknown
} -returnCodes error -match glob -result {bad return code:*}
test package-3.41 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
package forget foo
set saveUnknown [package unknown]
package unknown {continue ;#}
} -body {
package require foo 1
} -cleanup {
package forget foo
package unknown $saveUnknown
} -returnCodes error -match glob -result {bad return code:*}
test package-3.42 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
package forget foo
set saveUnknown [package unknown]
package unknown {return ;#}
} -body {
package require foo 1
} -cleanup {
package forget foo
package unknown $saveUnknown
} -returnCodes error -match glob -result {bad return code:*}
test package-3.43 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
package forget foo
set saveUnknown [package unknown]
package unknown {return -level 0 -code 10 ;#}
} -body {
package require foo 1
} -cleanup {
package forget foo
package unknown $saveUnknown
} -returnCodes error -match glob -result {bad return code:*}
test package-3.44 {Tcl_PkgRequire: exact version matching (1578344)} -setup {
package provide demo 1.2.3
} -body {
package require -exact demo 1.2
} -returnCodes error -cleanup {
package forget demo
} -result {version conflict for package "demo": have 1.2.3, need exactly 1.2}
test package-3.50 {Tcl_PkgRequire procedure, picking best stable version} -setup {
package forget t
set x xxx
} -body {
foreach i {1.4 3.4 4.0a1 2.3 2.4 2.2} {
package ifneeded t $i "set x $i; package provide t $i"
}
package require t
return $x
} -result {3.4}
test package-3.51 {Tcl_PkgRequire procedure, picking best stable version} -setup {
package forget t
set x xxx
} -body {
foreach i {1.2b1 1.2 1.3a2 1.3} {
package ifneeded t $i "set x $i; package provide t $i"
}
package require t
return $x
} -result {1.3}
test package-3.52 {Tcl_PkgRequire procedure, picking best stable version} -setup {
package forget t
set x xxx
} -body {
foreach i {1.2b1 1.2 1.3 1.3a2} {
package ifneeded t $i "set x $i; package provide t $i"
}
package require t
return $x
} -result {1.3}
test pkg-3.53 {Tcl_PkgRequire procedure, picking best stable version} {
package forget t
foreach i {1.2b1 1.1} {
package ifneeded t $i "set x $i; package provide t $i"
}
set x xxx
package require t
set x
} {1.1}
test package-3.54 {Tcl_PkgRequire procedure, coroutine support} -setup {
package forget t
} -body {
coroutine coro1 apply {{} {
package ifneeded t 2.1 {
yield
package provide t 2.1
}
package require t 2.1
}}
list [catch {coro1} msg] $msg
} -match glob -result {0 2.1}
test package-4.1 {Tcl_PackageCmd procedure} -returnCodes error -body {
package
} -result {wrong # args: should be "package option ?arg ...?"}
test package-4.2 {Tcl_PackageCmd procedure, "forget" option} {
package forget {*}[package names]
package names
} {}
test package-4.3 {Tcl_PackageCmd procedure, "forget" option} {
package forget {*}[package names]
package forget foo
} {}
test package-4.4 {Tcl_PackageCmd procedure, "forget" option} -setup {
package forget {*}[package names]
set result {}
} -body {
package ifneeded t 1.1 {first script}
package ifneeded t 2.3 {second script}
package ifneeded x 1.4 {x's script}
lappend result [lsort [package names]] [package versions t]
package forget t
lappend result [lsort [package names]] [package versions t]
} -result {{t x} {1.1 2.3} x {}}
test package-4.5 {Tcl_PackageCmd procedure, "forget" option} -setup {
package forget {*}[package names]
} -body {
package ifneeded a 1.1 {first script}
package ifneeded b 2.3 {second script}
package ifneeded c 1.4 {third script}
package forget
set result [list [lsort [package names]]]
package forget a c
lappend result [lsort [package names]]
} -result {{a b c} b}
test package-4.5.1 {Tcl_PackageCmd procedure, "forget" option} -body {
# Test for Bug 415273
package ifneeded a 1 "I should have been forgotten"
package forget no-such-package a
package ifneeded a 1
} -cleanup {
package forget a
} -result {}
test package-4.6 {Tcl_PackageCmd procedure, "ifneeded" option} -body {
package ifneeded a
} -returnCodes error -result {wrong # args: should be "package ifneeded package version ?script?"}
test package-4.7 {Tcl_PackageCmd procedure, "ifneeded" option} -body {
package ifneeded a b c d
} -returnCodes error -result {wrong # args: should be "package ifneeded package version ?script?"}
test package-4.8 {Tcl_PackageCmd procedure, "ifneeded" option} -body {
package ifneeded t xyz
} -returnCodes error -result {expected version number but got "xyz"}
test package-4.9 {Tcl_PackageCmd procedure, "ifneeded" option} {
package forget {*}[package names]
list [package ifneeded foo 1.1] [package names]
} {{} {}}
test package-4.10 {Tcl_PackageCmd procedure, "ifneeded" option} -setup {
package forget t
} -body {
package ifneeded t 1.4 "script for t 1.4"
list [package names] [package ifneeded t 1.4] [package versions t]
} -result {t {script for t 1.4} 1.4}
test package-4.11 {Tcl_PackageCmd procedure, "ifneeded" option} -setup {
package forget t
} -body {
package ifneeded t 1.4 "script for t 1.4"
list [package ifneeded t 1.5] [package names] [package versions t]
} -result {{} t 1.4}
test package-4.12 {Tcl_PackageCmd procedure, "ifneeded" option} -setup {
package forget t
} -body {
package ifneeded t 1.4 "script for t 1.4"
package ifneeded t 1.4 "second script for t 1.4"
list [package ifneeded t 1.4] [package names] [package versions t]
} -result {{second script for t 1.4} t 1.4}
test package-4.13 {Tcl_PackageCmd procedure, "ifneeded" option} -setup {
package forget t
} -body {
package ifneeded t 1.4 "script for t 1.4"
package ifneeded t 1.2 "second script"
package ifneeded t 3.1 "last script"
list [package ifneeded t 1.2] [package versions t]
} -result {{second script} {1.4 1.2 3.1}}
test package-4.14 {Tcl_PackageCmd procedure, "names" option} -body {
package names a
} -returnCodes error -result {wrong # args: should be "package names"}
test package-4.15 {Tcl_PackageCmd procedure, "names" option} {
package forget {*}[package names]
package names
} {}
test package-4.16 {Tcl_PackageCmd procedure, "names" option} -setup {
package forget {*}[package names]
} -body {
package ifneeded x 1.2 {dummy}
package provide x 1.3
package provide y 2.4
catch {package require z 47.16}
lsort [package names]
} -result {x y}
test package-4.17 {Tcl_PackageCmd procedure, "provide" option} -body {
package provide
} -returnCodes error -result {wrong # args: should be "package provide package ?version?"}
test package-4.18 {Tcl_PackageCmd procedure, "provide" option} -body {
package provide a b c
} -returnCodes error -result {wrong # args: should be "package provide package ?version?"}
test package-4.19 {Tcl_PackageCmd procedure, "provide" option} -setup {
package forget t
} -body {
package provide t
} -result {}
test package-4.20 {Tcl_PackageCmd procedure, "provide" option} -setup {
package forget t
} -body {
package provide t 2.3
package provide t
} -result {2.3}
test package-4.21 {Tcl_PackageCmd procedure, "provide" option} -setup {
package forget t
} -returnCodes error -body {
package provide t a.b
} -result {expected version number but got "a.b"}
test package-4.22 {Tcl_PackageCmd procedure, "require" option} -returnCodes error -body {
package require
} -result {wrong # args: should be "package require ?-exact? package ?requirement ...?"}
test package-4.24 {Tcl_PackageCmd procedure, "require" option} -body {
package require -exact a b c
# Exact syntax: -exact name version
# name ?requirement ...?
} -returnCodes error -result {wrong # args: should be "package require ?-exact? package ?requirement ...?"}
test package-4.26 {Tcl_PackageCmd procedure, "require" option} -body {
package require x a.b
} -returnCodes error -result {expected version number but got "a.b"}
test package-4.27 {Tcl_PackageCmd procedure, "require" option} -body {
package require -exact x a.b
} -returnCodes error -result {expected version number but got "a.b"}
test package-4.28 {Tcl_PackageCmd procedure, "require" option} -body {
package require -exact x
} -returnCodes error -result {wrong # args: should be "package require ?-exact? package ?requirement ...?"}
test package-4.29 {Tcl_PackageCmd procedure, "require" option} -body {
package require -exact
} -returnCodes error -result {wrong # args: should be "package require ?-exact? package ?requirement ...?"}
test package-4.30 {Tcl_PackageCmd procedure, "require" option} -setup {
package forget t
} -body {
package provide t 2.3
package require t 2.1
} -result {2.3}
test package-4.31 {Tcl_PackageCmd procedure, "require" option} -setup {
package forget t
} -body {
package require t
} -returnCodes error -result {can't find package t}
test package-4.32 {Tcl_PackageCmd procedure, "require" option} -setup {
package forget t
} -body {
package ifneeded t 2.3 "error {synthetic error}"
package require t 2.3
} -returnCodes error -result {synthetic error}
test package-4.33 {Tcl_PackageCmd procedure, "unknown" option} -body {
package unknown a b
} -returnCodes error -result {wrong # args: should be "package unknown ?command?"}
test package-4.34 {Tcl_PackageCmd procedure, "unknown" option} {
package unknown "test script"
package unknown
} {test script}
test package-4.35 {Tcl_PackageCmd procedure, "unknown" option} {
package unknown "test script"
package unknown {}
package unknown
} {}
test package-4.36 {Tcl_PackageCmd procedure, "vcompare" option} -body {
package vcompare a
} -returnCodes error -result {wrong # args: should be "package vcompare version1 version2"}
test package-4.37 {Tcl_PackageCmd procedure, "vcompare" option} -body {
package vcompare a b c
} -returnCodes error -result {wrong # args: should be "package vcompare version1 version2"}
test package-4.38 {Tcl_PackageCmd procedure, "vcompare" option} -body {
package vcompare x.y 3.4
} -returnCodes error -result {expected version number but got "x.y"}
test package-4.39 {Tcl_PackageCmd procedure, "vcompare" option} -body {
package vcompare 2.1 a.b
} -returnCodes error -result {expected version number but got "a.b"}
test package-4.40 {Tcl_PackageCmd procedure, "vcompare" option} {
package vc 2.1 2.3
} {-1}
test package-4.41 {Tcl_PackageCmd procedure, "vcompare" option} {
package vc 2.2.4 2.2.4
} {0}
test package-4.42 {Tcl_PackageCmd procedure, "versions" option} -body {
package versions
} -returnCodes error -result {wrong # args: should be "package versions package"}
test package-4.43 {Tcl_PackageCmd procedure, "versions" option} -body {
package versions a b
} -returnCodes error -result {wrong # args: should be "package versions package"}
test package-4.44 {Tcl_PackageCmd procedure, "versions" option} -body {
package forget t
package versions t
} -result {}
test package-4.45 {Tcl_PackageCmd procedure, "versions" option} -setup {
package forget t
} -body {
package provide t 2.3
package versions t
} -result {}
test package-4.46 {Tcl_PackageCmd procedure, "versions" option} -setup {
package forget t
} -body {
package ifneeded t 2.3 x
package ifneeded t 2.4 y
package versions t
} -result {2.3 2.4}
test package-4.47 {Tcl_PackageCmd procedure, "vsatisfies" option} -body {
package vsatisfies a
} -returnCodes error -result {wrong # args: should be "package vsatisfies version ?requirement ...?"}
test package-4.49 {Tcl_PackageCmd procedure, "vsatisfies" option} -body {
package vsatisfies x.y 3.4
} -returnCodes error -result {expected version number but got "x.y"}
test package-4.50 {Tcl_PackageCmd procedure, "vsatisfies" option} -body {
package vcompare 2.1 a.b
} -returnCodes error -result {expected version number but got "a.b"}
test package-4.51 {Tcl_PackageCmd procedure, "vsatisfies" option} {
package vs 2.3 2.1
} {1}
test package-4.52 {Tcl_PackageCmd procedure, "vsatisfies" option} {
package vs 2.3 1.2
} {0}
test package-4.53 {Tcl_PackageCmd procedure, "versions" option} -body {
package foo
} -returnCodes error -result {bad option "foo": must be forget, ifneeded, names, prefer, present, provide, require, unknown, vcompare, versions, or vsatisfies}
test package-4.54 {Tcl_PackageCmd procedure, "vsatisfies" option} -body {
package vsatisfies 2.1 2.1-3.2-4.5
} -returnCodes error -result {expected versionMin-versionMax but got "2.1-3.2-4.5"}
test package-4.55 {Tcl_PackageCmd procedure, "vsatisfies" option} -body {
package vsatisfies 2.1 3.2-x.y
} -returnCodes error -result {expected version number but got "x.y"}
test package-4.56 {Tcl_PackageCmd procedure, "vsatisfies" option} -body {
package vsatisfies 2.1 x.y-3.2
} -returnCodes error -result {expected version number but got "x.y"}
# No tests for FindPackage; can't think up anything detectable errors.
test package-5.1 {TclFreePackageInfo procedure} {
interp create child
child eval {
package ifneeded t 2.3 x
package ifneeded t 2.4 y
package ifneeded x 3.1 z
package provide q 4.3
package unknown "will this get freed?"
}
interp delete child
} {}
test package-5.2 {TclFreePackageInfo procedure} -body {
interp create foo
foo eval {
package ifneeded t 2.3 x
package ifneeded t 2.4 y
package ifneeded x 3.1 z
package provide q 4.3
}
foo alias z kill
proc kill {} {
interp delete foo
}
foo eval package require x 3.1
} -returnCodes error -match glob -result *
test package-6.1 {CheckVersion procedure} {
package vcompare 1 2.1
} -1
test package-6.2 {CheckVersion procedure} -body {
package vcompare .1 2.1
} -returnCodes error -result {expected version number but got ".1"}
test package-6.3 {CheckVersion procedure} -body {
package vcompare 111.2a.3 2.1
} -returnCodes error -result {expected version number but got "111.2a.3"}
test package-6.4 {CheckVersion procedure} -body {
package vcompare 1.2.3. 2.1
} -returnCodes error -result {expected version number but got "1.2.3."}
test package-6.5 {CheckVersion procedure} -body {
package vcompare 1.2..3 2.1
} -returnCodes error -result {expected version number but got "1.2..3"}
test package-7.1 {ComparePkgVersions procedure} {
package vcompare 1.23 1.22
} {1}
test package-7.2 {ComparePkgVersions procedure} {
package vcompare 1.22.1.2.3 1.22.1.2.3
} {0}
test package-7.3 {ComparePkgVersions procedure} {
package vcompare 1.21 1.22
} {-1}
test package-7.4 {ComparePkgVersions procedure} {
package vcompare 1.21 1.21.2
} {-1}
test package-7.5 {ComparePkgVersions procedure} {
package vcompare 1.21.1 1.21
} {1}
test package-7.6 {ComparePkgVersions procedure} {
package vsatisfies 1.21.1 1.21
} {1}
test package-7.7 {ComparePkgVersions procedure} {
package vsatisfies 2.22.3 1.21
} {0}
test package-7.8 {ComparePkgVersions procedure} {
package vsatisfies 1 1
} {1}
test package-7.9 {ComparePkgVersions procedure} {
package vsatisfies 2 1
} {0}
test package-8.1 {Tcl_PkgPresent procedure, any version} -setup {
package forget t
} -body {
package provide t 2.4
package present t
} -result {2.4}
test package-8.2 {Tcl_PkgPresent procedure, correct version} -setup {
package forget t
} -body {
package provide t 2.4
package present t 2.4
} -result {2.4}
test package-8.3 {Tcl_PkgPresent procedure, satisfying version} -setup {
package forget t
} -body {
package provide t 2.4
package present t 2.0
} -result {2.4}
test package-8.4 {Tcl_PkgPresent procedure, not satisfying version} -setup {
package forget t
} -returnCodes error -body {
package provide t 2.4
package present t 2.6
} -result {version conflict for package "t": have 2.4, need 2.6}
test package-8.5 {Tcl_PkgPresent procedure, not satisfying version} -setup {
package forget t
} -returnCodes error -body {
package provide t 2.4
package present t 1.0
} -result {version conflict for package "t": have 2.4, need 1.0}
test package-8.6 {Tcl_PkgPresent procedure, exact version} -setup {
package forget t
} -body {
package provide t 2.4
package present -exact t 2.4
} -result {2.4}
test package-8.7 {Tcl_PkgPresent procedure, not exact version} -setup {
package forget t
} -returnCodes error -body {
package provide t 2.4
package present -exact t 2.3
} -result {version conflict for package "t": have 2.4, need exactly 2.3}
test package-8.8 {Tcl_PkgPresent procedure, unknown package} -body {
package forget t
package present t
} -returnCodes error -result {package t is not present}
test package-8.9 {Tcl_PkgPresent procedure, unknown package} -body {
package forget t
package present t 2.4
} -returnCodes error -result {package t 2.4 is not present}
test package-8.10 {Tcl_PkgPresent procedure, unknown package} -body {
package forget t
package present -exact t 2.4
} -returnCodes error -result {package t 2.4 is not present}
test package-8.11 {Tcl_PackageCmd procedure, "present" option} -body {
package present
} -returnCodes error -result {wrong # args: should be "package present ?-exact? package ?requirement ...?"}
test package-8.12 {Tcl_PackageCmd procedure, "present" option} -body {
package present a b c
} -returnCodes error -result {expected version number but got "b"}
test package-8.13 {Tcl_PackageCmd procedure, "present" option} -body {
package present -exact a b c
} -returnCodes error -result {wrong # args: should be "package present ?-exact? package ?requirement ...?"}
test package-8.14 {Tcl_PackageCmd procedure, "present" option} -body {
package present -bs a b
} -returnCodes error -result {expected version number but got "a"}
test package-8.15 {Tcl_PackageCmd procedure, "present" option} -body {
package present x a.b
} -returnCodes error -result {expected version number but got "a.b"}
test package-8.16 {Tcl_PackageCmd procedure, "present" option} -body {
package present -exact x a.b
} -returnCodes error -result {expected version number but got "a.b"}
test package-8.17 {Tcl_PackageCmd procedure, "present" option} -body {
package present -exact x
} -returnCodes error -result {wrong # args: should be "package present ?-exact? package ?requirement ...?"}
test package-8.18 {Tcl_PackageCmd procedure, "present" option} -body {
package present -exact
} -returnCodes error -result {wrong # args: should be "package present ?-exact? package ?requirement ...?"}
set n 0
foreach {r p vs vc} {
8.5a0 8.5a5 1 -1
8.5a0 8.5b1 1 -1
8.5a0 8.5.1 1 -1
8.5a0 8.6a0 1 -1
8.5a0 8.6b0 1 -1
8.5a0 8.6.0 1 -1
8.5a6 8.5a5 0 1
8.5a6 8.5b1 1 -1
8.5a6 8.5.1 1 -1
8.5a6 8.6a0 1 -1
8.5a6 8.6b0 1 -1
8.5a6 8.6.0 1 -1
8.5b0 8.5a5 0 1
8.5b0 8.5b1 1 -1
8.5b0 8.5.1 1 -1
8.5b0 8.6a0 1 -1
8.5b0 8.6b0 1 -1
8.5b0 8.6.0 1 -1
8.5b2 8.5a5 0 1
8.5b2 8.5b1 0 1
8.5b2 8.5.1 1 -1
8.5b2 8.6a0 1 -1
8.5b2 8.6b0 1 -1
8.5b2 8.6.0 1 -1
8.5 8.5a5 1 1
8.5 8.5b1 1 1
8.5 8.5.1 1 -1
8.5 8.6a0 1 -1
8.5 8.6b0 1 -1
8.5 8.6.0 1 -1
8.5.0 8.5a5 0 1
8.5.0 8.5b1 0 1
8.5.0 8.5.1 1 -1
8.5.0 8.6a0 1 -1
8.5.0 8.6b0 1 -1
8.5.0 8.6.0 1 -1
10 8 0 1
8 10 0 -1
0.0.1.2 0.1.2 1 -1
} {
test package-9.$n {package vsatisfies} {
package vsatisfies $p $r
} $vs
test package-10.$n {package vcompare} {
package vcompare $r $p
} $vc
incr n
}
test package-11.0.0 {package vcompare at 32bit boundary} {
package vcompare [expr {1<<31}] [expr {(1<<31)-1}]
} 1
# Note: It is correct that the result of the very first test, i.e. "5.0 5.0a0"
# is 1, i.e. that version 5.0a0 satisfies a 5.0 requirement.
# The requirement "5.0" internally translates first to "5.0-6", and then to
# its final form of "5.0a0-6a0". These translations are explicitly specified
# by the TIP (Search for "padded/extended internally with 'a0'"). This was
# done intentionally for exactly the tested case, that an alpha package can
# satisfy a requirement for the regular package. An example would be a package
# FOO requiring Tcl 8.X for its operation. It can be used with Tcl 8.Xa0.
# Without our translation that would not be possible.
set n 0
foreach {required provided satisfied} {
5.0 5.0a0 1
5.0a0 5.0 1
8.5a0- 8.5a5 1
8.5a0- 8.5b1 1
8.5a0- 8.5.1 1
8.5a0- 8.6a0 1
8.5a0- 8.6b0 1
8.5a0- 8.6.0 1
8.5a6- 8.5a5 0
8.5a6- 8.5b1 1
8.5a6- 8.5.1 1
8.5a6- 8.6a0 1
8.5a6- 8.6b0 1
8.5a6- 8.6.0 1
8.5b0- 8.5a5 0
8.5b0- 8.5b1 1
8.5b0- 8.5.1 1
8.5b0- 8.6a0 1
8.5b0- 8.6b0 1
8.5b0- 8.6.0 1
8.5b2- 8.5a5 0
8.5b2- 8.5b1 0
8.5b2- 8.5.1 1
8.5b2- 8.6a0 1
8.5b2- 8.6b0 1
8.5b2- 8.6.0 1
8.5- 8.5a5 1
8.5- 8.5b1 1
8.5- 8.5.1 1
8.5- 8.6a0 1
8.5- 8.6b0 1
8.5- 8.6.0 1
8.5.0- 8.5a5 0
8.5.0- 8.5b1 0
8.5.0- 8.5.1 1
8.5.0- 8.6a0 1
8.5.0- 8.6b0 1
8.5.0- 8.6.0 1
8.5a0-7 8.5a5 0
8.5a0-7 8.5b1 0
8.5a0-7 8.5.1 0
8.5a0-7 8.6a0 0
8.5a0-7 8.6b0 0
8.5a0-7 8.6.0 0
8.5a6-7 8.5a5 0
8.5a6-7 8.5b1 0
8.5a6-7 8.5.1 0
8.5a6-7 8.6a0 0
8.5a6-7 8.6b0 0
8.5a6-7 8.6.0 0
8.5b0-7 8.5a5 0
8.5b0-7 8.5b1 0
8.5b0-7 8.5.1 0
8.5b0-7 8.6a0 0
8.5b0-7 8.6b0 0
8.5b0-7 8.6.0 0
8.5b2-7 8.5a5 0
8.5b2-7 8.5b1 0
8.5b2-7 8.5.1 0
8.5b2-7 8.6a0 0
8.5b2-7 8.6b0 0
8.5b2-7 8.6.0 0
8.5-7 8.5a5 0
8.5-7 8.5b1 0
8.5-7 8.5.1 0
8.5-7 8.6a0 0
8.5-7 8.6b0 0
8.5-7 8.6.0 0
8.5.0-7 8.5a5 0
8.5.0-7 8.5b1 0
8.5.0-7 8.5.1 0
8.5.0-7 8.6a0 0
8.5.0-7 8.6b0 0
8.5.0-7 8.6.0 0
8.5a0-8.6.1 8.5a5 1
8.5a0-8.6.1 8.5b1 1
8.5a0-8.6.1 8.5.1 1
8.5a0-8.6.1 8.6a0 1
8.5a0-8.6.1 8.6b0 1
8.5a0-8.6.1 8.6.0 1
8.5a6-8.6.1 8.5a5 0
8.5a6-8.6.1 8.5b1 1
8.5a6-8.6.1 8.5.1 1
8.5a6-8.6.1 8.6a0 1
8.5a6-8.6.1 8.6b0 1
8.5a6-8.6.1 8.6.0 1
8.5b0-8.6.1 8.5a5 0
8.5b0-8.6.1 8.5b1 1
8.5b0-8.6.1 8.5.1 1
8.5b0-8.6.1 8.6a0 1
8.5b0-8.6.1 8.6b0 1
8.5b0-8.6.1 8.6.0 1
8.5b2-8.6.1 8.5a5 0
8.5b2-8.6.1 8.5b1 0
8.5b2-8.6.1 8.5.1 1
8.5b2-8.6.1 8.6a0 1
8.5b2-8.6.1 8.6b0 1
8.5b2-8.6.1 8.6.0 1
8.5-8.6.1 8.5a5 1
8.5-8.6.1 8.5b1 1
8.5-8.6.1 8.5.1 1
8.5-8.6.1 8.6a0 1
8.5-8.6.1 8.6b0 1
8.5-8.6.1 8.6.0 1
8.5.0-8.6.1 8.5a5 0
8.5.0-8.6.1 8.5b1 0
8.5.0-8.6.1 8.5.1 1
8.5.0-8.6.1 8.6a0 1
8.5.0-8.6.1 8.6b0 1
8.5.0-8.6.1 8.6.0 1
8.5a0-8.5a0 8.5a0 1
8.5a0-8.5a0 8.5b1 0
8.5a0-8.5a0 8.4 0
8.5b0-8.5b0 8.5a5 0
8.5b0-8.5b0 8.5b0 1
8.5b0-8.5b0 8.5.1 0
8.5-8.5 8.5a5 0
8.5-8.5 8.5b1 0
8.5-8.5 8.5 1
8.5-8.5 8.5.1 0
8.5.0-8.5.0 8.5a5 0
8.5.0-8.5.0 8.5b1 0
8.5.0-8.5.0 8.5.0 1
8.5.0-8.5.0 8.5.1 0
8.5.0-8.5.0 8.6a0 0
8.5.0-8.5.0 8.6b0 0
8.5.0-8.5.0 8.6.0 0
8.2 9 0
8.2- 9 1
8.2-8.5 9 0
8.2-9.1 9 1
8.5-8.5 8.5b1 0
8.5a0-8.5 8.5b1 0
8.5a0-8.5.1 8.5b1 1
8.5-8.5 8.5 1
8.5.0-8.5.0 8.5 1
8.5a0-8.5.0 8.5 0
} {
test package-11.$n "package vsatisfies $provided $required" {
package vsatisfies $provided $required
} $satisfied
incr n
}
test package-12.0 "package vsatisfies multiple" {
# yes no
package vsatisfies 8.4 8.4 7.3
} 1
test package-12.1 "package vsatisfies multiple" {
# no yes
package vsatisfies 8.4 7.3 8.4
} 1
test package-12.2 "package vsatisfies multiple" {
# yes yes
package vsatisfies 8.4.2 8.4 8.4.1
} 1
test package-12.3 "package vsatisfies multiple" {
# no no
package vsatisfies 8.4 7.3 6.1
} 0
proc prefer {args} {
set ip [interp create]
try {
lappend res [$ip eval {package prefer}]
foreach mode $args {
lappend res [$ip eval [list package prefer $mode]]
}
return $res
} finally {
interp delete $ip
}
}
test package-13.0 {package prefer defaults} {
prefer
} stable
test package-13.1 {package prefer defaults} -body {
set ::env(TCL_PKG_PREFER_LATEST) stable ;# value not relevant!
prefer
} -cleanup {
unset -nocomplain ::env(TCL_PKG_PREFER_LATEST)
} -result latest
test package-14.0 {wrong\#args} -returnCodes error -body {
package prefer foo bar
} -result {wrong # args: should be "package prefer ?latest|stable?"}
test package-14.1 {bogus argument} -returnCodes error -body {
package prefer foo
} -result {bad preference "foo": must be latest or stable}
test package-15.0 {set, keep} {package prefer stable} stable
test package-15.1 {set stable, keep} {prefer stable} {stable stable}
test package-15.2 {set latest, change} {prefer latest} {stable latest}
test package-15.3 {set latest, keep} {
prefer latest latest
} {stable latest latest}
test package-15.4 {set stable, rejected} {
prefer latest stable
} {stable latest latest}
rename prefer {}
set auto_path $oldPath
package unknown $oldPkgUnknown
cleanupTests
}
# cleanup
interp delete $i
::tcltest::cleanupTests
return
# Local Variables:
# mode: tcl
# fill-column: 78
# End: