os/persistentdata/persistentstorage/sqlite3api/TEST/TCL/tcldistribution/tests/pkg.test
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     1 # Commands covered:  pkg
     2 #
     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.
     6 #
     7 # Copyright (c) 1995-1996 Sun Microsystems, Inc.
     8 # Copyright (c) 1998-1999 by Scriptics Corporation.
     9 #
    10 # See the file "license.terms" for information on usage and redistribution
    11 # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
    12 #
    13 # RCS: @(#) $Id: pkg.test,v 1.9.12.10 2007/02/22 20:25:29 andreas_kupries Exp $
    14 
    15 if {[lsearch [namespace children] ::tcltest] == -1} {
    16     package require tcltest 2
    17     namespace import -force ::tcltest::*
    18 }
    19 
    20 # Do all this in a slave interp to avoid garbaging the
    21 # package list
    22 set i [interp create]
    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::*]
    26 interp eval $i {
    27 
    28 eval package forget [package names]
    29 set oldPkgUnknown [package unknown]
    30 package unknown {}
    31 set oldPath $auto_path
    32 set auto_path ""
    33 
    34 testConstraint tip268  [info exists tcl_platform(tip,268)]
    35 testConstraint !tip268 [expr {![info exists tcl_platform(tip,268)]}]
    36 
    37 test pkg-1.1 {Tcl_PkgProvide procedure} {
    38     package forget t
    39     package provide t 2.3
    40 } {}
    41 test pkg-1.2 {Tcl_PkgProvide procedure} {
    42     package forget t
    43     package provide t 2.3
    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} {
    47     package forget t
    48     package provide t 2.3
    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} {
    52     package forget t
    53     package provide t 2.3
    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} {
    57     package forget t
    58     package provide t 2.3
    59     package provide t 2.3
    60 } {}
    61 
    62 test pkg-1.6 {Tcl_PkgProvide procedure} tip268 {
    63     package forget t
    64     package provide t 2.3a1
    65 } {}
    66 
    67 set n 0
    68 foreach v {
    69     2.3k1 2a3a2 2ab3 2.a4 2.b4 2b.4 2a.4 2ba4 2a4b1
    70     2b4a1 2b3b2
    71 } {
    72     test pkg-1.7.$n {Tcl_PkgProvide procedure} tip268 {
    73 	package forget t
    74 	list [catch {package provide t $v} msg] $msg
    75     } [list 1 "expected version number but got \"$v\""]
    76     incr n
    77 }
    78 
    79 test pkg-2.1 {Tcl_PkgRequire procedure, picking best version} {
    80     package forget t
    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"
    83     }
    84     set x xxx
    85     package require t
    86     set x
    87 } {3.4}
    88 test pkg-2.2 {Tcl_PkgRequire procedure, picking best version} {
    89     package forget t
    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"
    92     }
    93     set x xxx
    94     package require t
    95     set x
    96 } {3.5}
    97 test pkg-2.3 {Tcl_PkgRequire procedure, picking best version} {
    98     package forget t
    99     foreach i {3.5 2.1 2.3} {
   100 	package ifneeded t $i "set x $i; package provide t $i"
   101     }
   102     set x xxx
   103     package require t 2.2
   104     set x
   105 } {2.3}
   106 test pkg-2.4 {Tcl_PkgRequire procedure, picking best version} {
   107     package forget t
   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"
   110     }
   111     set x xxx
   112     package require -exact t 2.3
   113     set x
   114 } {2.3}
   115 test pkg-2.5 {Tcl_PkgRequire procedure, picking best version} {
   116     package forget t
   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"
   119     }
   120     set x xxx
   121     package require t 2.1
   122     set x
   123 } {2.4}
   124 test pkg-2.6 {Tcl_PkgRequire procedure, can't find suitable version} {
   125     package forget t
   126     package unknown {}
   127     foreach i {1.4 3.4 2.3 2.4 2.2} {
   128 	package ifneeded t $i "set x $i"
   129     }
   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} {
   133     package forget t
   134     package unknown {}
   135     foreach i {1.4 3.4 2.3 2.4 2.2} {
   136 	package ifneeded t $i "set x $i"
   137     }
   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 {
   141     package forget t
   142     package unknown {}
   143     foreach i {1.4 3.4 2.3 2.4 2.2} {
   144 	package ifneeded t $i "set x $i"
   145     }
   146     list [catch {package require -exact t 1.3} msg] $msg
   147 
   148 } {1 {can't find package t 1.3}}
   149 test pkg-2.8-268 {Tcl_PkgRequire procedure, can't find suitable version} tip268 {
   150     package forget t
   151     package unknown {}
   152     foreach i {1.4 3.4 2.3 2.4 2.2} {
   153 	package ifneeded t $i "set x $i"
   154     }
   155     list [catch {package require -exact t 1.3} msg] $msg
   156 
   157 } {1 {can't find package t 1.3-1.4}}
   158 test pkg-2.9 {Tcl_PkgRequire procedure, can't find suitable version} {
   159     package forget t
   160     package unknown {}
   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 {
   164     package forget t
   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
   168     while executing
   169 "error "ifneeded test""
   170     ("package ifneeded*" script)
   171     invoked from within
   172 "package require t 2.1"}}
   173 test pkg-2.11 {Tcl_PkgRequire procedure, ifneeded script doesn't provide package} -body {
   174     package forget t
   175     package ifneeded t 2.1 "set x invoked"
   176     set x xxx
   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} {
   180     package forget t
   181     package ifneeded t 1.2 "package forget t; set x 1.2; package provide t 1.2"
   182     set x xxx
   183     package require t 1.2
   184     set x
   185 } {1.2}
   186 test pkg-2.13-!268 {Tcl_PkgRequire procedure, "package unknown" support} !tip268 {
   187     proc pkgUnknown args {
   188 	global x
   189 	set x $args
   190 	package provide [lindex $args 0] [lindex $args 1]
   191     }
   192     package forget t
   193     foreach i {1.4 3.4 2.3 2.4 2.2} {
   194 	package ifneeded t $i "set x $i"
   195     }
   196     package unknown pkgUnknown
   197     set x xxx
   198     package require -exact t 1.5
   199     package unknown {}
   200     set x
   201 } {t 1.5 -exact}
   202 
   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)
   207 	global x
   208 	set x $args
   209 	package provide [lindex $args 0] [lindex [split [lindex $args 1] -] 0]
   210     }
   211     package forget t
   212     foreach i {1.4 3.4 2.3 2.4 2.2} {
   213 	package ifneeded t $i "set x $i"
   214     }
   215     package unknown pkgUnknown
   216     set x xxx
   217     package require -exact t 1.5
   218     package unknown {}
   219     set x
   220 } {t 1.5-1.6}
   221 
   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"
   225     }
   226     package forget t
   227     package unknown pkgUnknown
   228     set x xxx
   229     set result [list [package require t] $x]
   230     package unknown {}
   231     set result
   232 } {1.2 loaded}
   233 test pkg-2.15 {Tcl_PkgRequire procedure, "package unknown" support} !tip268 {
   234     proc pkgUnknown args {
   235 	global x
   236 	set x $args
   237 	package provide [lindex $args 0] 2.0
   238     }
   239     package forget {a b}
   240     package unknown pkgUnknown
   241     set x xxx
   242     package require {a b}
   243     package unknown {}
   244     set x
   245 } {{a b} {}}
   246 test pkg-2.15-268 {Tcl_PkgRequire procedure, "package unknown" support} tip268 {
   247     proc pkgUnknown args {
   248 	global x
   249 	set x $args
   250 	package provide [lindex $args 0] 2.0
   251     }
   252     package forget {a b}
   253     package unknown pkgUnknown
   254     set x xxx
   255     package require {a b}
   256     package unknown {}
   257     set x
   258 } {{a b} 0-}
   259 test pkg-2.16 {Tcl_PkgRequire procedure, "package unknown" error} !tip268 {
   260     proc pkgUnknown args {
   261 	error "testing package unknown"
   262     }
   263     package forget t 
   264     package unknown pkgUnknown
   265     set result [list [catch {package require t} msg] $msg $errorInfo]
   266     package unknown {}
   267     set result
   268 } {1 {testing package unknown} {testing package unknown
   269     while executing
   270 "error "testing package unknown""
   271     (procedure "pkgUnknown" line 2)
   272     invoked from within
   273 "pkgUnknown t {}"
   274     ("package unknown" script)
   275     invoked from within
   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"
   280     }
   281     package forget t 
   282     package unknown pkgUnknown
   283     set result [list [catch {package require t} msg] $msg $errorInfo]
   284     package unknown {}
   285     set result
   286 } {1 {testing package unknown} {testing package unknown
   287     while executing
   288 "error "testing package unknown""
   289     (procedure "pkgUnknown" line 2)
   290     invoked from within
   291 "pkgUnknown t 0-"
   292     ("package unknown" script)
   293     invoked from within
   294 "package require t"}}
   295 test pkg-2.17 {Tcl_PkgRequire procedure, "package unknown" doesn't load package} !tip268 {
   296     proc pkgUnknown args {
   297 	global x
   298 	set x $args
   299     }
   300     package forget t
   301     foreach i {1.4 3.4 2.3 2.4 2.2} {
   302 	package ifneeded t $i "set x $i"
   303     }
   304     package unknown pkgUnknown
   305     set x xxx
   306     set result [list [catch {package require -exact t 1.5} msg] $msg $x]
   307     package unknown {}
   308     set result
   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 {
   312 	global x
   313 	set x $args
   314     }
   315     package forget t
   316     foreach i {1.4 3.4 2.3 2.4 2.2} {
   317 	package ifneeded t $i "set x $i"
   318     }
   319     package unknown pkgUnknown
   320     set x xxx
   321     set result [list [catch {package require -exact t 1.5} msg] $msg $x]
   322     package unknown {}
   323     set result
   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} {
   326     package forget t
   327     package provide t 2.3
   328     package require t
   329 } {2.3}
   330 test pkg-2.19 {Tcl_PkgRequire procedure, version checks} {
   331     package forget t
   332     package provide t 2.3
   333     package require t 2.1
   334 } {2.3}
   335 test pkg-2.20 {Tcl_PkgRequire procedure, version checks} {
   336     package forget t
   337     package provide t 2.3
   338     package require t 2.3
   339 } {2.3}
   340 test pkg-2.21 {Tcl_PkgRequire procedure, version checks} {
   341     package forget t
   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} {
   346     package forget t
   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} {
   351     package forget t
   352     package provide t 2.3
   353     package require -exact t 2.3
   354 } {2.3}
   355 test pkg-2.24 {Tcl_PkgRequire procedure, version checks} !tip268 {
   356     package forget t
   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 {
   361     package forget t
   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 {
   366     package forget t
   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)
   371     invoked from within
   372 "package require t 2.1"}} -constraints knownBug
   373 test pkg-2.26 {Tcl_PkgRequire procedure, error in ifneeded script} -body {
   374     package forget t
   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)
   379     invoked from within
   380 "foreach x 1 {error "ifneeded test" EI}"
   381     ("package ifneeded*" script)
   382     invoked from within
   383 "package require t 2.1"}}
   384 test pkg-2.27 {Tcl_PkgRequire: circular dependency} -setup {
   385     package forget foo
   386 } -body {
   387     package ifneeded foo 1 {package require foo 1}
   388     package require foo 1
   389 } -cleanup {
   390     package forget foo
   391 } -returnCodes error -match glob -result {circular package dependency:*}
   392 test pkg-2.28 {Tcl_PkgRequire: circular dependency} -setup {
   393     package forget foo
   394 } -body {
   395     package ifneeded foo 1 {package require foo 2}
   396     package require foo 1
   397 } -cleanup {
   398     package forget foo
   399 } -returnCodes error -match glob -result {circular package dependency:*}
   400 test pkg-2.29 {Tcl_PkgRequire: circular dependency} -setup {
   401     package forget foo
   402     package forget bar
   403 } -body {
   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
   407 } -cleanup {
   408     package forget foo
   409     package forget bar
   410 } -returnCodes error -match glob -result {circular package dependency:*}
   411 test pkg-2.30 {Tcl_PkgRequire: circular dependency} -setup {
   412     package forget foo
   413     package forget bar
   414 } -body {
   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
   419 } -cleanup {
   420     package forget foo
   421     package forget bar
   422 } -returnCodes error -match glob -result {circular package dependency:*}
   423 test pkg-2.31 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
   424     package forget foo
   425 } -body {
   426     package ifneeded foo 1 {package provide foo 1; error foo}
   427     package require foo 1
   428 } -cleanup {
   429     package forget foo
   430 } -returnCodes error -match glob -result foo
   431 test pkg-2.32 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
   432     package forget foo
   433 } -body {
   434     package ifneeded foo 1 {package provide foo 1; error foo}
   435     catch {package require foo 1}
   436     package provide foo
   437 } -cleanup {
   438     package forget foo
   439 } -result {}
   440 test pkg-2.33 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
   441     package forget foo
   442 } -body {
   443     package ifneeded foo 1 {package provide foo 2}
   444     package require foo 1
   445 } -cleanup {
   446     package forget foo
   447 } -returnCodes error -match glob -result {attempt to provide package * failed:*}
   448 test pkg-2.34 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
   449     package forget foo
   450 } -body {
   451     package ifneeded foo 1 {package provide foo 1.1}
   452     package require foo 1
   453 } -cleanup {
   454     package forget foo
   455 } -result 1.1
   456 test pkg-2.34.1 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
   457     package forget foo
   458 } -body {
   459     package ifneeded foo 1.1 {package provide foo 1}
   460     package require foo 1
   461 } -cleanup {
   462     package forget foo
   463 } -result 1
   464 test pkg-2.34.2 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
   465     package forget foo
   466 } -body {
   467     package ifneeded foo 1.1 {package provide foo 1}
   468     package require foo 1.1
   469 } -cleanup {
   470     package forget foo
   471 } -returnCodes error -match glob -result {attempt to provide package * failed:*}
   472 test pkg-2.35 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
   473     package forget foo
   474 } -body {
   475     package ifneeded foo 1 {}
   476     package require foo 1
   477 } -cleanup {
   478     package forget foo
   479 } -returnCodes error -match glob -result {attempt to provide package * failed:*}
   480 test pkg-2.35.1 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
   481     package forget foo
   482 } -body {
   483     package ifneeded foo 1 {break}
   484     package require foo 1
   485 } -cleanup {
   486     package forget foo
   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 {
   490     package forget foo
   491 } -body {
   492     package ifneeded foo 1 {continue}
   493     package require foo 1
   494 } -cleanup {
   495     package forget foo
   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 {
   499     package forget foo
   500 } -body {
   501     package ifneeded foo 1 {return}
   502     package require foo 1
   503 } -cleanup {
   504     package forget foo
   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 {
   508     package forget foo
   509 } -body {
   510     package ifneeded foo 1 {proc x {} {return -code 10}; x}
   511     package require foo 1
   512 } -cleanup {
   513     rename x {}
   514     package forget foo
   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 {
   518     package forget foo
   519     set saveUnknown [package unknown]
   520     package unknown {package provide foo 2 ;#}
   521 } -body {
   522     package require foo 1
   523 } -cleanup {
   524     package forget foo
   525     package unknown $saveUnknown
   526 } -returnCodes error -match glob -result *
   527 test pkg-2.40 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
   528     package forget foo
   529     set saveUnknown [package unknown]
   530     package unknown {break ;#}
   531 } -body {
   532     package require foo 1
   533 } -cleanup {
   534     package forget foo
   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 {
   538     package forget foo
   539     set saveUnknown [package unknown]
   540     package unknown {continue ;#}
   541 } -body {
   542     package require foo 1
   543 } -cleanup {
   544     package forget foo
   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 {
   548     package forget foo
   549     set saveUnknown [package unknown]
   550     package unknown {return ;#}
   551 } -body {
   552     package require foo 1
   553 } -cleanup {
   554     package forget foo
   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 {
   558     package forget foo
   559     set saveUnknown [package unknown]
   560     proc x args {return -code 10}
   561     package unknown x
   562 } -body {
   563     package require foo 1
   564 } -cleanup {
   565     rename x {}
   566     package forget foo
   567     package unknown $saveUnknown
   568 } -returnCodes error -match glob -result {bad return code:*}
   569 
   570 
   571 
   572 test pkg-2.50 {Tcl_PkgRequire procedure, picking best stable version} tip268 {
   573     package forget t
   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"
   576     }
   577     set x xxx
   578     package require t
   579     set x
   580 } {3.4}
   581 
   582 test pkg-2.51 {Tcl_PkgRequire procedure, picking best stable version} tip268 {
   583     package forget t
   584     foreach i {1.2b1 1.2 1.3a2 1.3} {
   585 	package ifneeded t $i "set x $i; package provide t $i"
   586     }
   587     set x xxx
   588     package require t
   589     set x
   590 } {1.3}
   591 
   592 test pkg-2.52 {Tcl_PkgRequire procedure, picking best stable version} tip268 {
   593     package forget t
   594     foreach i {1.2b1 1.2 1.3 1.3a2} {
   595 	package ifneeded t $i "set x $i; package provide t $i"
   596     }
   597     set x xxx
   598     package require t
   599     set x
   600 } {1.3}
   601 
   602 
   603 
   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] {
   609 	package forget $i
   610     }
   611     package names
   612 } {}
   613 test pkg-3.3 {Tcl_PackageCmd procedure, "forget" option} {
   614     foreach i [package names] {
   615 	package forget $i
   616     }
   617     package forget foo
   618 } {}
   619 test pkg-3.4 {Tcl_PackageCmd procedure, "forget" option} {
   620     foreach i [package names] {
   621 	package forget $i
   622     }
   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}
   626     set result {}
   627     lappend result [lsort [package names]] [package versions t]
   628     package forget 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] {
   633 	package forget $i
   634     }
   635     package ifneeded a 1.1 {first script}
   636     package ifneeded b 2.3 {second script}
   637     package ifneeded c 1.4 {third script}
   638     package forget
   639     set result [list [lsort [package names]]]
   640     package forget a c
   641     lappend result [lsort [package names]]
   642 } {{a b c} b}
   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]
   648     package forget a
   649     set x
   650 } {}
   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] {
   662 	package forget $i
   663     }
   664     list [package ifneeded foo 1.1] [package names]
   665 } {{} {}}
   666 test pkg-3.10 {Tcl_PackageCmd procedure, "ifneeded" option} {
   667     package forget t
   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} {
   672     package forget t
   673     package ifneeded t 1.4 "script for t 1.4"
   674     list [package ifneeded t 1.5] [package names] [package versions t]
   675 } {{} t 1.4}
   676 test pkg-3.12 {Tcl_PackageCmd procedure, "ifneeded" option} {
   677     package forget t
   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} {
   683     package forget t
   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] {
   694 	package forget $i
   695     }
   696     package names
   697 } {}
   698 test pkg-3.16 {Tcl_PackageCmd procedure, "names" option} {
   699     foreach i [package names] {
   700 	package forget $i
   701     }
   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]
   707 } {x y}
   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} {
   715     package forget t
   716     package provide t
   717 } {}
   718 test pkg-3.20 {Tcl_PackageCmd procedure, "provide" option} {
   719     package forget t
   720     package provide t 2.3
   721     package provide t
   722 } {2.3}
   723 test pkg-3.21 {Tcl_PackageCmd procedure, "provide" option} {
   724     package forget t
   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} {
   766     package forget t
   767     package provide t 2.3
   768     package require t 2.1
   769 } {2.3}
   770 test pkg-3.31 {Tcl_PackageCmd procedure, "require" option} {
   771     package forget t
   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} {
   775     package forget t
   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"
   784     package unknown
   785 } {test script}
   786 test pkg-3.35 {Tcl_PackageCmd procedure, "unknown" option} {
   787     package unknown "test script"
   788     package unknown {}
   789     package unknown
   790 } {}
   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} {
   804     package vc 2.1 2.3
   805 } {-1}
   806 test pkg-3.41 {Tcl_PackageCmd procedure, "vcompare" option} {
   807     package vc 2.2.4 2.2.4
   808 } {0}
   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} {
   816     package forget t
   817     package versions t
   818 } {}
   819 test pkg-3.45 {Tcl_PackageCmd procedure, "versions" option} {
   820     package forget t
   821     package provide t 2.3
   822     package versions t
   823 } {}
   824 test pkg-3.46 {Tcl_PackageCmd procedure, "versions" option} {
   825     package forget t
   826     package ifneeded t 2.3 x
   827     package ifneeded t 2.4 y
   828     package versions t
   829 } {2.3 2.4}
   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} {
   846     package vs 2.3 2.1
   847 } {1}
   848 test pkg-3.52 {Tcl_PackageCmd procedure, "vsatisfies" option} {
   849     package vs 2.3 1.2
   850 } {0}
   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}}
   857 
   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"}}
   861 
   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"}}
   865 
   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"}}
   869 
   870 # No tests for FindPackage;  can't think up anything detectable
   871 # errors.
   872 
   873 test pkg-4.1 {TclFreePackageInfo procedure} {
   874     interp create foo
   875     foo eval {
   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?"
   881     }
   882     interp delete foo
   883 } {}
   884 test pkg-4.2 {TclFreePackageInfo procedure} -body {
   885     interp create foo
   886     foo eval {
   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
   891     }
   892     foo alias z kill
   893     proc kill {} {
   894 	interp delete foo
   895     }
   896     foo eval package require x 3.1
   897 } -returnCodes error -match glob -result *
   898 
   899 test pkg-5.1 {CheckVersion procedure} {
   900     list [catch {package vcompare 1 2.1} msg] $msg
   901 } {0 -1}
   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"}}
   914 
   915 test pkg-6.1 {ComparePkgVersions procedure} {
   916     package vcompare 1.23 1.22
   917 } {1}
   918 test pkg-6.2 {ComparePkgVersions procedure} {
   919     package vcompare 1.22.1.2.3 1.22.1.2.3
   920 } {0}
   921 test pkg-6.3 {ComparePkgVersions procedure} {
   922     package vcompare 1.21 1.22
   923 } {-1}
   924 test pkg-6.4 {ComparePkgVersions procedure} {
   925     package vcompare 1.21 1.21.2
   926 } {-1}
   927 test pkg-6.5 {ComparePkgVersions procedure} {
   928     package vcompare 1.21.1 1.21
   929 } {1}
   930 test pkg-6.6 {ComparePkgVersions procedure} {
   931     package vsatisfies 1.21.1 1.21
   932 } {1}
   933 test pkg-6.7 {ComparePkgVersions procedure} {
   934     package vsatisfies 2.22.3 1.21
   935 } {0}
   936 test pkg-6.8 {ComparePkgVersions procedure} {
   937     package vsatisfies 1 1
   938 } {1}
   939 test pkg-6.9 {ComparePkgVersions procedure} {
   940     package vsatisfies 2 1
   941 } {0}
   942 
   943 test pkg-7.1 {Tcl_PkgPresent procedure, any version} {
   944     package forget t
   945     package provide t 2.4
   946     package present t
   947 } {2.4}
   948 test pkg-7.2 {Tcl_PkgPresent procedure, correct version} {
   949     package forget t
   950     package provide t 2.4
   951     package present t 2.4
   952 } {2.4}
   953 test pkg-7.3 {Tcl_PkgPresent procedure, satisfying version} {
   954     package forget t
   955     package provide t 2.4
   956     package present t 2.0
   957 } {2.4}
   958 test pkg-7.4 {Tcl_PkgPresent procedure, not satisfying version} {
   959     package forget t
   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} {
   964     package forget t
   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} {
   969     package forget t
   970     package provide t 2.4
   971     package present -exact t 2.4
   972 } {2.4}
   973 test pkg-7.7 {Tcl_PkgPresent procedure, not exact version} {
   974     package forget t
   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} {
   979     package forget t
   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} {
   983     package forget t
   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} {
   987     package forget t
   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?"}}
  1014 
  1015 
  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
  1018 # requirement.
  1019 
  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.
  1028 
  1029 set n 0
  1030 foreach {r p vs vc} {
  1031     5.0 5.0a0 1 1
  1032     5.0a0 5.0 1 -1
  1033 
  1034     8.5a0    8.5a5    1          -1
  1035     8.5a0    8.5b1    1          -1
  1036     8.5a0    8.5.1    1          -1
  1037     8.5a0    8.6a0    1          -1
  1038     8.5a0    8.6b0    1          -1
  1039     8.5a0    8.6.0    1          -1
  1040     8.5a6    8.5a5    0          1
  1041     8.5a6    8.5b1    1          -1
  1042     8.5a6    8.5.1    1          -1
  1043     8.5a6    8.6a0    1          -1
  1044     8.5a6    8.6b0    1          -1
  1045     8.5a6    8.6.0    1          -1
  1046     8.5b0    8.5a5    0          1
  1047     8.5b0    8.5b1    1          -1
  1048     8.5b0    8.5.1    1          -1
  1049     8.5b0    8.6a0    1          -1
  1050     8.5b0    8.6b0    1          -1
  1051     8.5b0    8.6.0    1          -1
  1052     8.5b2    8.5a5    0          1
  1053     8.5b2    8.5b1    0          1
  1054     8.5b2    8.5.1    1          -1
  1055     8.5b2    8.6a0    1          -1
  1056     8.5b2    8.6b0    1          -1
  1057     8.5b2    8.6.0    1          -1
  1058     8.5      8.5a5    1          1
  1059     8.5      8.5b1    1          1
  1060     8.5      8.5.1    1          -1
  1061     8.5      8.6a0    1          -1
  1062     8.5      8.6b0    1          -1
  1063     8.5      8.6.0    1          -1
  1064     8.5.0    8.5a5    0          1
  1065     8.5.0    8.5b1    0          1
  1066     8.5.0    8.5.1    1          -1
  1067     8.5.0    8.6a0    1          -1
  1068     8.5.0    8.6b0    1          -1
  1069     8.5.0    8.6.0    1          -1
  1070 } {
  1071     test package-vsatisfies-1.$n {package vsatisfies} tip268 {
  1072 	package vsatisfies $p $r
  1073     } $vs
  1074 
  1075     test package-vcompare-1.$n {package vcompare} tip268 {
  1076 	package vcompare $r $p
  1077     } $vc
  1078 
  1079     incr n
  1080 }
  1081 
  1082 set n 0
  1083 foreach {required provided satisfied} {
  1084     8.5a0-   8.5a5    1
  1085     8.5a0-   8.5b1    1
  1086     8.5a0-   8.5.1    1
  1087     8.5a0-   8.6a0    1
  1088     8.5a0-   8.6b0    1
  1089     8.5a0-   8.6.0    1
  1090     8.5a6-   8.5a5    0
  1091     8.5a6-   8.5b1    1
  1092     8.5a6-   8.5.1    1
  1093     8.5a6-   8.6a0    1
  1094     8.5a6-   8.6b0    1
  1095     8.5a6-   8.6.0    1
  1096     8.5b0-   8.5a5    0
  1097     8.5b0-   8.5b1    1
  1098     8.5b0-   8.5.1    1
  1099     8.5b0-   8.6a0    1
  1100     8.5b0-   8.6b0    1
  1101     8.5b0-   8.6.0    1
  1102     8.5b2-   8.5a5    0
  1103     8.5b2-   8.5b1    0
  1104     8.5b2-   8.5.1    1
  1105     8.5b2-   8.6a0    1
  1106     8.5b2-   8.6b0    1
  1107     8.5b2-   8.6.0    1
  1108     8.5-     8.5a5    1
  1109     8.5-     8.5b1    1
  1110     8.5-     8.5.1    1
  1111     8.5-     8.6a0    1
  1112     8.5-     8.6b0    1
  1113     8.5-     8.6.0    1
  1114     8.5.0-   8.5a5    0
  1115     8.5.0-   8.5b1    0
  1116     8.5.0-   8.5.1    1
  1117     8.5.0-   8.6a0    1
  1118     8.5.0-   8.6b0    1
  1119     8.5.0-   8.6.0    1
  1120     8.5a0-7  8.5a5    0
  1121     8.5a0-7  8.5b1    0
  1122     8.5a0-7  8.5.1    0
  1123     8.5a0-7  8.6a0    0
  1124     8.5a0-7  8.6b0    0
  1125     8.5a0-7  8.6.0    0
  1126     8.5a6-7  8.5a5    0
  1127     8.5a6-7  8.5b1    0
  1128     8.5a6-7  8.5.1    0
  1129     8.5a6-7  8.6a0    0
  1130     8.5a6-7  8.6b0    0
  1131     8.5a6-7  8.6.0    0
  1132     8.5b0-7  8.5a5    0
  1133     8.5b0-7  8.5b1    0
  1134     8.5b0-7  8.5.1    0
  1135     8.5b0-7  8.6a0    0
  1136     8.5b0-7  8.6b0    0
  1137     8.5b0-7  8.6.0    0
  1138     8.5b2-7  8.5a5    0
  1139     8.5b2-7  8.5b1    0
  1140     8.5b2-7  8.5.1    0
  1141     8.5b2-7  8.6a0    0
  1142     8.5b2-7  8.6b0    0
  1143     8.5b2-7  8.6.0    0
  1144     8.5-7    8.5a5    0
  1145     8.5-7    8.5b1    0
  1146     8.5-7    8.5.1    0
  1147     8.5-7    8.6a0    0
  1148     8.5-7    8.6b0    0
  1149     8.5-7    8.6.0    0
  1150     8.5.0-7  8.5a5    0
  1151     8.5.0-7  8.5b1    0
  1152     8.5.0-7  8.5.1    0
  1153     8.5.0-7  8.6a0    0
  1154     8.5.0-7  8.6b0    0
  1155     8.5.0-7  8.6.0    0
  1156     8.5a0-8.6.1 8.5a5    1
  1157     8.5a0-8.6.1 8.5b1    1
  1158     8.5a0-8.6.1 8.5.1    1
  1159     8.5a0-8.6.1 8.6a0    1
  1160     8.5a0-8.6.1 8.6b0    1
  1161     8.5a0-8.6.1 8.6.0    1
  1162     8.5a6-8.6.1 8.5a5    0
  1163     8.5a6-8.6.1 8.5b1    1
  1164     8.5a6-8.6.1 8.5.1    1
  1165     8.5a6-8.6.1 8.6a0    1
  1166     8.5a6-8.6.1 8.6b0    1
  1167     8.5a6-8.6.1 8.6.0    1
  1168     8.5b0-8.6.1 8.5a5    0
  1169     8.5b0-8.6.1 8.5b1    1
  1170     8.5b0-8.6.1 8.5.1    1
  1171     8.5b0-8.6.1 8.6a0    1
  1172     8.5b0-8.6.1 8.6b0    1
  1173     8.5b0-8.6.1 8.6.0    1
  1174     8.5b2-8.6.1 8.5a5    0
  1175     8.5b2-8.6.1 8.5b1    0
  1176     8.5b2-8.6.1 8.5.1    1
  1177     8.5b2-8.6.1 8.6a0    1
  1178     8.5b2-8.6.1 8.6b0    1
  1179     8.5b2-8.6.1 8.6.0    1
  1180     8.5-8.6.1 8.5a5    1
  1181     8.5-8.6.1 8.5b1    1
  1182     8.5-8.6.1 8.5.1    1
  1183     8.5-8.6.1 8.6a0    1
  1184     8.5-8.6.1 8.6b0    1
  1185     8.5-8.6.1 8.6.0    1
  1186     8.5.0-8.6.1 8.5a5    0
  1187     8.5.0-8.6.1 8.5b1    0
  1188     8.5.0-8.6.1 8.5.1    1
  1189     8.5.0-8.6.1 8.6a0    1
  1190     8.5.0-8.6.1 8.6b0    1
  1191     8.5.0-8.6.1 8.6.0    1
  1192     8.5a0-8.5a0 8.5a0    1
  1193     8.5a0-8.5a0 8.5b1    0
  1194     8.5a0-8.5a0 8.4      0
  1195     8.5b0-8.5b0 8.5a5    0
  1196     8.5b0-8.5b0 8.5b0    1
  1197     8.5b0-8.5b0 8.5.1    0
  1198     8.5-8.5  8.5a5    0
  1199     8.5-8.5  8.5b1    0
  1200     8.5-8.5  8.5      1
  1201     8.5-8.5  8.5.1    0
  1202     8.5.0-8.5.0 8.5a5    0
  1203     8.5.0-8.5.0 8.5b1    0
  1204     8.5.0-8.5.0 8.5.0    1
  1205     8.5.0-8.5.0 8.5.1    0
  1206     8.5.0-8.5.0 8.6a0    0
  1207     8.5.0-8.5.0 8.6b0    0
  1208     8.5.0-8.5.0 8.6.0    0
  1209     8.2      9        0
  1210     8.2-     9        1
  1211     8.2-8.5  9        0
  1212     8.2-9.1  9        1
  1213 
  1214     8.5-8.5     8.5b1 0
  1215     8.5a0-8.5   8.5b1 0
  1216     8.5a0-8.5.1 8.5b1 1
  1217 
  1218     8.5-8.5     8.5 1
  1219     8.5.0-8.5.0 8.5 1
  1220     8.5a0-8.5.0 8.5 0
  1221 
  1222 } {
  1223     test package-vsatisfies-2.$n "package vsatisfies $provided $required" tip268 {
  1224 	package vsatisfies $provided $required
  1225     } $satisfied
  1226     incr n
  1227 }
  1228 
  1229 test package-vsatisfies-3.0 "package vsatisfies multiple" tip268 {
  1230     #                      yes no
  1231     package vsatisfies 8.4 8.4 7.3
  1232 } 1
  1233 
  1234 test package-vsatisfies-3.1 "package vsatisfies multiple" tip268 {
  1235     #                      no  yes
  1236     package vsatisfies 8.4 7.3 8.4
  1237 } 1
  1238 
  1239 test package-vsatisfies-3.2 "package vsatisfies multiple" tip268 {
  1240     #                        yes  yes
  1241     package vsatisfies 8.4.2 8.4  8.4.1
  1242 } 1
  1243 
  1244 test package-vsatisfies-3.3 "package vsatisfies multiple" tip268 {
  1245     #                      no  no
  1246     package vsatisfies 8.4 7.3 6.1
  1247 } 0
  1248 
  1249 
  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]]
  1255     }
  1256     interp delete $ip
  1257     return $res
  1258 }
  1259 
  1260 test package-prefer-1.0 {default} tip268 {
  1261     prefer
  1262 } stable
  1263 
  1264 test package-prefer-1.1 {default} tip268 {
  1265     set   ::env(TCL_PKG_PREFER_LATEST) stable ; # value not relevant!
  1266     set res [prefer]
  1267     unset ::env(TCL_PKG_PREFER_LATEST)
  1268     set res
  1269 } latest
  1270 
  1271 test package-prefer-2.0 {wrong\#args} tip268 {
  1272     catch {package prefer foo bar} msg
  1273     set msg
  1274 } {wrong # args: should be "package prefer ?latest|stable?"}
  1275 
  1276 test package-prefer-2.1 {bogus argument} tip268 {
  1277     catch {package prefer foo} msg
  1278     set msg
  1279 } {bad preference "foo": must be latest or stable}
  1280 
  1281 test package-prefer-3.0 {set, keep} tip268 {
  1282     package prefer stable
  1283 } stable
  1284 
  1285 test package-prefer-3.1 {set stable, keep} tip268 {
  1286     prefer stable
  1287 } {stable stable}
  1288 
  1289 test package-prefer-3.2 {set latest, change} tip268 {
  1290     prefer latest
  1291 } {stable latest}
  1292 
  1293 test package-prefer-3.3 {set latest, keep} tip268 {
  1294     prefer  latest latest
  1295 } {stable latest latest}
  1296 
  1297 test package-prefer-3.4 {set stable, rejected} tip268 {
  1298     prefer latest stable
  1299 } {stable latest latest}
  1300 
  1301 rename prefer {}
  1302 
  1303 
  1304 set auto_path $oldPath
  1305 package unknown $oldPkgUnknown
  1306 concat
  1307 
  1308 cleanupTests
  1309 }
  1310 
  1311 # cleanup
  1312 interp delete $i
  1313 ::tcltest::cleanupTests
  1314 return