os/persistentdata/persistentstorage/sqlite3api/TEST/TCL/tcldistribution/tests/pkg.test
Update contrib.
1 # Commands covered: pkg
3 # This file contains a collection of tests for one or more of the Tcl
4 # built-in commands. Sourcing this file into Tcl runs the tests and
5 # generates output for errors. No output means no errors were found.
7 # Copyright (c) 1995-1996 Sun Microsystems, Inc.
8 # Copyright (c) 1998-1999 by Scriptics Corporation.
10 # See the file "license.terms" for information on usage and redistribution
11 # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
13 # RCS: @(#) $Id: pkg.test,v 1.9.12.10 2007/02/22 20:25:29 andreas_kupries Exp $
15 if {[lsearch [namespace children] ::tcltest] == -1} {
16 package require tcltest 2
17 namespace import -force ::tcltest::*
20 # Do all this in a slave interp to avoid garbaging the
23 interp eval $i [list set argv $argv]
24 interp eval $i [list package require tcltest 2]
25 interp eval $i [list namespace import -force ::tcltest::*]
28 eval package forget [package names]
29 set oldPkgUnknown [package unknown]
31 set oldPath $auto_path
34 testConstraint tip268 [info exists tcl_platform(tip,268)]
35 testConstraint !tip268 [expr {![info exists tcl_platform(tip,268)]}]
37 test pkg-1.1 {Tcl_PkgProvide procedure} {
41 test pkg-1.2 {Tcl_PkgProvide procedure} {
44 list [catch {package provide t 2.2} msg] $msg
45 } {1 {conflicting versions provided for package "t": 2.3, then 2.2}}
46 test pkg-1.3 {Tcl_PkgProvide procedure} {
49 list [catch {package provide t 2.4} msg] $msg
50 } {1 {conflicting versions provided for package "t": 2.3, then 2.4}}
51 test pkg-1.4 {Tcl_PkgProvide procedure} {
54 list [catch {package provide t 3.3} msg] $msg
55 } {1 {conflicting versions provided for package "t": 2.3, then 3.3}}
56 test pkg-1.5 {Tcl_PkgProvide procedure} {
62 test pkg-1.6 {Tcl_PkgProvide procedure} tip268 {
64 package provide t 2.3a1
69 2.3k1 2a3a2 2ab3 2.a4 2.b4 2b.4 2a.4 2ba4 2a4b1
72 test pkg-1.7.$n {Tcl_PkgProvide procedure} tip268 {
74 list [catch {package provide t $v} msg] $msg
75 } [list 1 "expected version number but got \"$v\""]
79 test pkg-2.1 {Tcl_PkgRequire procedure, picking best version} {
81 foreach i {1.4 3.4 2.3 2.4 2.2} {
82 package ifneeded t $i "set x $i; package provide t $i"
88 test pkg-2.2 {Tcl_PkgRequire procedure, picking best version} {
90 foreach i {1.4 3.4 2.3 2.4 2.2 3.5 3.2} {
91 package ifneeded t $i "set x $i; package provide t $i"
97 test pkg-2.3 {Tcl_PkgRequire procedure, picking best version} {
99 foreach i {3.5 2.1 2.3} {
100 package ifneeded t $i "set x $i; package provide t $i"
103 package require t 2.2
106 test pkg-2.4 {Tcl_PkgRequire procedure, picking best version} {
108 foreach i {1.4 3.4 2.3 2.4 2.2} {
109 package ifneeded t $i "set x $i; package provide t $i"
112 package require -exact t 2.3
115 test pkg-2.5 {Tcl_PkgRequire procedure, picking best version} {
117 foreach i {1.4 3.4 2.3 2.4 2.2} {
118 package ifneeded t $i "set x $i; package provide t $i"
121 package require t 2.1
124 test pkg-2.6 {Tcl_PkgRequire procedure, can't find suitable version} {
127 foreach i {1.4 3.4 2.3 2.4 2.2} {
128 package ifneeded t $i "set x $i"
130 list [catch {package require t 2.5} msg] $msg
131 } {1 {can't find package t 2.5}}
132 test pkg-2.7 {Tcl_PkgRequire procedure, can't find suitable version} {
135 foreach i {1.4 3.4 2.3 2.4 2.2} {
136 package ifneeded t $i "set x $i"
138 list [catch {package require t 4.1} msg] $msg
139 } {1 {can't find package t 4.1}}
140 test pkg-2.8 {Tcl_PkgRequire procedure, can't find suitable version} !tip268 {
143 foreach i {1.4 3.4 2.3 2.4 2.2} {
144 package ifneeded t $i "set x $i"
146 list [catch {package require -exact t 1.3} msg] $msg
148 } {1 {can't find package t 1.3}}
149 test pkg-2.8-268 {Tcl_PkgRequire procedure, can't find suitable version} tip268 {
152 foreach i {1.4 3.4 2.3 2.4 2.2} {
153 package ifneeded t $i "set x $i"
155 list [catch {package require -exact t 1.3} msg] $msg
157 } {1 {can't find package t 1.3-1.4}}
158 test pkg-2.9 {Tcl_PkgRequire procedure, can't find suitable version} {
161 list [catch {package require t} msg] $msg
162 } {1 {can't find package t}}
163 test pkg-2.10 {Tcl_PkgRequire procedure, error in ifneeded script} -body {
165 package ifneeded t 2.1 {package provide t 2.1; error "ifneeded test"}
166 list [catch {package require t 2.1} msg] $msg $errorInfo
167 } -match glob -result {1 {ifneeded test} {ifneeded test
169 "error "ifneeded test""
170 ("package ifneeded*" script)
172 "package require t 2.1"}}
173 test pkg-2.11 {Tcl_PkgRequire procedure, ifneeded script doesn't provide package} -body {
175 package ifneeded t 2.1 "set x invoked"
177 list [catch {package require t 2.1} msg] $msg $x
178 } -match glob -result {1 * invoked}
179 test pkg-2.12 {Tcl_PkgRequire procedure, self-deleting script} {
181 package ifneeded t 1.2 "package forget t; set x 1.2; package provide t 1.2"
183 package require t 1.2
186 test pkg-2.13-!268 {Tcl_PkgRequire procedure, "package unknown" support} !tip268 {
187 proc pkgUnknown args {
190 package provide [lindex $args 0] [lindex $args 1]
193 foreach i {1.4 3.4 2.3 2.4 2.2} {
194 package ifneeded t $i "set x $i"
196 package unknown pkgUnknown
198 package require -exact t 1.5
203 test pkg-2.13-268 {Tcl_PkgRequire procedure, "package unknown" support} tip268 {
204 proc pkgUnknown args {
205 # args = name requirement
206 # requirement = v-v (for exact version)
209 package provide [lindex $args 0] [lindex [split [lindex $args 1] -] 0]
212 foreach i {1.4 3.4 2.3 2.4 2.2} {
213 package ifneeded t $i "set x $i"
215 package unknown pkgUnknown
217 package require -exact t 1.5
222 test pkg-2.14 {Tcl_PkgRequire procedure, "package unknown" support} {
223 proc pkgUnknown args {
224 package ifneeded t 1.2 "set x loaded; package provide t 1.2"
227 package unknown pkgUnknown
229 set result [list [package require t] $x]
233 test pkg-2.15 {Tcl_PkgRequire procedure, "package unknown" support} !tip268 {
234 proc pkgUnknown args {
237 package provide [lindex $args 0] 2.0
240 package unknown pkgUnknown
242 package require {a b}
246 test pkg-2.15-268 {Tcl_PkgRequire procedure, "package unknown" support} tip268 {
247 proc pkgUnknown args {
250 package provide [lindex $args 0] 2.0
253 package unknown pkgUnknown
255 package require {a b}
259 test pkg-2.16 {Tcl_PkgRequire procedure, "package unknown" error} !tip268 {
260 proc pkgUnknown args {
261 error "testing package unknown"
264 package unknown pkgUnknown
265 set result [list [catch {package require t} msg] $msg $errorInfo]
268 } {1 {testing package unknown} {testing package unknown
270 "error "testing package unknown""
271 (procedure "pkgUnknown" line 2)
274 ("package unknown" script)
276 "package require t"}}
277 test pkg-2.16-268 {Tcl_PkgRequire procedure, "package unknown" error} tip268 {
278 proc pkgUnknown args {
279 error "testing package unknown"
282 package unknown pkgUnknown
283 set result [list [catch {package require t} msg] $msg $errorInfo]
286 } {1 {testing package unknown} {testing package unknown
288 "error "testing package unknown""
289 (procedure "pkgUnknown" line 2)
292 ("package unknown" script)
294 "package require t"}}
295 test pkg-2.17 {Tcl_PkgRequire procedure, "package unknown" doesn't load package} !tip268 {
296 proc pkgUnknown args {
301 foreach i {1.4 3.4 2.3 2.4 2.2} {
302 package ifneeded t $i "set x $i"
304 package unknown pkgUnknown
306 set result [list [catch {package require -exact t 1.5} msg] $msg $x]
309 } {1 {can't find package t 1.5} {t 1.5 -exact}}
310 test pkg-2.17-268 {Tcl_PkgRequire procedure, "package unknown" doesn't load package} tip268 {
311 proc pkgUnknown args {
316 foreach i {1.4 3.4 2.3 2.4 2.2} {
317 package ifneeded t $i "set x $i"
319 package unknown pkgUnknown
321 set result [list [catch {package require -exact t 1.5} msg] $msg $x]
324 } {1 {can't find package t 1.5-1.6} {t 1.5-1.6}}
325 test pkg-2.18 {Tcl_PkgRequire procedure, version checks} {
327 package provide t 2.3
330 test pkg-2.19 {Tcl_PkgRequire procedure, version checks} {
332 package provide t 2.3
333 package require t 2.1
335 test pkg-2.20 {Tcl_PkgRequire procedure, version checks} {
337 package provide t 2.3
338 package require t 2.3
340 test pkg-2.21 {Tcl_PkgRequire procedure, version checks} {
342 package provide t 2.3
343 list [catch {package require t 2.4} msg] $msg
344 } {1 {version conflict for package "t": have 2.3, need 2.4}}
345 test pkg-2.22 {Tcl_PkgRequire procedure, version checks} {
347 package provide t 2.3
348 list [catch {package require t 1.2} msg] $msg
349 } {1 {version conflict for package "t": have 2.3, need 1.2}}
350 test pkg-2.23 {Tcl_PkgRequire procedure, version checks} {
352 package provide t 2.3
353 package require -exact t 2.3
355 test pkg-2.24 {Tcl_PkgRequire procedure, version checks} !tip268 {
357 package provide t 2.3
358 list [catch {package require -exact t 2.2} msg] $msg
359 } {1 {version conflict for package "t": have 2.3, need 2.2}}
360 test pkg-2.24-268 {Tcl_PkgRequire procedure, version checks} tip268 {
362 package provide t 2.3
363 list [catch {package require -exact t 2.2} msg] $msg
364 } {1 {version conflict for package "t": have 2.3, need 2.2-2.3}}
365 test pkg-2.25 {Tcl_PkgRequire procedure, error in ifneeded script} -body {
367 package ifneeded t 2.1 {package provide t 2.1; error "ifneeded test" EI}
368 list [catch {package require t 2.1} msg] $msg $errorInfo
369 } -match glob -result {1 {ifneeded test} {EI
370 ("package ifneeded*" script)
372 "package require t 2.1"}} -constraints knownBug
373 test pkg-2.26 {Tcl_PkgRequire procedure, error in ifneeded script} -body {
375 package ifneeded t 2.1 {package provide t 2.1; foreach x 1 {error "ifneeded test" EI}}
376 list [catch {package require t 2.1} msg] $msg $errorInfo
377 } -match glob -result {1 {ifneeded test} {EI
378 ("foreach" body line 1)
380 "foreach x 1 {error "ifneeded test" EI}"
381 ("package ifneeded*" script)
383 "package require t 2.1"}}
384 test pkg-2.27 {Tcl_PkgRequire: circular dependency} -setup {
387 package ifneeded foo 1 {package require foo 1}
388 package require foo 1
391 } -returnCodes error -match glob -result {circular package dependency:*}
392 test pkg-2.28 {Tcl_PkgRequire: circular dependency} -setup {
395 package ifneeded foo 1 {package require foo 2}
396 package require foo 1
399 } -returnCodes error -match glob -result {circular package dependency:*}
400 test pkg-2.29 {Tcl_PkgRequire: circular dependency} -setup {
404 package ifneeded foo 1 {package require bar 1; package provide foo 1}
405 package ifneeded bar 1 {package require foo 1; package provide bar 1}
406 package require foo 1
410 } -returnCodes error -match glob -result {circular package dependency:*}
411 test pkg-2.30 {Tcl_PkgRequire: circular dependency} -setup {
415 package ifneeded foo 1 {package require bar 1; package provide foo 1}
416 package ifneeded foo 2 {package provide foo 2}
417 package ifneeded bar 1 {package require foo 2; package provide bar 1}
418 package require foo 1
422 } -returnCodes error -match glob -result {circular package dependency:*}
423 test pkg-2.31 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
426 package ifneeded foo 1 {package provide foo 1; error foo}
427 package require foo 1
430 } -returnCodes error -match glob -result foo
431 test pkg-2.32 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
434 package ifneeded foo 1 {package provide foo 1; error foo}
435 catch {package require foo 1}
440 test pkg-2.33 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
443 package ifneeded foo 1 {package provide foo 2}
444 package require foo 1
447 } -returnCodes error -match glob -result {attempt to provide package * failed:*}
448 test pkg-2.34 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
451 package ifneeded foo 1 {package provide foo 1.1}
452 package require foo 1
456 test pkg-2.34.1 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
459 package ifneeded foo 1.1 {package provide foo 1}
460 package require foo 1
464 test pkg-2.34.2 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
467 package ifneeded foo 1.1 {package provide foo 1}
468 package require foo 1.1
471 } -returnCodes error -match glob -result {attempt to provide package * failed:*}
472 test pkg-2.35 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
475 package ifneeded foo 1 {}
476 package require foo 1
479 } -returnCodes error -match glob -result {attempt to provide package * failed:*}
480 test pkg-2.35.1 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
483 package ifneeded foo 1 {break}
484 package require foo 1
487 } -returnCodes error -match glob \
488 -result {attempt to provide package * failed: bad return code:*}
489 test pkg-2.36 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
492 package ifneeded foo 1 {continue}
493 package require foo 1
496 } -returnCodes error -match glob \
497 -result {attempt to provide package * failed: bad return code:*}
498 test pkg-2.37 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
501 package ifneeded foo 1 {return}
502 package require foo 1
505 } -returnCodes error -match glob \
506 -result {attempt to provide package * failed: bad return code:*}
507 test pkg-2.38 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
510 package ifneeded foo 1 {proc x {} {return -code 10}; x}
511 package require foo 1
515 } -returnCodes error -match glob \
516 -result {attempt to provide package * failed: bad return code:*}
517 test pkg-2.39 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
519 set saveUnknown [package unknown]
520 package unknown {package provide foo 2 ;#}
522 package require foo 1
525 package unknown $saveUnknown
526 } -returnCodes error -match glob -result *
527 test pkg-2.40 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
529 set saveUnknown [package unknown]
530 package unknown {break ;#}
532 package require foo 1
535 package unknown $saveUnknown
536 } -returnCodes error -match glob -result {bad return code:*}
537 test pkg-2.41 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
539 set saveUnknown [package unknown]
540 package unknown {continue ;#}
542 package require foo 1
545 package unknown $saveUnknown
546 } -returnCodes error -match glob -result {bad return code:*}
547 test pkg-2.42 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
549 set saveUnknown [package unknown]
550 package unknown {return ;#}
552 package require foo 1
555 package unknown $saveUnknown
556 } -returnCodes error -match glob -result {bad return code:*}
557 test pkg-2.43 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
559 set saveUnknown [package unknown]
560 proc x args {return -code 10}
563 package require foo 1
567 package unknown $saveUnknown
568 } -returnCodes error -match glob -result {bad return code:*}
572 test pkg-2.50 {Tcl_PkgRequire procedure, picking best stable version} tip268 {
574 foreach i {1.4 3.4 4.0a1 2.3 2.4 2.2} {
575 package ifneeded t $i "set x $i; package provide t $i"
582 test pkg-2.51 {Tcl_PkgRequire procedure, picking best stable version} tip268 {
584 foreach i {1.2b1 1.2 1.3a2 1.3} {
585 package ifneeded t $i "set x $i; package provide t $i"
592 test pkg-2.52 {Tcl_PkgRequire procedure, picking best stable version} tip268 {
594 foreach i {1.2b1 1.2 1.3 1.3a2} {
595 package ifneeded t $i "set x $i; package provide t $i"
604 test pkg-3.1 {Tcl_PackageCmd procedure} {
605 list [catch {package} msg] $msg
606 } {1 {wrong # args: should be "package option ?arg arg ...?"}}
607 test pkg-3.2 {Tcl_PackageCmd procedure, "forget" option} {
608 foreach i [package names] {
613 test pkg-3.3 {Tcl_PackageCmd procedure, "forget" option} {
614 foreach i [package names] {
619 test pkg-3.4 {Tcl_PackageCmd procedure, "forget" option} {
620 foreach i [package names] {
623 package ifneeded t 1.1 {first script}
624 package ifneeded t 2.3 {second script}
625 package ifneeded x 1.4 {x's script}
627 lappend result [lsort [package names]] [package versions t]
629 lappend result [lsort [package names]] [package versions t]
630 } {{t x} {1.1 2.3} x {}}
631 test pkg-3.5 {Tcl_PackageCmd procedure, "forget" option} {
632 foreach i [package names] {
635 package ifneeded a 1.1 {first script}
636 package ifneeded b 2.3 {second script}
637 package ifneeded c 1.4 {third script}
639 set result [list [lsort [package names]]]
641 lappend result [lsort [package names]]
643 test pkg-3.5.1 {Tcl_PackageCmd procedure, "forget" option} {
644 # Test for Bug 415273
645 package ifneeded a 1 "I should have been forgotten"
646 package forget no-such-package a
647 set x [package ifneeded a 1]
651 test pkg-3.6 {Tcl_PackageCmd procedure, "ifneeded" option} {
652 list [catch {package ifneeded a} msg] $msg
653 } {1 {wrong # args: should be "package ifneeded package version ?script?"}}
654 test pkg-3.7 {Tcl_PackageCmd procedure, "ifneeded" option} {
655 list [catch {package ifneeded a b c d} msg] $msg
656 } {1 {wrong # args: should be "package ifneeded package version ?script?"}}
657 test pkg-3.8 {Tcl_PackageCmd procedure, "ifneeded" option} {
658 list [catch {package ifneeded t xyz} msg] $msg
659 } {1 {expected version number but got "xyz"}}
660 test pkg-3.9 {Tcl_PackageCmd procedure, "ifneeded" option} {
661 foreach i [package names] {
664 list [package ifneeded foo 1.1] [package names]
666 test pkg-3.10 {Tcl_PackageCmd procedure, "ifneeded" option} {
668 package ifneeded t 1.4 "script for t 1.4"
669 list [package names] [package ifneeded t 1.4] [package versions t]
670 } {t {script for t 1.4} 1.4}
671 test pkg-3.11 {Tcl_PackageCmd procedure, "ifneeded" option} {
673 package ifneeded t 1.4 "script for t 1.4"
674 list [package ifneeded t 1.5] [package names] [package versions t]
676 test pkg-3.12 {Tcl_PackageCmd procedure, "ifneeded" option} {
678 package ifneeded t 1.4 "script for t 1.4"
679 package ifneeded t 1.4 "second script for t 1.4"
680 list [package ifneeded t 1.4] [package names] [package versions t]
681 } {{second script for t 1.4} t 1.4}
682 test pkg-3.13 {Tcl_PackageCmd procedure, "ifneeded" option} {
684 package ifneeded t 1.4 "script for t 1.4"
685 package ifneeded t 1.2 "second script"
686 package ifneeded t 3.1 "last script"
687 list [package ifneeded t 1.2] [package versions t]
688 } {{second script} {1.4 1.2 3.1}}
689 test pkg-3.14 {Tcl_PackageCmd procedure, "names" option} {
690 list [catch {package names a} msg] $msg
691 } {1 {wrong # args: should be "package names"}}
692 test pkg-3.15 {Tcl_PackageCmd procedure, "names" option} {
693 foreach i [package names] {
698 test pkg-3.16 {Tcl_PackageCmd procedure, "names" option} {
699 foreach i [package names] {
702 package ifneeded x 1.2 {dummy}
703 package provide x 1.3
704 package provide y 2.4
705 catch {package require z 47.16}
706 lsort [package names]
708 test pkg-3.17 {Tcl_PackageCmd procedure, "provide" option} {
709 list [catch {package provide} msg] $msg
710 } {1 {wrong # args: should be "package provide package ?version?"}}
711 test pkg-3.18 {Tcl_PackageCmd procedure, "provide" option} {
712 list [catch {package provide a b c} msg] $msg
713 } {1 {wrong # args: should be "package provide package ?version?"}}
714 test pkg-3.19 {Tcl_PackageCmd procedure, "provide" option} {
718 test pkg-3.20 {Tcl_PackageCmd procedure, "provide" option} {
720 package provide t 2.3
723 test pkg-3.21 {Tcl_PackageCmd procedure, "provide" option} {
725 list [catch {package provide t a.b} msg] $msg
726 } {1 {expected version number but got "a.b"}}
727 test pkg-3.22 {Tcl_PackageCmd procedure, "require" option} !tip268 {
728 list [catch {package require} msg] $msg
729 } {1 {wrong # args: should be "package require ?-exact? package ?version?"}}
730 test pkg-3.22-268 {Tcl_PackageCmd procedure, "require" option} tip268 {
731 list [catch {package require} msg] $msg
732 } {1 {wrong # args: should be "package require ?-exact? package ?requirement...?"}}
733 test pkg-3.23 {Tcl_PackageCmd procedure, "require" option} !tip268 {
734 list [catch {package require a b c} msg] $msg
735 } {1 {wrong # args: should be "package require ?-exact? package ?version?"}}
736 test pkg-3.24 {Tcl_PackageCmd procedure, "require" option} !tip268 {
737 list [catch {package require -exact a b c} msg] $msg
738 } {1 {wrong # args: should be "package require ?-exact? package ?version?"}}
739 test pkg-3.24-268 {Tcl_PackageCmd procedure, "require" option} tip268 {
740 list [catch {package require -exact a b c} msg] $msg
741 # Exact syntax: -exact name version
742 # name ?requirement...?
743 } {1 {wrong # args: should be "package require ?-exact? package ?requirement...?"}}
744 test pkg-3.25 {Tcl_PackageCmd procedure, "require" option} !tip268 {
745 list [catch {package require -bs a b} msg] $msg
746 } {1 {wrong # args: should be "package require ?-exact? package ?version?"}}
747 test pkg-3.26 {Tcl_PackageCmd procedure, "require" option} {
748 list [catch {package require x a.b} msg] $msg
749 } {1 {expected version number but got "a.b"}}
750 test pkg-3.27 {Tcl_PackageCmd procedure, "require" option} {
751 list [catch {package require -exact x a.b} msg] $msg
752 } {1 {expected version number but got "a.b"}}
753 test pkg-3.28 {Tcl_PackageCmd procedure, "require" option} !tip268 {
754 list [catch {package require -exact x} msg] $msg
755 } {1 {wrong # args: should be "package require ?-exact? package ?version?"}}
756 test pkg-3.28-268 {Tcl_PackageCmd procedure, "require" option} tip268 {
757 list [catch {package require -exact x} msg] $msg
758 } {1 {wrong # args: should be "package require ?-exact? package ?requirement...?"}}
759 test pkg-3.29 {Tcl_PackageCmd procedure, "require" option} !tip268 {
760 list [catch {package require -exact} msg] $msg
761 } {1 {wrong # args: should be "package require ?-exact? package ?version?"}}
762 test pkg-3.29-268 {Tcl_PackageCmd procedure, "require" option} tip268 {
763 list [catch {package require -exact} msg] $msg
764 } {1 {wrong # args: should be "package require ?-exact? package ?requirement...?"}}
765 test pkg-3.30 {Tcl_PackageCmd procedure, "require" option} {
767 package provide t 2.3
768 package require t 2.1
770 test pkg-3.31 {Tcl_PackageCmd procedure, "require" option} {
772 list [catch {package require t} msg] $msg
773 } {1 {can't find package t}}
774 test pkg-3.32 {Tcl_PackageCmd procedure, "require" option} {
776 package ifneeded t 2.3 "error {synthetic error}"
777 list [catch {package require t 2.3} msg] $msg
778 } {1 {synthetic error}}
779 test pkg-3.33 {Tcl_PackageCmd procedure, "unknown" option} {
780 list [catch {package unknown a b} msg] $msg
781 } {1 {wrong # args: should be "package unknown ?command?"}}
782 test pkg-3.34 {Tcl_PackageCmd procedure, "unknown" option} {
783 package unknown "test script"
786 test pkg-3.35 {Tcl_PackageCmd procedure, "unknown" option} {
787 package unknown "test script"
791 test pkg-3.36 {Tcl_PackageCmd procedure, "vcompare" option} {
792 list [catch {package vcompare a} msg] $msg
793 } {1 {wrong # args: should be "package vcompare version1 version2"}}
794 test pkg-3.37 {Tcl_PackageCmd procedure, "vcompare" option} {
795 list [catch {package vcompare a b c} msg] $msg
796 } {1 {wrong # args: should be "package vcompare version1 version2"}}
797 test pkg-3.38 {Tcl_PackageCmd procedure, "vcompare" option} {
798 list [catch {package vcompare x.y 3.4} msg] $msg
799 } {1 {expected version number but got "x.y"}}
800 test pkg-3.39 {Tcl_PackageCmd procedure, "vcompare" option} {
801 list [catch {package vcompare 2.1 a.b} msg] $msg
802 } {1 {expected version number but got "a.b"}}
803 test pkg-3.40 {Tcl_PackageCmd procedure, "vcompare" option} {
806 test pkg-3.41 {Tcl_PackageCmd procedure, "vcompare" option} {
807 package vc 2.2.4 2.2.4
809 test pkg-3.42 {Tcl_PackageCmd procedure, "versions" option} {
810 list [catch {package versions} msg] $msg
811 } {1 {wrong # args: should be "package versions package"}}
812 test pkg-3.43 {Tcl_PackageCmd procedure, "versions" option} {
813 list [catch {package versions a b} msg] $msg
814 } {1 {wrong # args: should be "package versions package"}}
815 test pkg-3.44 {Tcl_PackageCmd procedure, "versions" option} {
819 test pkg-3.45 {Tcl_PackageCmd procedure, "versions" option} {
821 package provide t 2.3
824 test pkg-3.46 {Tcl_PackageCmd procedure, "versions" option} {
826 package ifneeded t 2.3 x
827 package ifneeded t 2.4 y
830 test pkg-3.47 {Tcl_PackageCmd procedure, "vsatisfies" option} !tip268 {
831 list [catch {package vsatisfies a} msg] $msg
832 } {1 {wrong # args: should be "package vsatisfies version1 version2"}}
833 test pkg-3.47-268 {Tcl_PackageCmd procedure, "vsatisfies" option} tip268 {
834 list [catch {package vsatisfies a} msg] $msg
835 } {1 {wrong # args: should be "package vsatisfies version requirement requirement..."}}
836 test pkg-3.48 {Tcl_PackageCmd procedure, "vsatisfies" option} !tip268 {
837 list [catch {package vsatisfies a b c} msg] $msg
838 } {1 {wrong # args: should be "package vsatisfies version1 version2"}}
839 test pkg-3.49 {Tcl_PackageCmd procedure, "vsatisfies" option} {
840 list [catch {package vsatisfies x.y 3.4} msg] $msg
841 } {1 {expected version number but got "x.y"}}
842 test pkg-3.50 {Tcl_PackageCmd procedure, "vsatisfies" option} {
843 list [catch {package vcompare 2.1 a.b} msg] $msg
844 } {1 {expected version number but got "a.b"}}
845 test pkg-3.51 {Tcl_PackageCmd procedure, "vsatisfies" option} {
848 test pkg-3.52 {Tcl_PackageCmd procedure, "vsatisfies" option} {
851 test pkg-3.53 {Tcl_PackageCmd procedure, "versions" option} !tip268 {
852 list [catch {package foo} msg] $msg
853 } {1 {bad option "foo": must be forget, ifneeded, names, present, provide, require, unknown, vcompare, versions, or vsatisfies}}
854 test pkg-3.53-268 {Tcl_PackageCmd procedure, "versions" option} tip268 {
855 list [catch {package foo} msg] $msg
856 } {1 {bad option "foo": must be forget, ifneeded, names, prefer, present, provide, require, unknown, vcompare, versions, or vsatisfies}}
858 test pkg-3.54 {Tcl_PackageCmd procedure, "vsatisfies" option} tip268 {
859 list [catch {package vsatisfies 2.1 2.1-3.2-4.5} msg] $msg
860 } {1 {expected versionMin-versionMax but got "2.1-3.2-4.5"}}
862 test pkg-3.55 {Tcl_PackageCmd procedure, "vsatisfies" option} tip268 {
863 list [catch {package vsatisfies 2.1 3.2-x.y} msg] $msg
864 } {1 {expected version number but got "x.y"}}
866 test pkg-3.56 {Tcl_PackageCmd procedure, "vsatisfies" option} tip268 {
867 list [catch {package vsatisfies 2.1 x.y-3.2} msg] $msg
868 } {1 {expected version number but got "x.y"}}
870 # No tests for FindPackage; can't think up anything detectable
873 test pkg-4.1 {TclFreePackageInfo procedure} {
876 package ifneeded t 2.3 x
877 package ifneeded t 2.4 y
878 package ifneeded x 3.1 z
879 package provide q 4.3
880 package unknown "will this get freed?"
884 test pkg-4.2 {TclFreePackageInfo procedure} -body {
887 package ifneeded t 2.3 x
888 package ifneeded t 2.4 y
889 package ifneeded x 3.1 z
890 package provide q 4.3
896 foo eval package require x 3.1
897 } -returnCodes error -match glob -result *
899 test pkg-5.1 {CheckVersion procedure} {
900 list [catch {package vcompare 1 2.1} msg] $msg
902 test pkg-5.2 {CheckVersion procedure} {
903 list [catch {package vcompare .1 2.1} msg] $msg
904 } {1 {expected version number but got ".1"}}
905 test pkg-5.3 {CheckVersion procedure} {
906 list [catch {package vcompare 111.2a.3 2.1} msg] $msg
907 } {1 {expected version number but got "111.2a.3"}}
908 test pkg-5.4 {CheckVersion procedure} {
909 list [catch {package vcompare 1.2.3. 2.1} msg] $msg
910 } {1 {expected version number but got "1.2.3."}}
911 test pkg-5.5 {CheckVersion procedure} {
912 list [catch {package vcompare 1.2..3 2.1} msg] $msg
913 } {1 {expected version number but got "1.2..3"}}
915 test pkg-6.1 {ComparePkgVersions procedure} {
916 package vcompare 1.23 1.22
918 test pkg-6.2 {ComparePkgVersions procedure} {
919 package vcompare 1.22.1.2.3 1.22.1.2.3
921 test pkg-6.3 {ComparePkgVersions procedure} {
922 package vcompare 1.21 1.22
924 test pkg-6.4 {ComparePkgVersions procedure} {
925 package vcompare 1.21 1.21.2
927 test pkg-6.5 {ComparePkgVersions procedure} {
928 package vcompare 1.21.1 1.21
930 test pkg-6.6 {ComparePkgVersions procedure} {
931 package vsatisfies 1.21.1 1.21
933 test pkg-6.7 {ComparePkgVersions procedure} {
934 package vsatisfies 2.22.3 1.21
936 test pkg-6.8 {ComparePkgVersions procedure} {
937 package vsatisfies 1 1
939 test pkg-6.9 {ComparePkgVersions procedure} {
940 package vsatisfies 2 1
943 test pkg-7.1 {Tcl_PkgPresent procedure, any version} {
945 package provide t 2.4
948 test pkg-7.2 {Tcl_PkgPresent procedure, correct version} {
950 package provide t 2.4
951 package present t 2.4
953 test pkg-7.3 {Tcl_PkgPresent procedure, satisfying version} {
955 package provide t 2.4
956 package present t 2.0
958 test pkg-7.4 {Tcl_PkgPresent procedure, not satisfying version} {
960 package provide t 2.4
961 list [catch {package present t 2.6} msg] $msg
962 } {1 {version conflict for package "t": have 2.4, need 2.6}}
963 test pkg-7.5 {Tcl_PkgPresent procedure, not satisfying version} {
965 package provide t 2.4
966 list [catch {package present t 1.0} msg] $msg
967 } {1 {version conflict for package "t": have 2.4, need 1.0}}
968 test pkg-7.6 {Tcl_PkgPresent procedure, exact version} {
970 package provide t 2.4
971 package present -exact t 2.4
973 test pkg-7.7 {Tcl_PkgPresent procedure, not exact version} {
975 package provide t 2.4
976 list [catch {package present -exact t 2.3} msg] $msg
977 } {1 {version conflict for package "t": have 2.4, need 2.3}}
978 test pkg-7.8 {Tcl_PkgPresent procedure, unknown package} {
980 list [catch {package present t} msg] $msg
981 } {1 {package t is not present}}
982 test pkg-7.9 {Tcl_PkgPresent procedure, unknown package} {
984 list [catch {package present t 2.4} msg] $msg
985 } {1 {package t 2.4 is not present}}
986 test pkg-7.10 {Tcl_PkgPresent procedure, unknown package} {
988 list [catch {package present -exact t 2.4} msg] $msg
989 } {1 {package t 2.4 is not present}}
990 test pkg-7.11 {Tcl_PackageCmd procedure, "present" option} {
991 list [catch {package present} msg] $msg
992 } {1 {wrong # args: should be "package present ?-exact? package ?version?"}}
993 test pkg-7.12 {Tcl_PackageCmd procedure, "present" option} {
994 list [catch {package present a b c} msg] $msg
995 } {1 {wrong # args: should be "package present ?-exact? package ?version?"}}
996 test pkg-7.13 {Tcl_PackageCmd procedure, "present" option} {
997 list [catch {package present -exact a b c} msg] $msg
998 } {1 {wrong # args: should be "package present ?-exact? package ?version?"}}
999 test pkg-7.14 {Tcl_PackageCmd procedure, "present" option} {
1000 list [catch {package present -bs a b} msg] $msg
1001 } {1 {wrong # args: should be "package present ?-exact? package ?version?"}}
1002 test pkg-7.15 {Tcl_PackageCmd procedure, "present" option} {
1003 list [catch {package present x a.b} msg] $msg
1004 } {1 {expected version number but got "a.b"}}
1005 test pkg-7.16 {Tcl_PackageCmd procedure, "present" option} {
1006 list [catch {package present -exact x a.b} msg] $msg
1007 } {1 {expected version number but got "a.b"}}
1008 test pkg-7.17 {Tcl_PackageCmd procedure, "present" option} {
1009 list [catch {package present -exact x} msg] $msg
1010 } {1 {wrong # args: should be "package present ?-exact? package ?version?"}}
1011 test pkg-7.18 {Tcl_PackageCmd procedure, "present" option} {
1012 list [catch {package present -exact} msg] $msg
1013 } {1 {wrong # args: should be "package present ?-exact? package ?version?"}}
1016 # Note: It is correct that the result of the very first test,
1017 # i.e. "5.0 5.0a0" is 1, i.e. that version 5.0a0 satisfies a 5.0
1020 # The requirement "5.0" internally translates first to "5.0-6", and
1021 # then to its final form of "5.0a0-6a0". These translations are
1022 # explicitly specified by the TIP (Search for "padded/extended
1023 # internally with 'a0'"). This was done intentionally for exactly the
1024 # tested case, that an alpha package can satisfy a requirement for the
1025 # regular package. An example would be a package FOO requiring Tcl 8.X
1026 # for its operation. It can be used with Tcl 8.Xa0. Without our
1027 # translation that would not be possible.
1030 foreach {r p vs vc} {
1071 test package-vsatisfies-1.$n {package vsatisfies} tip268 {
1072 package vsatisfies $p $r
1075 test package-vcompare-1.$n {package vcompare} tip268 {
1076 package vcompare $r $p
1083 foreach {required provided satisfied} {
1223 test package-vsatisfies-2.$n "package vsatisfies $provided $required" tip268 {
1224 package vsatisfies $provided $required
1229 test package-vsatisfies-3.0 "package vsatisfies multiple" tip268 {
1231 package vsatisfies 8.4 8.4 7.3
1234 test package-vsatisfies-3.1 "package vsatisfies multiple" tip268 {
1236 package vsatisfies 8.4 7.3 8.4
1239 test package-vsatisfies-3.2 "package vsatisfies multiple" tip268 {
1241 package vsatisfies 8.4.2 8.4 8.4.1
1244 test package-vsatisfies-3.3 "package vsatisfies multiple" tip268 {
1246 package vsatisfies 8.4 7.3 6.1
1250 proc prefer {args} {
1251 set ip [interp create]
1252 lappend res [$ip eval {package prefer}]
1253 foreach mode $args {
1254 lappend res [$ip eval [list package prefer $mode]]
1260 test package-prefer-1.0 {default} tip268 {
1264 test package-prefer-1.1 {default} tip268 {
1265 set ::env(TCL_PKG_PREFER_LATEST) stable ; # value not relevant!
1267 unset ::env(TCL_PKG_PREFER_LATEST)
1271 test package-prefer-2.0 {wrong\#args} tip268 {
1272 catch {package prefer foo bar} msg
1274 } {wrong # args: should be "package prefer ?latest|stable?"}
1276 test package-prefer-2.1 {bogus argument} tip268 {
1277 catch {package prefer foo} msg
1279 } {bad preference "foo": must be latest or stable}
1281 test package-prefer-3.0 {set, keep} tip268 {
1282 package prefer stable
1285 test package-prefer-3.1 {set stable, keep} tip268 {
1289 test package-prefer-3.2 {set latest, change} tip268 {
1293 test package-prefer-3.3 {set latest, keep} tip268 {
1294 prefer latest latest
1295 } {stable latest latest}
1297 test package-prefer-3.4 {set stable, rejected} tip268 {
1298 prefer latest stable
1299 } {stable latest latest}
1304 set auto_path $oldPath
1305 package unknown $oldPkgUnknown
1313 ::tcltest::cleanupTests