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.
sl@0
     1
# Commands covered:  pkg
sl@0
     2
#
sl@0
     3
# This file contains a collection of tests for one or more of the Tcl
sl@0
     4
# built-in commands.  Sourcing this file into Tcl runs the tests and
sl@0
     5
# generates output for errors.  No output means no errors were found.
sl@0
     6
#
sl@0
     7
# Copyright (c) 1995-1996 Sun Microsystems, Inc.
sl@0
     8
# Copyright (c) 1998-1999 by Scriptics Corporation.
sl@0
     9
#
sl@0
    10
# See the file "license.terms" for information on usage and redistribution
sl@0
    11
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
sl@0
    12
#
sl@0
    13
# RCS: @(#) $Id: pkg.test,v 1.9.12.10 2007/02/22 20:25:29 andreas_kupries Exp $
sl@0
    14
sl@0
    15
if {[lsearch [namespace children] ::tcltest] == -1} {
sl@0
    16
    package require tcltest 2
sl@0
    17
    namespace import -force ::tcltest::*
sl@0
    18
}
sl@0
    19
sl@0
    20
# Do all this in a slave interp to avoid garbaging the
sl@0
    21
# package list
sl@0
    22
set i [interp create]
sl@0
    23
interp eval $i [list set argv $argv]
sl@0
    24
interp eval $i [list package require tcltest 2]
sl@0
    25
interp eval $i [list namespace import -force ::tcltest::*]
sl@0
    26
interp eval $i {
sl@0
    27
sl@0
    28
eval package forget [package names]
sl@0
    29
set oldPkgUnknown [package unknown]
sl@0
    30
package unknown {}
sl@0
    31
set oldPath $auto_path
sl@0
    32
set auto_path ""
sl@0
    33
sl@0
    34
testConstraint tip268  [info exists tcl_platform(tip,268)]
sl@0
    35
testConstraint !tip268 [expr {![info exists tcl_platform(tip,268)]}]
sl@0
    36
sl@0
    37
test pkg-1.1 {Tcl_PkgProvide procedure} {
sl@0
    38
    package forget t
sl@0
    39
    package provide t 2.3
sl@0
    40
} {}
sl@0
    41
test pkg-1.2 {Tcl_PkgProvide procedure} {
sl@0
    42
    package forget t
sl@0
    43
    package provide t 2.3
sl@0
    44
    list [catch {package provide t 2.2} msg] $msg
sl@0
    45
} {1 {conflicting versions provided for package "t": 2.3, then 2.2}}
sl@0
    46
test pkg-1.3 {Tcl_PkgProvide procedure} {
sl@0
    47
    package forget t
sl@0
    48
    package provide t 2.3
sl@0
    49
    list [catch {package provide t 2.4} msg] $msg
sl@0
    50
} {1 {conflicting versions provided for package "t": 2.3, then 2.4}}
sl@0
    51
test pkg-1.4 {Tcl_PkgProvide procedure} {
sl@0
    52
    package forget t
sl@0
    53
    package provide t 2.3
sl@0
    54
    list [catch {package provide t 3.3} msg] $msg
sl@0
    55
} {1 {conflicting versions provided for package "t": 2.3, then 3.3}}
sl@0
    56
test pkg-1.5 {Tcl_PkgProvide procedure} {
sl@0
    57
    package forget t
sl@0
    58
    package provide t 2.3
sl@0
    59
    package provide t 2.3
sl@0
    60
} {}
sl@0
    61
sl@0
    62
test pkg-1.6 {Tcl_PkgProvide procedure} tip268 {
sl@0
    63
    package forget t
sl@0
    64
    package provide t 2.3a1
sl@0
    65
} {}
sl@0
    66
sl@0
    67
set n 0
sl@0
    68
foreach v {
sl@0
    69
    2.3k1 2a3a2 2ab3 2.a4 2.b4 2b.4 2a.4 2ba4 2a4b1
sl@0
    70
    2b4a1 2b3b2
sl@0
    71
} {
sl@0
    72
    test pkg-1.7.$n {Tcl_PkgProvide procedure} tip268 {
sl@0
    73
	package forget t
sl@0
    74
	list [catch {package provide t $v} msg] $msg
sl@0
    75
    } [list 1 "expected version number but got \"$v\""]
sl@0
    76
    incr n
sl@0
    77
}
sl@0
    78
sl@0
    79
test pkg-2.1 {Tcl_PkgRequire procedure, picking best version} {
sl@0
    80
    package forget t
sl@0
    81
    foreach i {1.4 3.4 2.3 2.4 2.2} {
sl@0
    82
	package ifneeded t $i "set x $i; package provide t $i"
sl@0
    83
    }
sl@0
    84
    set x xxx
sl@0
    85
    package require t
sl@0
    86
    set x
sl@0
    87
} {3.4}
sl@0
    88
test pkg-2.2 {Tcl_PkgRequire procedure, picking best version} {
sl@0
    89
    package forget t
sl@0
    90
    foreach i {1.4 3.4 2.3 2.4 2.2 3.5 3.2} {
sl@0
    91
	package ifneeded t $i "set x $i; package provide t $i"
sl@0
    92
    }
sl@0
    93
    set x xxx
sl@0
    94
    package require t
sl@0
    95
    set x
sl@0
    96
} {3.5}
sl@0
    97
test pkg-2.3 {Tcl_PkgRequire procedure, picking best version} {
sl@0
    98
    package forget t
sl@0
    99
    foreach i {3.5 2.1 2.3} {
sl@0
   100
	package ifneeded t $i "set x $i; package provide t $i"
sl@0
   101
    }
sl@0
   102
    set x xxx
sl@0
   103
    package require t 2.2
sl@0
   104
    set x
sl@0
   105
} {2.3}
sl@0
   106
test pkg-2.4 {Tcl_PkgRequire procedure, picking best version} {
sl@0
   107
    package forget t
sl@0
   108
    foreach i {1.4 3.4 2.3 2.4 2.2} {
sl@0
   109
	package ifneeded t $i "set x $i; package provide t $i"
sl@0
   110
    }
sl@0
   111
    set x xxx
sl@0
   112
    package require -exact t 2.3
sl@0
   113
    set x
sl@0
   114
} {2.3}
sl@0
   115
test pkg-2.5 {Tcl_PkgRequire procedure, picking best version} {
sl@0
   116
    package forget t
sl@0
   117
    foreach i {1.4 3.4 2.3 2.4 2.2} {
sl@0
   118
	package ifneeded t $i "set x $i; package provide t $i"
sl@0
   119
    }
sl@0
   120
    set x xxx
sl@0
   121
    package require t 2.1
sl@0
   122
    set x
sl@0
   123
} {2.4}
sl@0
   124
test pkg-2.6 {Tcl_PkgRequire procedure, can't find suitable version} {
sl@0
   125
    package forget t
sl@0
   126
    package unknown {}
sl@0
   127
    foreach i {1.4 3.4 2.3 2.4 2.2} {
sl@0
   128
	package ifneeded t $i "set x $i"
sl@0
   129
    }
sl@0
   130
    list [catch {package require t 2.5} msg] $msg
sl@0
   131
} {1 {can't find package t 2.5}}
sl@0
   132
test pkg-2.7 {Tcl_PkgRequire procedure, can't find suitable version} {
sl@0
   133
    package forget t
sl@0
   134
    package unknown {}
sl@0
   135
    foreach i {1.4 3.4 2.3 2.4 2.2} {
sl@0
   136
	package ifneeded t $i "set x $i"
sl@0
   137
    }
sl@0
   138
    list [catch {package require t 4.1} msg] $msg
sl@0
   139
} {1 {can't find package t 4.1}}
sl@0
   140
test pkg-2.8 {Tcl_PkgRequire procedure, can't find suitable version} !tip268 {
sl@0
   141
    package forget t
sl@0
   142
    package unknown {}
sl@0
   143
    foreach i {1.4 3.4 2.3 2.4 2.2} {
sl@0
   144
	package ifneeded t $i "set x $i"
sl@0
   145
    }
sl@0
   146
    list [catch {package require -exact t 1.3} msg] $msg
sl@0
   147
sl@0
   148
} {1 {can't find package t 1.3}}
sl@0
   149
test pkg-2.8-268 {Tcl_PkgRequire procedure, can't find suitable version} tip268 {
sl@0
   150
    package forget t
sl@0
   151
    package unknown {}
sl@0
   152
    foreach i {1.4 3.4 2.3 2.4 2.2} {
sl@0
   153
	package ifneeded t $i "set x $i"
sl@0
   154
    }
sl@0
   155
    list [catch {package require -exact t 1.3} msg] $msg
sl@0
   156
sl@0
   157
} {1 {can't find package t 1.3-1.4}}
sl@0
   158
test pkg-2.9 {Tcl_PkgRequire procedure, can't find suitable version} {
sl@0
   159
    package forget t
sl@0
   160
    package unknown {}
sl@0
   161
    list [catch {package require t} msg] $msg
sl@0
   162
} {1 {can't find package t}}
sl@0
   163
test pkg-2.10 {Tcl_PkgRequire procedure, error in ifneeded script} -body {
sl@0
   164
    package forget t
sl@0
   165
    package ifneeded t 2.1 {package provide t 2.1; error "ifneeded test"}
sl@0
   166
    list [catch {package require t 2.1} msg] $msg $errorInfo
sl@0
   167
} -match glob -result {1 {ifneeded test} {ifneeded test
sl@0
   168
    while executing
sl@0
   169
"error "ifneeded test""
sl@0
   170
    ("package ifneeded*" script)
sl@0
   171
    invoked from within
sl@0
   172
"package require t 2.1"}}
sl@0
   173
test pkg-2.11 {Tcl_PkgRequire procedure, ifneeded script doesn't provide package} -body {
sl@0
   174
    package forget t
sl@0
   175
    package ifneeded t 2.1 "set x invoked"
sl@0
   176
    set x xxx
sl@0
   177
    list [catch {package require t 2.1} msg] $msg $x
sl@0
   178
} -match glob -result {1 * invoked}
sl@0
   179
test pkg-2.12 {Tcl_PkgRequire procedure, self-deleting script} {
sl@0
   180
    package forget t
sl@0
   181
    package ifneeded t 1.2 "package forget t; set x 1.2; package provide t 1.2"
sl@0
   182
    set x xxx
sl@0
   183
    package require t 1.2
sl@0
   184
    set x
sl@0
   185
} {1.2}
sl@0
   186
test pkg-2.13-!268 {Tcl_PkgRequire procedure, "package unknown" support} !tip268 {
sl@0
   187
    proc pkgUnknown args {
sl@0
   188
	global x
sl@0
   189
	set x $args
sl@0
   190
	package provide [lindex $args 0] [lindex $args 1]
sl@0
   191
    }
sl@0
   192
    package forget t
sl@0
   193
    foreach i {1.4 3.4 2.3 2.4 2.2} {
sl@0
   194
	package ifneeded t $i "set x $i"
sl@0
   195
    }
sl@0
   196
    package unknown pkgUnknown
sl@0
   197
    set x xxx
sl@0
   198
    package require -exact t 1.5
sl@0
   199
    package unknown {}
sl@0
   200
    set x
sl@0
   201
} {t 1.5 -exact}
sl@0
   202
sl@0
   203
test pkg-2.13-268 {Tcl_PkgRequire procedure, "package unknown" support} tip268 {
sl@0
   204
    proc pkgUnknown args {
sl@0
   205
	# args = name requirement
sl@0
   206
	# requirement = v-v (for exact version)
sl@0
   207
	global x
sl@0
   208
	set x $args
sl@0
   209
	package provide [lindex $args 0] [lindex [split [lindex $args 1] -] 0]
sl@0
   210
    }
sl@0
   211
    package forget t
sl@0
   212
    foreach i {1.4 3.4 2.3 2.4 2.2} {
sl@0
   213
	package ifneeded t $i "set x $i"
sl@0
   214
    }
sl@0
   215
    package unknown pkgUnknown
sl@0
   216
    set x xxx
sl@0
   217
    package require -exact t 1.5
sl@0
   218
    package unknown {}
sl@0
   219
    set x
sl@0
   220
} {t 1.5-1.6}
sl@0
   221
sl@0
   222
test pkg-2.14 {Tcl_PkgRequire procedure, "package unknown" support} {
sl@0
   223
    proc pkgUnknown args {
sl@0
   224
	package ifneeded t 1.2 "set x loaded; package provide t 1.2"
sl@0
   225
    }
sl@0
   226
    package forget t
sl@0
   227
    package unknown pkgUnknown
sl@0
   228
    set x xxx
sl@0
   229
    set result [list [package require t] $x]
sl@0
   230
    package unknown {}
sl@0
   231
    set result
sl@0
   232
} {1.2 loaded}
sl@0
   233
test pkg-2.15 {Tcl_PkgRequire procedure, "package unknown" support} !tip268 {
sl@0
   234
    proc pkgUnknown args {
sl@0
   235
	global x
sl@0
   236
	set x $args
sl@0
   237
	package provide [lindex $args 0] 2.0
sl@0
   238
    }
sl@0
   239
    package forget {a b}
sl@0
   240
    package unknown pkgUnknown
sl@0
   241
    set x xxx
sl@0
   242
    package require {a b}
sl@0
   243
    package unknown {}
sl@0
   244
    set x
sl@0
   245
} {{a b} {}}
sl@0
   246
test pkg-2.15-268 {Tcl_PkgRequire procedure, "package unknown" support} tip268 {
sl@0
   247
    proc pkgUnknown args {
sl@0
   248
	global x
sl@0
   249
	set x $args
sl@0
   250
	package provide [lindex $args 0] 2.0
sl@0
   251
    }
sl@0
   252
    package forget {a b}
sl@0
   253
    package unknown pkgUnknown
sl@0
   254
    set x xxx
sl@0
   255
    package require {a b}
sl@0
   256
    package unknown {}
sl@0
   257
    set x
sl@0
   258
} {{a b} 0-}
sl@0
   259
test pkg-2.16 {Tcl_PkgRequire procedure, "package unknown" error} !tip268 {
sl@0
   260
    proc pkgUnknown args {
sl@0
   261
	error "testing package unknown"
sl@0
   262
    }
sl@0
   263
    package forget t 
sl@0
   264
    package unknown pkgUnknown
sl@0
   265
    set result [list [catch {package require t} msg] $msg $errorInfo]
sl@0
   266
    package unknown {}
sl@0
   267
    set result
sl@0
   268
} {1 {testing package unknown} {testing package unknown
sl@0
   269
    while executing
sl@0
   270
"error "testing package unknown""
sl@0
   271
    (procedure "pkgUnknown" line 2)
sl@0
   272
    invoked from within
sl@0
   273
"pkgUnknown t {}"
sl@0
   274
    ("package unknown" script)
sl@0
   275
    invoked from within
sl@0
   276
"package require t"}}
sl@0
   277
test pkg-2.16-268 {Tcl_PkgRequire procedure, "package unknown" error} tip268 {
sl@0
   278
    proc pkgUnknown args {
sl@0
   279
	error "testing package unknown"
sl@0
   280
    }
sl@0
   281
    package forget t 
sl@0
   282
    package unknown pkgUnknown
sl@0
   283
    set result [list [catch {package require t} msg] $msg $errorInfo]
sl@0
   284
    package unknown {}
sl@0
   285
    set result
sl@0
   286
} {1 {testing package unknown} {testing package unknown
sl@0
   287
    while executing
sl@0
   288
"error "testing package unknown""
sl@0
   289
    (procedure "pkgUnknown" line 2)
sl@0
   290
    invoked from within
sl@0
   291
"pkgUnknown t 0-"
sl@0
   292
    ("package unknown" script)
sl@0
   293
    invoked from within
sl@0
   294
"package require t"}}
sl@0
   295
test pkg-2.17 {Tcl_PkgRequire procedure, "package unknown" doesn't load package} !tip268 {
sl@0
   296
    proc pkgUnknown args {
sl@0
   297
	global x
sl@0
   298
	set x $args
sl@0
   299
    }
sl@0
   300
    package forget t
sl@0
   301
    foreach i {1.4 3.4 2.3 2.4 2.2} {
sl@0
   302
	package ifneeded t $i "set x $i"
sl@0
   303
    }
sl@0
   304
    package unknown pkgUnknown
sl@0
   305
    set x xxx
sl@0
   306
    set result [list [catch {package require -exact t 1.5} msg] $msg $x]
sl@0
   307
    package unknown {}
sl@0
   308
    set result
sl@0
   309
} {1 {can't find package t 1.5} {t 1.5 -exact}}
sl@0
   310
test pkg-2.17-268 {Tcl_PkgRequire procedure, "package unknown" doesn't load package} tip268 {
sl@0
   311
    proc pkgUnknown args {
sl@0
   312
	global x
sl@0
   313
	set x $args
sl@0
   314
    }
sl@0
   315
    package forget t
sl@0
   316
    foreach i {1.4 3.4 2.3 2.4 2.2} {
sl@0
   317
	package ifneeded t $i "set x $i"
sl@0
   318
    }
sl@0
   319
    package unknown pkgUnknown
sl@0
   320
    set x xxx
sl@0
   321
    set result [list [catch {package require -exact t 1.5} msg] $msg $x]
sl@0
   322
    package unknown {}
sl@0
   323
    set result
sl@0
   324
} {1 {can't find package t 1.5-1.6} {t 1.5-1.6}}
sl@0
   325
test pkg-2.18 {Tcl_PkgRequire procedure, version checks} {
sl@0
   326
    package forget t
sl@0
   327
    package provide t 2.3
sl@0
   328
    package require t
sl@0
   329
} {2.3}
sl@0
   330
test pkg-2.19 {Tcl_PkgRequire procedure, version checks} {
sl@0
   331
    package forget t
sl@0
   332
    package provide t 2.3
sl@0
   333
    package require t 2.1
sl@0
   334
} {2.3}
sl@0
   335
test pkg-2.20 {Tcl_PkgRequire procedure, version checks} {
sl@0
   336
    package forget t
sl@0
   337
    package provide t 2.3
sl@0
   338
    package require t 2.3
sl@0
   339
} {2.3}
sl@0
   340
test pkg-2.21 {Tcl_PkgRequire procedure, version checks} {
sl@0
   341
    package forget t
sl@0
   342
    package provide t 2.3
sl@0
   343
    list [catch {package require t 2.4} msg] $msg
sl@0
   344
} {1 {version conflict for package "t": have 2.3, need 2.4}}
sl@0
   345
test pkg-2.22 {Tcl_PkgRequire procedure, version checks} {
sl@0
   346
    package forget t
sl@0
   347
    package provide t 2.3
sl@0
   348
    list [catch {package require t 1.2} msg] $msg
sl@0
   349
} {1 {version conflict for package "t": have 2.3, need 1.2}}
sl@0
   350
test pkg-2.23 {Tcl_PkgRequire procedure, version checks} {
sl@0
   351
    package forget t
sl@0
   352
    package provide t 2.3
sl@0
   353
    package require -exact t 2.3
sl@0
   354
} {2.3}
sl@0
   355
test pkg-2.24 {Tcl_PkgRequire procedure, version checks} !tip268 {
sl@0
   356
    package forget t
sl@0
   357
    package provide t 2.3
sl@0
   358
    list [catch {package require -exact t 2.2} msg] $msg
sl@0
   359
} {1 {version conflict for package "t": have 2.3, need 2.2}}
sl@0
   360
test pkg-2.24-268 {Tcl_PkgRequire procedure, version checks} tip268 {
sl@0
   361
    package forget t
sl@0
   362
    package provide t 2.3
sl@0
   363
    list [catch {package require -exact t 2.2} msg] $msg
sl@0
   364
} {1 {version conflict for package "t": have 2.3, need 2.2-2.3}}
sl@0
   365
test pkg-2.25 {Tcl_PkgRequire procedure, error in ifneeded script} -body {
sl@0
   366
    package forget t
sl@0
   367
    package ifneeded t 2.1 {package provide t 2.1; error "ifneeded test" EI}
sl@0
   368
    list [catch {package require t 2.1} msg] $msg $errorInfo
sl@0
   369
} -match glob -result {1 {ifneeded test} {EI
sl@0
   370
    ("package ifneeded*" script)
sl@0
   371
    invoked from within
sl@0
   372
"package require t 2.1"}} -constraints knownBug
sl@0
   373
test pkg-2.26 {Tcl_PkgRequire procedure, error in ifneeded script} -body {
sl@0
   374
    package forget t
sl@0
   375
    package ifneeded t 2.1 {package provide t 2.1; foreach x 1 {error "ifneeded test" EI}}
sl@0
   376
    list [catch {package require t 2.1} msg] $msg $errorInfo
sl@0
   377
} -match glob -result {1 {ifneeded test} {EI
sl@0
   378
    ("foreach" body line 1)
sl@0
   379
    invoked from within
sl@0
   380
"foreach x 1 {error "ifneeded test" EI}"
sl@0
   381
    ("package ifneeded*" script)
sl@0
   382
    invoked from within
sl@0
   383
"package require t 2.1"}}
sl@0
   384
test pkg-2.27 {Tcl_PkgRequire: circular dependency} -setup {
sl@0
   385
    package forget foo
sl@0
   386
} -body {
sl@0
   387
    package ifneeded foo 1 {package require foo 1}
sl@0
   388
    package require foo 1
sl@0
   389
} -cleanup {
sl@0
   390
    package forget foo
sl@0
   391
} -returnCodes error -match glob -result {circular package dependency:*}
sl@0
   392
test pkg-2.28 {Tcl_PkgRequire: circular dependency} -setup {
sl@0
   393
    package forget foo
sl@0
   394
} -body {
sl@0
   395
    package ifneeded foo 1 {package require foo 2}
sl@0
   396
    package require foo 1
sl@0
   397
} -cleanup {
sl@0
   398
    package forget foo
sl@0
   399
} -returnCodes error -match glob -result {circular package dependency:*}
sl@0
   400
test pkg-2.29 {Tcl_PkgRequire: circular dependency} -setup {
sl@0
   401
    package forget foo
sl@0
   402
    package forget bar
sl@0
   403
} -body {
sl@0
   404
    package ifneeded foo 1 {package require bar 1; package provide foo 1}
sl@0
   405
    package ifneeded bar 1 {package require foo 1; package provide bar 1}
sl@0
   406
    package require foo 1
sl@0
   407
} -cleanup {
sl@0
   408
    package forget foo
sl@0
   409
    package forget bar
sl@0
   410
} -returnCodes error -match glob -result {circular package dependency:*}
sl@0
   411
test pkg-2.30 {Tcl_PkgRequire: circular dependency} -setup {
sl@0
   412
    package forget foo
sl@0
   413
    package forget bar
sl@0
   414
} -body {
sl@0
   415
    package ifneeded foo 1 {package require bar 1; package provide foo 1}
sl@0
   416
    package ifneeded foo 2 {package provide foo 2}
sl@0
   417
    package ifneeded bar 1 {package require foo 2; package provide bar 1}
sl@0
   418
    package require foo 1
sl@0
   419
} -cleanup {
sl@0
   420
    package forget foo
sl@0
   421
    package forget bar
sl@0
   422
} -returnCodes error -match glob -result {circular package dependency:*}
sl@0
   423
test pkg-2.31 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
sl@0
   424
    package forget foo
sl@0
   425
} -body {
sl@0
   426
    package ifneeded foo 1 {package provide foo 1; error foo}
sl@0
   427
    package require foo 1
sl@0
   428
} -cleanup {
sl@0
   429
    package forget foo
sl@0
   430
} -returnCodes error -match glob -result foo
sl@0
   431
test pkg-2.32 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
sl@0
   432
    package forget foo
sl@0
   433
} -body {
sl@0
   434
    package ifneeded foo 1 {package provide foo 1; error foo}
sl@0
   435
    catch {package require foo 1}
sl@0
   436
    package provide foo
sl@0
   437
} -cleanup {
sl@0
   438
    package forget foo
sl@0
   439
} -result {}
sl@0
   440
test pkg-2.33 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
sl@0
   441
    package forget foo
sl@0
   442
} -body {
sl@0
   443
    package ifneeded foo 1 {package provide foo 2}
sl@0
   444
    package require foo 1
sl@0
   445
} -cleanup {
sl@0
   446
    package forget foo
sl@0
   447
} -returnCodes error -match glob -result {attempt to provide package * failed:*}
sl@0
   448
test pkg-2.34 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
sl@0
   449
    package forget foo
sl@0
   450
} -body {
sl@0
   451
    package ifneeded foo 1 {package provide foo 1.1}
sl@0
   452
    package require foo 1
sl@0
   453
} -cleanup {
sl@0
   454
    package forget foo
sl@0
   455
} -result 1.1
sl@0
   456
test pkg-2.34.1 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
sl@0
   457
    package forget foo
sl@0
   458
} -body {
sl@0
   459
    package ifneeded foo 1.1 {package provide foo 1}
sl@0
   460
    package require foo 1
sl@0
   461
} -cleanup {
sl@0
   462
    package forget foo
sl@0
   463
} -result 1
sl@0
   464
test pkg-2.34.2 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
sl@0
   465
    package forget foo
sl@0
   466
} -body {
sl@0
   467
    package ifneeded foo 1.1 {package provide foo 1}
sl@0
   468
    package require foo 1.1
sl@0
   469
} -cleanup {
sl@0
   470
    package forget foo
sl@0
   471
} -returnCodes error -match glob -result {attempt to provide package * failed:*}
sl@0
   472
test pkg-2.35 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
sl@0
   473
    package forget foo
sl@0
   474
} -body {
sl@0
   475
    package ifneeded foo 1 {}
sl@0
   476
    package require foo 1
sl@0
   477
} -cleanup {
sl@0
   478
    package forget foo
sl@0
   479
} -returnCodes error -match glob -result {attempt to provide package * failed:*}
sl@0
   480
test pkg-2.35.1 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
sl@0
   481
    package forget foo
sl@0
   482
} -body {
sl@0
   483
    package ifneeded foo 1 {break}
sl@0
   484
    package require foo 1
sl@0
   485
} -cleanup {
sl@0
   486
    package forget foo
sl@0
   487
} -returnCodes error -match glob \
sl@0
   488
-result {attempt to provide package * failed: bad return code:*}
sl@0
   489
test pkg-2.36 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
sl@0
   490
    package forget foo
sl@0
   491
} -body {
sl@0
   492
    package ifneeded foo 1 {continue}
sl@0
   493
    package require foo 1
sl@0
   494
} -cleanup {
sl@0
   495
    package forget foo
sl@0
   496
} -returnCodes error -match glob \
sl@0
   497
-result {attempt to provide package * failed: bad return code:*}
sl@0
   498
test pkg-2.37 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
sl@0
   499
    package forget foo
sl@0
   500
} -body {
sl@0
   501
    package ifneeded foo 1 {return}
sl@0
   502
    package require foo 1
sl@0
   503
} -cleanup {
sl@0
   504
    package forget foo
sl@0
   505
} -returnCodes error -match glob \
sl@0
   506
-result {attempt to provide package * failed: bad return code:*}
sl@0
   507
test pkg-2.38 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
sl@0
   508
    package forget foo
sl@0
   509
} -body {
sl@0
   510
    package ifneeded foo 1 {proc x {} {return -code 10}; x}
sl@0
   511
    package require foo 1
sl@0
   512
} -cleanup {
sl@0
   513
    rename x {}
sl@0
   514
    package forget foo
sl@0
   515
} -returnCodes error -match glob \
sl@0
   516
-result {attempt to provide package * failed: bad return code:*}
sl@0
   517
test pkg-2.39 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
sl@0
   518
    package forget foo
sl@0
   519
    set saveUnknown [package unknown]
sl@0
   520
    package unknown {package provide foo 2 ;#}
sl@0
   521
} -body {
sl@0
   522
    package require foo 1
sl@0
   523
} -cleanup {
sl@0
   524
    package forget foo
sl@0
   525
    package unknown $saveUnknown
sl@0
   526
} -returnCodes error -match glob -result *
sl@0
   527
test pkg-2.40 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
sl@0
   528
    package forget foo
sl@0
   529
    set saveUnknown [package unknown]
sl@0
   530
    package unknown {break ;#}
sl@0
   531
} -body {
sl@0
   532
    package require foo 1
sl@0
   533
} -cleanup {
sl@0
   534
    package forget foo
sl@0
   535
    package unknown $saveUnknown
sl@0
   536
} -returnCodes error -match glob -result {bad return code:*}
sl@0
   537
test pkg-2.41 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
sl@0
   538
    package forget foo
sl@0
   539
    set saveUnknown [package unknown]
sl@0
   540
    package unknown {continue ;#}
sl@0
   541
} -body {
sl@0
   542
    package require foo 1
sl@0
   543
} -cleanup {
sl@0
   544
    package forget foo
sl@0
   545
    package unknown $saveUnknown
sl@0
   546
} -returnCodes error -match glob -result {bad return code:*}
sl@0
   547
test pkg-2.42 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
sl@0
   548
    package forget foo
sl@0
   549
    set saveUnknown [package unknown]
sl@0
   550
    package unknown {return ;#}
sl@0
   551
} -body {
sl@0
   552
    package require foo 1
sl@0
   553
} -cleanup {
sl@0
   554
    package forget foo
sl@0
   555
    package unknown $saveUnknown
sl@0
   556
} -returnCodes error -match glob -result {bad return code:*}
sl@0
   557
test pkg-2.43 {Tcl_PkgRequire: consistent return values (1162286)} -setup {
sl@0
   558
    package forget foo
sl@0
   559
    set saveUnknown [package unknown]
sl@0
   560
    proc x args {return -code 10}
sl@0
   561
    package unknown x
sl@0
   562
} -body {
sl@0
   563
    package require foo 1
sl@0
   564
} -cleanup {
sl@0
   565
    rename x {}
sl@0
   566
    package forget foo
sl@0
   567
    package unknown $saveUnknown
sl@0
   568
} -returnCodes error -match glob -result {bad return code:*}
sl@0
   569
sl@0
   570
sl@0
   571
sl@0
   572
test pkg-2.50 {Tcl_PkgRequire procedure, picking best stable version} tip268 {
sl@0
   573
    package forget t
sl@0
   574
    foreach i {1.4 3.4 4.0a1 2.3 2.4 2.2} {
sl@0
   575
	package ifneeded t $i "set x $i; package provide t $i"
sl@0
   576
    }
sl@0
   577
    set x xxx
sl@0
   578
    package require t
sl@0
   579
    set x
sl@0
   580
} {3.4}
sl@0
   581
sl@0
   582
test pkg-2.51 {Tcl_PkgRequire procedure, picking best stable version} tip268 {
sl@0
   583
    package forget t
sl@0
   584
    foreach i {1.2b1 1.2 1.3a2 1.3} {
sl@0
   585
	package ifneeded t $i "set x $i; package provide t $i"
sl@0
   586
    }
sl@0
   587
    set x xxx
sl@0
   588
    package require t
sl@0
   589
    set x
sl@0
   590
} {1.3}
sl@0
   591
sl@0
   592
test pkg-2.52 {Tcl_PkgRequire procedure, picking best stable version} tip268 {
sl@0
   593
    package forget t
sl@0
   594
    foreach i {1.2b1 1.2 1.3 1.3a2} {
sl@0
   595
	package ifneeded t $i "set x $i; package provide t $i"
sl@0
   596
    }
sl@0
   597
    set x xxx
sl@0
   598
    package require t
sl@0
   599
    set x
sl@0
   600
} {1.3}
sl@0
   601
sl@0
   602
sl@0
   603
sl@0
   604
test pkg-3.1 {Tcl_PackageCmd procedure} {
sl@0
   605
    list [catch {package} msg] $msg
sl@0
   606
} {1 {wrong # args: should be "package option ?arg arg ...?"}}
sl@0
   607
test pkg-3.2 {Tcl_PackageCmd procedure, "forget" option} {
sl@0
   608
    foreach i [package names] {
sl@0
   609
	package forget $i
sl@0
   610
    }
sl@0
   611
    package names
sl@0
   612
} {}
sl@0
   613
test pkg-3.3 {Tcl_PackageCmd procedure, "forget" option} {
sl@0
   614
    foreach i [package names] {
sl@0
   615
	package forget $i
sl@0
   616
    }
sl@0
   617
    package forget foo
sl@0
   618
} {}
sl@0
   619
test pkg-3.4 {Tcl_PackageCmd procedure, "forget" option} {
sl@0
   620
    foreach i [package names] {
sl@0
   621
	package forget $i
sl@0
   622
    }
sl@0
   623
    package ifneeded t 1.1 {first script}
sl@0
   624
    package ifneeded t 2.3 {second script}
sl@0
   625
    package ifneeded x 1.4 {x's script}
sl@0
   626
    set result {}
sl@0
   627
    lappend result [lsort [package names]] [package versions t]
sl@0
   628
    package forget t
sl@0
   629
    lappend result [lsort [package names]] [package versions t]
sl@0
   630
} {{t x} {1.1 2.3} x {}}
sl@0
   631
test pkg-3.5 {Tcl_PackageCmd procedure, "forget" option} {
sl@0
   632
    foreach i [package names] {
sl@0
   633
	package forget $i
sl@0
   634
    }
sl@0
   635
    package ifneeded a 1.1 {first script}
sl@0
   636
    package ifneeded b 2.3 {second script}
sl@0
   637
    package ifneeded c 1.4 {third script}
sl@0
   638
    package forget
sl@0
   639
    set result [list [lsort [package names]]]
sl@0
   640
    package forget a c
sl@0
   641
    lappend result [lsort [package names]]
sl@0
   642
} {{a b c} b}
sl@0
   643
test pkg-3.5.1 {Tcl_PackageCmd procedure, "forget" option} {
sl@0
   644
    # Test for Bug 415273
sl@0
   645
    package ifneeded a 1 "I should have been forgotten"
sl@0
   646
    package forget no-such-package a
sl@0
   647
    set x [package ifneeded a 1]
sl@0
   648
    package forget a
sl@0
   649
    set x
sl@0
   650
} {}
sl@0
   651
test pkg-3.6 {Tcl_PackageCmd procedure, "ifneeded" option} {
sl@0
   652
    list [catch {package ifneeded a} msg] $msg
sl@0
   653
} {1 {wrong # args: should be "package ifneeded package version ?script?"}}
sl@0
   654
test pkg-3.7 {Tcl_PackageCmd procedure, "ifneeded" option} {
sl@0
   655
    list [catch {package ifneeded a b c d} msg] $msg
sl@0
   656
} {1 {wrong # args: should be "package ifneeded package version ?script?"}}
sl@0
   657
test pkg-3.8 {Tcl_PackageCmd procedure, "ifneeded" option} {
sl@0
   658
    list [catch {package ifneeded t xyz} msg] $msg
sl@0
   659
} {1 {expected version number but got "xyz"}}
sl@0
   660
test pkg-3.9 {Tcl_PackageCmd procedure, "ifneeded" option} {
sl@0
   661
    foreach i [package names] {
sl@0
   662
	package forget $i
sl@0
   663
    }
sl@0
   664
    list [package ifneeded foo 1.1] [package names]
sl@0
   665
} {{} {}}
sl@0
   666
test pkg-3.10 {Tcl_PackageCmd procedure, "ifneeded" option} {
sl@0
   667
    package forget t
sl@0
   668
    package ifneeded t 1.4 "script for t 1.4"
sl@0
   669
    list [package names] [package ifneeded t 1.4] [package versions t]
sl@0
   670
} {t {script for t 1.4} 1.4}
sl@0
   671
test pkg-3.11 {Tcl_PackageCmd procedure, "ifneeded" option} {
sl@0
   672
    package forget t
sl@0
   673
    package ifneeded t 1.4 "script for t 1.4"
sl@0
   674
    list [package ifneeded t 1.5] [package names] [package versions t]
sl@0
   675
} {{} t 1.4}
sl@0
   676
test pkg-3.12 {Tcl_PackageCmd procedure, "ifneeded" option} {
sl@0
   677
    package forget t
sl@0
   678
    package ifneeded t 1.4 "script for t 1.4"
sl@0
   679
    package ifneeded t 1.4 "second script for t 1.4"
sl@0
   680
    list [package ifneeded t 1.4] [package names] [package versions t]
sl@0
   681
} {{second script for t 1.4} t 1.4}
sl@0
   682
test pkg-3.13 {Tcl_PackageCmd procedure, "ifneeded" option} {
sl@0
   683
    package forget t
sl@0
   684
    package ifneeded t 1.4 "script for t 1.4"
sl@0
   685
    package ifneeded t 1.2 "second script"
sl@0
   686
    package ifneeded t 3.1 "last script"
sl@0
   687
    list [package ifneeded t 1.2] [package versions t]
sl@0
   688
} {{second script} {1.4 1.2 3.1}}
sl@0
   689
test pkg-3.14 {Tcl_PackageCmd procedure, "names" option} {
sl@0
   690
    list [catch {package names a} msg] $msg
sl@0
   691
} {1 {wrong # args: should be "package names"}}
sl@0
   692
test pkg-3.15 {Tcl_PackageCmd procedure, "names" option} {
sl@0
   693
    foreach i [package names] {
sl@0
   694
	package forget $i
sl@0
   695
    }
sl@0
   696
    package names
sl@0
   697
} {}
sl@0
   698
test pkg-3.16 {Tcl_PackageCmd procedure, "names" option} {
sl@0
   699
    foreach i [package names] {
sl@0
   700
	package forget $i
sl@0
   701
    }
sl@0
   702
    package ifneeded x 1.2 {dummy}
sl@0
   703
    package provide x 1.3
sl@0
   704
    package provide y 2.4
sl@0
   705
    catch {package require z 47.16}
sl@0
   706
    lsort [package names]
sl@0
   707
} {x y}
sl@0
   708
test pkg-3.17 {Tcl_PackageCmd procedure, "provide" option} {
sl@0
   709
    list [catch {package provide} msg] $msg
sl@0
   710
} {1 {wrong # args: should be "package provide package ?version?"}}
sl@0
   711
test pkg-3.18 {Tcl_PackageCmd procedure, "provide" option} {
sl@0
   712
    list [catch {package provide a b c} msg] $msg
sl@0
   713
} {1 {wrong # args: should be "package provide package ?version?"}}
sl@0
   714
test pkg-3.19 {Tcl_PackageCmd procedure, "provide" option} {
sl@0
   715
    package forget t
sl@0
   716
    package provide t
sl@0
   717
} {}
sl@0
   718
test pkg-3.20 {Tcl_PackageCmd procedure, "provide" option} {
sl@0
   719
    package forget t
sl@0
   720
    package provide t 2.3
sl@0
   721
    package provide t
sl@0
   722
} {2.3}
sl@0
   723
test pkg-3.21 {Tcl_PackageCmd procedure, "provide" option} {
sl@0
   724
    package forget t
sl@0
   725
    list [catch {package provide t a.b} msg] $msg
sl@0
   726
} {1 {expected version number but got "a.b"}}
sl@0
   727
test pkg-3.22 {Tcl_PackageCmd procedure, "require" option} !tip268 {
sl@0
   728
    list [catch {package require} msg] $msg
sl@0
   729
} {1 {wrong # args: should be "package require ?-exact? package ?version?"}}
sl@0
   730
test pkg-3.22-268 {Tcl_PackageCmd procedure, "require" option} tip268 {
sl@0
   731
    list [catch {package require} msg] $msg
sl@0
   732
} {1 {wrong # args: should be "package require ?-exact? package ?requirement...?"}}
sl@0
   733
test pkg-3.23 {Tcl_PackageCmd procedure, "require" option} !tip268 {
sl@0
   734
    list [catch {package require a b c} msg] $msg
sl@0
   735
} {1 {wrong # args: should be "package require ?-exact? package ?version?"}}
sl@0
   736
test pkg-3.24 {Tcl_PackageCmd procedure, "require" option} !tip268 {
sl@0
   737
    list [catch {package require -exact a b c} msg] $msg
sl@0
   738
} {1 {wrong # args: should be "package require ?-exact? package ?version?"}}
sl@0
   739
test pkg-3.24-268 {Tcl_PackageCmd procedure, "require" option} tip268 {
sl@0
   740
    list [catch {package require -exact a b c} msg] $msg
sl@0
   741
    # Exact syntax: -exact name version
sl@0
   742
    #              name ?requirement...?
sl@0
   743
} {1 {wrong # args: should be "package require ?-exact? package ?requirement...?"}}
sl@0
   744
test pkg-3.25 {Tcl_PackageCmd procedure, "require" option} !tip268 {
sl@0
   745
    list [catch {package require -bs a b} msg] $msg
sl@0
   746
} {1 {wrong # args: should be "package require ?-exact? package ?version?"}}
sl@0
   747
test pkg-3.26 {Tcl_PackageCmd procedure, "require" option} {
sl@0
   748
    list [catch {package require x a.b} msg] $msg
sl@0
   749
} {1 {expected version number but got "a.b"}}
sl@0
   750
test pkg-3.27 {Tcl_PackageCmd procedure, "require" option} {
sl@0
   751
    list [catch {package require -exact x a.b} msg] $msg
sl@0
   752
} {1 {expected version number but got "a.b"}}
sl@0
   753
test pkg-3.28 {Tcl_PackageCmd procedure, "require" option} !tip268 {
sl@0
   754
    list [catch {package require -exact x} msg] $msg
sl@0
   755
} {1 {wrong # args: should be "package require ?-exact? package ?version?"}}
sl@0
   756
test pkg-3.28-268 {Tcl_PackageCmd procedure, "require" option} tip268 {
sl@0
   757
    list [catch {package require -exact x} msg] $msg
sl@0
   758
} {1 {wrong # args: should be "package require ?-exact? package ?requirement...?"}}
sl@0
   759
test pkg-3.29 {Tcl_PackageCmd procedure, "require" option} !tip268 {
sl@0
   760
    list [catch {package require -exact} msg] $msg
sl@0
   761
} {1 {wrong # args: should be "package require ?-exact? package ?version?"}}
sl@0
   762
test pkg-3.29-268 {Tcl_PackageCmd procedure, "require" option} tip268 {
sl@0
   763
    list [catch {package require -exact} msg] $msg
sl@0
   764
} {1 {wrong # args: should be "package require ?-exact? package ?requirement...?"}}
sl@0
   765
test pkg-3.30 {Tcl_PackageCmd procedure, "require" option} {
sl@0
   766
    package forget t
sl@0
   767
    package provide t 2.3
sl@0
   768
    package require t 2.1
sl@0
   769
} {2.3}
sl@0
   770
test pkg-3.31 {Tcl_PackageCmd procedure, "require" option} {
sl@0
   771
    package forget t
sl@0
   772
    list [catch {package require t} msg] $msg
sl@0
   773
} {1 {can't find package t}}
sl@0
   774
test pkg-3.32 {Tcl_PackageCmd procedure, "require" option} {
sl@0
   775
    package forget t
sl@0
   776
    package ifneeded t 2.3 "error {synthetic error}"
sl@0
   777
    list [catch {package require t 2.3} msg] $msg
sl@0
   778
} {1 {synthetic error}}
sl@0
   779
test pkg-3.33 {Tcl_PackageCmd procedure, "unknown" option} {
sl@0
   780
    list [catch {package unknown a b} msg] $msg
sl@0
   781
} {1 {wrong # args: should be "package unknown ?command?"}}
sl@0
   782
test pkg-3.34 {Tcl_PackageCmd procedure, "unknown" option} {
sl@0
   783
    package unknown "test script"
sl@0
   784
    package unknown
sl@0
   785
} {test script}
sl@0
   786
test pkg-3.35 {Tcl_PackageCmd procedure, "unknown" option} {
sl@0
   787
    package unknown "test script"
sl@0
   788
    package unknown {}
sl@0
   789
    package unknown
sl@0
   790
} {}
sl@0
   791
test pkg-3.36 {Tcl_PackageCmd procedure, "vcompare" option} {
sl@0
   792
    list [catch {package vcompare a} msg] $msg
sl@0
   793
} {1 {wrong # args: should be "package vcompare version1 version2"}}
sl@0
   794
test pkg-3.37 {Tcl_PackageCmd procedure, "vcompare" option} {
sl@0
   795
    list [catch {package vcompare a b c} msg] $msg
sl@0
   796
} {1 {wrong # args: should be "package vcompare version1 version2"}}
sl@0
   797
test pkg-3.38 {Tcl_PackageCmd procedure, "vcompare" option} {
sl@0
   798
    list [catch {package vcompare x.y 3.4} msg] $msg
sl@0
   799
} {1 {expected version number but got "x.y"}}
sl@0
   800
test pkg-3.39 {Tcl_PackageCmd procedure, "vcompare" option} {
sl@0
   801
    list [catch {package vcompare 2.1 a.b} msg] $msg
sl@0
   802
} {1 {expected version number but got "a.b"}}
sl@0
   803
test pkg-3.40 {Tcl_PackageCmd procedure, "vcompare" option} {
sl@0
   804
    package vc 2.1 2.3
sl@0
   805
} {-1}
sl@0
   806
test pkg-3.41 {Tcl_PackageCmd procedure, "vcompare" option} {
sl@0
   807
    package vc 2.2.4 2.2.4
sl@0
   808
} {0}
sl@0
   809
test pkg-3.42 {Tcl_PackageCmd procedure, "versions" option} {
sl@0
   810
    list [catch {package versions} msg] $msg
sl@0
   811
} {1 {wrong # args: should be "package versions package"}}
sl@0
   812
test pkg-3.43 {Tcl_PackageCmd procedure, "versions" option} {
sl@0
   813
    list [catch {package versions a b} msg] $msg
sl@0
   814
} {1 {wrong # args: should be "package versions package"}}
sl@0
   815
test pkg-3.44 {Tcl_PackageCmd procedure, "versions" option} {
sl@0
   816
    package forget t
sl@0
   817
    package versions t
sl@0
   818
} {}
sl@0
   819
test pkg-3.45 {Tcl_PackageCmd procedure, "versions" option} {
sl@0
   820
    package forget t
sl@0
   821
    package provide t 2.3
sl@0
   822
    package versions t
sl@0
   823
} {}
sl@0
   824
test pkg-3.46 {Tcl_PackageCmd procedure, "versions" option} {
sl@0
   825
    package forget t
sl@0
   826
    package ifneeded t 2.3 x
sl@0
   827
    package ifneeded t 2.4 y
sl@0
   828
    package versions t
sl@0
   829
} {2.3 2.4}
sl@0
   830
test pkg-3.47 {Tcl_PackageCmd procedure, "vsatisfies" option} !tip268 {
sl@0
   831
    list [catch {package vsatisfies a} msg] $msg
sl@0
   832
} {1 {wrong # args: should be "package vsatisfies version1 version2"}}
sl@0
   833
test pkg-3.47-268 {Tcl_PackageCmd procedure, "vsatisfies" option} tip268 {
sl@0
   834
    list [catch {package vsatisfies a} msg] $msg
sl@0
   835
} {1 {wrong # args: should be "package vsatisfies version requirement requirement..."}}
sl@0
   836
test pkg-3.48 {Tcl_PackageCmd procedure, "vsatisfies" option} !tip268 {
sl@0
   837
    list [catch {package vsatisfies a b c} msg] $msg
sl@0
   838
} {1 {wrong # args: should be "package vsatisfies version1 version2"}}
sl@0
   839
test pkg-3.49 {Tcl_PackageCmd procedure, "vsatisfies" option} {
sl@0
   840
    list [catch {package vsatisfies x.y 3.4} msg] $msg
sl@0
   841
} {1 {expected version number but got "x.y"}}
sl@0
   842
test pkg-3.50 {Tcl_PackageCmd procedure, "vsatisfies" option} {
sl@0
   843
    list [catch {package vcompare 2.1 a.b} msg] $msg
sl@0
   844
} {1 {expected version number but got "a.b"}}
sl@0
   845
test pkg-3.51 {Tcl_PackageCmd procedure, "vsatisfies" option} {
sl@0
   846
    package vs 2.3 2.1
sl@0
   847
} {1}
sl@0
   848
test pkg-3.52 {Tcl_PackageCmd procedure, "vsatisfies" option} {
sl@0
   849
    package vs 2.3 1.2
sl@0
   850
} {0}
sl@0
   851
test pkg-3.53 {Tcl_PackageCmd procedure, "versions" option} !tip268 {
sl@0
   852
    list [catch {package foo} msg] $msg
sl@0
   853
} {1 {bad option "foo": must be forget, ifneeded, names, present, provide, require, unknown, vcompare, versions, or vsatisfies}}
sl@0
   854
test pkg-3.53-268 {Tcl_PackageCmd procedure, "versions" option} tip268 {
sl@0
   855
    list [catch {package foo} msg] $msg
sl@0
   856
} {1 {bad option "foo": must be forget, ifneeded, names, prefer, present, provide, require, unknown, vcompare, versions, or vsatisfies}}
sl@0
   857
sl@0
   858
test pkg-3.54 {Tcl_PackageCmd procedure, "vsatisfies" option} tip268 {
sl@0
   859
    list [catch {package vsatisfies 2.1 2.1-3.2-4.5} msg] $msg
sl@0
   860
} {1 {expected versionMin-versionMax but got "2.1-3.2-4.5"}}
sl@0
   861
sl@0
   862
test pkg-3.55 {Tcl_PackageCmd procedure, "vsatisfies" option} tip268 {
sl@0
   863
    list [catch {package vsatisfies 2.1 3.2-x.y} msg] $msg
sl@0
   864
} {1 {expected version number but got "x.y"}}
sl@0
   865
sl@0
   866
test pkg-3.56 {Tcl_PackageCmd procedure, "vsatisfies" option} tip268 {
sl@0
   867
    list [catch {package vsatisfies 2.1 x.y-3.2} msg] $msg
sl@0
   868
} {1 {expected version number but got "x.y"}}
sl@0
   869
sl@0
   870
# No tests for FindPackage;  can't think up anything detectable
sl@0
   871
# errors.
sl@0
   872
sl@0
   873
test pkg-4.1 {TclFreePackageInfo procedure} {
sl@0
   874
    interp create foo
sl@0
   875
    foo eval {
sl@0
   876
	package ifneeded t 2.3 x
sl@0
   877
	package ifneeded t 2.4 y
sl@0
   878
	package ifneeded x 3.1 z
sl@0
   879
	package provide q 4.3
sl@0
   880
	package unknown "will this get freed?"
sl@0
   881
    }
sl@0
   882
    interp delete foo
sl@0
   883
} {}
sl@0
   884
test pkg-4.2 {TclFreePackageInfo procedure} -body {
sl@0
   885
    interp create foo
sl@0
   886
    foo eval {
sl@0
   887
	package ifneeded t 2.3 x
sl@0
   888
	package ifneeded t 2.4 y
sl@0
   889
	package ifneeded x 3.1 z
sl@0
   890
	package provide q 4.3
sl@0
   891
    }
sl@0
   892
    foo alias z kill
sl@0
   893
    proc kill {} {
sl@0
   894
	interp delete foo
sl@0
   895
    }
sl@0
   896
    foo eval package require x 3.1
sl@0
   897
} -returnCodes error -match glob -result *
sl@0
   898
sl@0
   899
test pkg-5.1 {CheckVersion procedure} {
sl@0
   900
    list [catch {package vcompare 1 2.1} msg] $msg
sl@0
   901
} {0 -1}
sl@0
   902
test pkg-5.2 {CheckVersion procedure} {
sl@0
   903
    list [catch {package vcompare .1 2.1} msg] $msg
sl@0
   904
} {1 {expected version number but got ".1"}}
sl@0
   905
test pkg-5.3 {CheckVersion procedure} {
sl@0
   906
    list [catch {package vcompare 111.2a.3 2.1} msg] $msg
sl@0
   907
} {1 {expected version number but got "111.2a.3"}}
sl@0
   908
test pkg-5.4 {CheckVersion procedure} {
sl@0
   909
    list [catch {package vcompare 1.2.3. 2.1} msg] $msg
sl@0
   910
} {1 {expected version number but got "1.2.3."}}
sl@0
   911
test pkg-5.5 {CheckVersion procedure} {
sl@0
   912
    list [catch {package vcompare 1.2..3 2.1} msg] $msg
sl@0
   913
} {1 {expected version number but got "1.2..3"}}
sl@0
   914
sl@0
   915
test pkg-6.1 {ComparePkgVersions procedure} {
sl@0
   916
    package vcompare 1.23 1.22
sl@0
   917
} {1}
sl@0
   918
test pkg-6.2 {ComparePkgVersions procedure} {
sl@0
   919
    package vcompare 1.22.1.2.3 1.22.1.2.3
sl@0
   920
} {0}
sl@0
   921
test pkg-6.3 {ComparePkgVersions procedure} {
sl@0
   922
    package vcompare 1.21 1.22
sl@0
   923
} {-1}
sl@0
   924
test pkg-6.4 {ComparePkgVersions procedure} {
sl@0
   925
    package vcompare 1.21 1.21.2
sl@0
   926
} {-1}
sl@0
   927
test pkg-6.5 {ComparePkgVersions procedure} {
sl@0
   928
    package vcompare 1.21.1 1.21
sl@0
   929
} {1}
sl@0
   930
test pkg-6.6 {ComparePkgVersions procedure} {
sl@0
   931
    package vsatisfies 1.21.1 1.21
sl@0
   932
} {1}
sl@0
   933
test pkg-6.7 {ComparePkgVersions procedure} {
sl@0
   934
    package vsatisfies 2.22.3 1.21
sl@0
   935
} {0}
sl@0
   936
test pkg-6.8 {ComparePkgVersions procedure} {
sl@0
   937
    package vsatisfies 1 1
sl@0
   938
} {1}
sl@0
   939
test pkg-6.9 {ComparePkgVersions procedure} {
sl@0
   940
    package vsatisfies 2 1
sl@0
   941
} {0}
sl@0
   942
sl@0
   943
test pkg-7.1 {Tcl_PkgPresent procedure, any version} {
sl@0
   944
    package forget t
sl@0
   945
    package provide t 2.4
sl@0
   946
    package present t
sl@0
   947
} {2.4}
sl@0
   948
test pkg-7.2 {Tcl_PkgPresent procedure, correct version} {
sl@0
   949
    package forget t
sl@0
   950
    package provide t 2.4
sl@0
   951
    package present t 2.4
sl@0
   952
} {2.4}
sl@0
   953
test pkg-7.3 {Tcl_PkgPresent procedure, satisfying version} {
sl@0
   954
    package forget t
sl@0
   955
    package provide t 2.4
sl@0
   956
    package present t 2.0
sl@0
   957
} {2.4}
sl@0
   958
test pkg-7.4 {Tcl_PkgPresent procedure, not satisfying version} {
sl@0
   959
    package forget t
sl@0
   960
    package provide t 2.4
sl@0
   961
    list [catch {package present t 2.6} msg] $msg
sl@0
   962
} {1 {version conflict for package "t": have 2.4, need 2.6}}
sl@0
   963
test pkg-7.5 {Tcl_PkgPresent procedure, not satisfying version} {
sl@0
   964
    package forget t
sl@0
   965
    package provide t 2.4
sl@0
   966
    list [catch {package present t 1.0} msg] $msg
sl@0
   967
} {1 {version conflict for package "t": have 2.4, need 1.0}}
sl@0
   968
test pkg-7.6 {Tcl_PkgPresent procedure, exact version} {
sl@0
   969
    package forget t
sl@0
   970
    package provide t 2.4
sl@0
   971
    package present -exact t 2.4
sl@0
   972
} {2.4}
sl@0
   973
test pkg-7.7 {Tcl_PkgPresent procedure, not exact version} {
sl@0
   974
    package forget t
sl@0
   975
    package provide t 2.4
sl@0
   976
    list [catch {package present -exact t 2.3} msg] $msg
sl@0
   977
} {1 {version conflict for package "t": have 2.4, need 2.3}}
sl@0
   978
test pkg-7.8 {Tcl_PkgPresent procedure, unknown package} {
sl@0
   979
    package forget t
sl@0
   980
    list [catch {package present t} msg] $msg
sl@0
   981
} {1 {package t is not present}}
sl@0
   982
test pkg-7.9 {Tcl_PkgPresent procedure, unknown package} {
sl@0
   983
    package forget t
sl@0
   984
    list [catch {package present t 2.4} msg] $msg
sl@0
   985
} {1 {package t 2.4 is not present}}
sl@0
   986
test pkg-7.10 {Tcl_PkgPresent procedure, unknown package} {
sl@0
   987
    package forget t
sl@0
   988
    list [catch {package present -exact t 2.4} msg] $msg
sl@0
   989
} {1 {package t 2.4 is not present}}
sl@0
   990
test pkg-7.11 {Tcl_PackageCmd procedure, "present" option} {
sl@0
   991
    list [catch {package present} msg] $msg
sl@0
   992
} {1 {wrong # args: should be "package present ?-exact? package ?version?"}}
sl@0
   993
test pkg-7.12 {Tcl_PackageCmd procedure, "present" option} {
sl@0
   994
    list [catch {package present a b c} msg] $msg
sl@0
   995
} {1 {wrong # args: should be "package present ?-exact? package ?version?"}}
sl@0
   996
test pkg-7.13 {Tcl_PackageCmd procedure, "present" option} {
sl@0
   997
    list [catch {package present -exact a b c} msg] $msg
sl@0
   998
} {1 {wrong # args: should be "package present ?-exact? package ?version?"}}
sl@0
   999
test pkg-7.14 {Tcl_PackageCmd procedure, "present" option} {
sl@0
  1000
    list [catch {package present -bs a b} msg] $msg
sl@0
  1001
} {1 {wrong # args: should be "package present ?-exact? package ?version?"}}
sl@0
  1002
test pkg-7.15 {Tcl_PackageCmd procedure, "present" option} {
sl@0
  1003
    list [catch {package present x a.b} msg] $msg
sl@0
  1004
} {1 {expected version number but got "a.b"}}
sl@0
  1005
test pkg-7.16 {Tcl_PackageCmd procedure, "present" option} {
sl@0
  1006
    list [catch {package present -exact x a.b} msg] $msg
sl@0
  1007
} {1 {expected version number but got "a.b"}}
sl@0
  1008
test pkg-7.17 {Tcl_PackageCmd procedure, "present" option} {
sl@0
  1009
    list [catch {package present -exact x} msg] $msg
sl@0
  1010
} {1 {wrong # args: should be "package present ?-exact? package ?version?"}}
sl@0
  1011
test pkg-7.18 {Tcl_PackageCmd procedure, "present" option} {
sl@0
  1012
    list [catch {package present -exact} msg] $msg
sl@0
  1013
} {1 {wrong # args: should be "package present ?-exact? package ?version?"}}
sl@0
  1014
sl@0
  1015
sl@0
  1016
# Note: It is correct that the result of the very first test,
sl@0
  1017
# i.e. "5.0 5.0a0" is 1, i.e. that version 5.0a0 satisfies a 5.0
sl@0
  1018
# requirement.
sl@0
  1019
sl@0
  1020
# The requirement "5.0" internally translates first to "5.0-6", and
sl@0
  1021
# then to its final form of "5.0a0-6a0". These translations are
sl@0
  1022
# explicitly specified by the TIP (Search for "padded/extended
sl@0
  1023
# internally with 'a0'"). This was done intentionally for exactly the
sl@0
  1024
# tested case, that an alpha package can satisfy a requirement for the
sl@0
  1025
# regular package. An example would be a package FOO requiring Tcl 8.X
sl@0
  1026
# for its operation. It can be used with Tcl 8.Xa0. Without our
sl@0
  1027
# translation that would not be possible.
sl@0
  1028
sl@0
  1029
set n 0
sl@0
  1030
foreach {r p vs vc} {
sl@0
  1031
    5.0 5.0a0 1 1
sl@0
  1032
    5.0a0 5.0 1 -1
sl@0
  1033
sl@0
  1034
    8.5a0    8.5a5    1          -1
sl@0
  1035
    8.5a0    8.5b1    1          -1
sl@0
  1036
    8.5a0    8.5.1    1          -1
sl@0
  1037
    8.5a0    8.6a0    1          -1
sl@0
  1038
    8.5a0    8.6b0    1          -1
sl@0
  1039
    8.5a0    8.6.0    1          -1
sl@0
  1040
    8.5a6    8.5a5    0          1
sl@0
  1041
    8.5a6    8.5b1    1          -1
sl@0
  1042
    8.5a6    8.5.1    1          -1
sl@0
  1043
    8.5a6    8.6a0    1          -1
sl@0
  1044
    8.5a6    8.6b0    1          -1
sl@0
  1045
    8.5a6    8.6.0    1          -1
sl@0
  1046
    8.5b0    8.5a5    0          1
sl@0
  1047
    8.5b0    8.5b1    1          -1
sl@0
  1048
    8.5b0    8.5.1    1          -1
sl@0
  1049
    8.5b0    8.6a0    1          -1
sl@0
  1050
    8.5b0    8.6b0    1          -1
sl@0
  1051
    8.5b0    8.6.0    1          -1
sl@0
  1052
    8.5b2    8.5a5    0          1
sl@0
  1053
    8.5b2    8.5b1    0          1
sl@0
  1054
    8.5b2    8.5.1    1          -1
sl@0
  1055
    8.5b2    8.6a0    1          -1
sl@0
  1056
    8.5b2    8.6b0    1          -1
sl@0
  1057
    8.5b2    8.6.0    1          -1
sl@0
  1058
    8.5      8.5a5    1          1
sl@0
  1059
    8.5      8.5b1    1          1
sl@0
  1060
    8.5      8.5.1    1          -1
sl@0
  1061
    8.5      8.6a0    1          -1
sl@0
  1062
    8.5      8.6b0    1          -1
sl@0
  1063
    8.5      8.6.0    1          -1
sl@0
  1064
    8.5.0    8.5a5    0          1
sl@0
  1065
    8.5.0    8.5b1    0          1
sl@0
  1066
    8.5.0    8.5.1    1          -1
sl@0
  1067
    8.5.0    8.6a0    1          -1
sl@0
  1068
    8.5.0    8.6b0    1          -1
sl@0
  1069
    8.5.0    8.6.0    1          -1
sl@0
  1070
} {
sl@0
  1071
    test package-vsatisfies-1.$n {package vsatisfies} tip268 {
sl@0
  1072
	package vsatisfies $p $r
sl@0
  1073
    } $vs
sl@0
  1074
sl@0
  1075
    test package-vcompare-1.$n {package vcompare} tip268 {
sl@0
  1076
	package vcompare $r $p
sl@0
  1077
    } $vc
sl@0
  1078
sl@0
  1079
    incr n
sl@0
  1080
}
sl@0
  1081
sl@0
  1082
set n 0
sl@0
  1083
foreach {required provided satisfied} {
sl@0
  1084
    8.5a0-   8.5a5    1
sl@0
  1085
    8.5a0-   8.5b1    1
sl@0
  1086
    8.5a0-   8.5.1    1
sl@0
  1087
    8.5a0-   8.6a0    1
sl@0
  1088
    8.5a0-   8.6b0    1
sl@0
  1089
    8.5a0-   8.6.0    1
sl@0
  1090
    8.5a6-   8.5a5    0
sl@0
  1091
    8.5a6-   8.5b1    1
sl@0
  1092
    8.5a6-   8.5.1    1
sl@0
  1093
    8.5a6-   8.6a0    1
sl@0
  1094
    8.5a6-   8.6b0    1
sl@0
  1095
    8.5a6-   8.6.0    1
sl@0
  1096
    8.5b0-   8.5a5    0
sl@0
  1097
    8.5b0-   8.5b1    1
sl@0
  1098
    8.5b0-   8.5.1    1
sl@0
  1099
    8.5b0-   8.6a0    1
sl@0
  1100
    8.5b0-   8.6b0    1
sl@0
  1101
    8.5b0-   8.6.0    1
sl@0
  1102
    8.5b2-   8.5a5    0
sl@0
  1103
    8.5b2-   8.5b1    0
sl@0
  1104
    8.5b2-   8.5.1    1
sl@0
  1105
    8.5b2-   8.6a0    1
sl@0
  1106
    8.5b2-   8.6b0    1
sl@0
  1107
    8.5b2-   8.6.0    1
sl@0
  1108
    8.5-     8.5a5    1
sl@0
  1109
    8.5-     8.5b1    1
sl@0
  1110
    8.5-     8.5.1    1
sl@0
  1111
    8.5-     8.6a0    1
sl@0
  1112
    8.5-     8.6b0    1
sl@0
  1113
    8.5-     8.6.0    1
sl@0
  1114
    8.5.0-   8.5a5    0
sl@0
  1115
    8.5.0-   8.5b1    0
sl@0
  1116
    8.5.0-   8.5.1    1
sl@0
  1117
    8.5.0-   8.6a0    1
sl@0
  1118
    8.5.0-   8.6b0    1
sl@0
  1119
    8.5.0-   8.6.0    1
sl@0
  1120
    8.5a0-7  8.5a5    0
sl@0
  1121
    8.5a0-7  8.5b1    0
sl@0
  1122
    8.5a0-7  8.5.1    0
sl@0
  1123
    8.5a0-7  8.6a0    0
sl@0
  1124
    8.5a0-7  8.6b0    0
sl@0
  1125
    8.5a0-7  8.6.0    0
sl@0
  1126
    8.5a6-7  8.5a5    0
sl@0
  1127
    8.5a6-7  8.5b1    0
sl@0
  1128
    8.5a6-7  8.5.1    0
sl@0
  1129
    8.5a6-7  8.6a0    0
sl@0
  1130
    8.5a6-7  8.6b0    0
sl@0
  1131
    8.5a6-7  8.6.0    0
sl@0
  1132
    8.5b0-7  8.5a5    0
sl@0
  1133
    8.5b0-7  8.5b1    0
sl@0
  1134
    8.5b0-7  8.5.1    0
sl@0
  1135
    8.5b0-7  8.6a0    0
sl@0
  1136
    8.5b0-7  8.6b0    0
sl@0
  1137
    8.5b0-7  8.6.0    0
sl@0
  1138
    8.5b2-7  8.5a5    0
sl@0
  1139
    8.5b2-7  8.5b1    0
sl@0
  1140
    8.5b2-7  8.5.1    0
sl@0
  1141
    8.5b2-7  8.6a0    0
sl@0
  1142
    8.5b2-7  8.6b0    0
sl@0
  1143
    8.5b2-7  8.6.0    0
sl@0
  1144
    8.5-7    8.5a5    0
sl@0
  1145
    8.5-7    8.5b1    0
sl@0
  1146
    8.5-7    8.5.1    0
sl@0
  1147
    8.5-7    8.6a0    0
sl@0
  1148
    8.5-7    8.6b0    0
sl@0
  1149
    8.5-7    8.6.0    0
sl@0
  1150
    8.5.0-7  8.5a5    0
sl@0
  1151
    8.5.0-7  8.5b1    0
sl@0
  1152
    8.5.0-7  8.5.1    0
sl@0
  1153
    8.5.0-7  8.6a0    0
sl@0
  1154
    8.5.0-7  8.6b0    0
sl@0
  1155
    8.5.0-7  8.6.0    0
sl@0
  1156
    8.5a0-8.6.1 8.5a5    1
sl@0
  1157
    8.5a0-8.6.1 8.5b1    1
sl@0
  1158
    8.5a0-8.6.1 8.5.1    1
sl@0
  1159
    8.5a0-8.6.1 8.6a0    1
sl@0
  1160
    8.5a0-8.6.1 8.6b0    1
sl@0
  1161
    8.5a0-8.6.1 8.6.0    1
sl@0
  1162
    8.5a6-8.6.1 8.5a5    0
sl@0
  1163
    8.5a6-8.6.1 8.5b1    1
sl@0
  1164
    8.5a6-8.6.1 8.5.1    1
sl@0
  1165
    8.5a6-8.6.1 8.6a0    1
sl@0
  1166
    8.5a6-8.6.1 8.6b0    1
sl@0
  1167
    8.5a6-8.6.1 8.6.0    1
sl@0
  1168
    8.5b0-8.6.1 8.5a5    0
sl@0
  1169
    8.5b0-8.6.1 8.5b1    1
sl@0
  1170
    8.5b0-8.6.1 8.5.1    1
sl@0
  1171
    8.5b0-8.6.1 8.6a0    1
sl@0
  1172
    8.5b0-8.6.1 8.6b0    1
sl@0
  1173
    8.5b0-8.6.1 8.6.0    1
sl@0
  1174
    8.5b2-8.6.1 8.5a5    0
sl@0
  1175
    8.5b2-8.6.1 8.5b1    0
sl@0
  1176
    8.5b2-8.6.1 8.5.1    1
sl@0
  1177
    8.5b2-8.6.1 8.6a0    1
sl@0
  1178
    8.5b2-8.6.1 8.6b0    1
sl@0
  1179
    8.5b2-8.6.1 8.6.0    1
sl@0
  1180
    8.5-8.6.1 8.5a5    1
sl@0
  1181
    8.5-8.6.1 8.5b1    1
sl@0
  1182
    8.5-8.6.1 8.5.1    1
sl@0
  1183
    8.5-8.6.1 8.6a0    1
sl@0
  1184
    8.5-8.6.1 8.6b0    1
sl@0
  1185
    8.5-8.6.1 8.6.0    1
sl@0
  1186
    8.5.0-8.6.1 8.5a5    0
sl@0
  1187
    8.5.0-8.6.1 8.5b1    0
sl@0
  1188
    8.5.0-8.6.1 8.5.1    1
sl@0
  1189
    8.5.0-8.6.1 8.6a0    1
sl@0
  1190
    8.5.0-8.6.1 8.6b0    1
sl@0
  1191
    8.5.0-8.6.1 8.6.0    1
sl@0
  1192
    8.5a0-8.5a0 8.5a0    1
sl@0
  1193
    8.5a0-8.5a0 8.5b1    0
sl@0
  1194
    8.5a0-8.5a0 8.4      0
sl@0
  1195
    8.5b0-8.5b0 8.5a5    0
sl@0
  1196
    8.5b0-8.5b0 8.5b0    1
sl@0
  1197
    8.5b0-8.5b0 8.5.1    0
sl@0
  1198
    8.5-8.5  8.5a5    0
sl@0
  1199
    8.5-8.5  8.5b1    0
sl@0
  1200
    8.5-8.5  8.5      1
sl@0
  1201
    8.5-8.5  8.5.1    0
sl@0
  1202
    8.5.0-8.5.0 8.5a5    0
sl@0
  1203
    8.5.0-8.5.0 8.5b1    0
sl@0
  1204
    8.5.0-8.5.0 8.5.0    1
sl@0
  1205
    8.5.0-8.5.0 8.5.1    0
sl@0
  1206
    8.5.0-8.5.0 8.6a0    0
sl@0
  1207
    8.5.0-8.5.0 8.6b0    0
sl@0
  1208
    8.5.0-8.5.0 8.6.0    0
sl@0
  1209
    8.2      9        0
sl@0
  1210
    8.2-     9        1
sl@0
  1211
    8.2-8.5  9        0
sl@0
  1212
    8.2-9.1  9        1
sl@0
  1213
sl@0
  1214
    8.5-8.5     8.5b1 0
sl@0
  1215
    8.5a0-8.5   8.5b1 0
sl@0
  1216
    8.5a0-8.5.1 8.5b1 1
sl@0
  1217
sl@0
  1218
    8.5-8.5     8.5 1
sl@0
  1219
    8.5.0-8.5.0 8.5 1
sl@0
  1220
    8.5a0-8.5.0 8.5 0
sl@0
  1221
sl@0
  1222
} {
sl@0
  1223
    test package-vsatisfies-2.$n "package vsatisfies $provided $required" tip268 {
sl@0
  1224
	package vsatisfies $provided $required
sl@0
  1225
    } $satisfied
sl@0
  1226
    incr n
sl@0
  1227
}
sl@0
  1228
sl@0
  1229
test package-vsatisfies-3.0 "package vsatisfies multiple" tip268 {
sl@0
  1230
    #                      yes no
sl@0
  1231
    package vsatisfies 8.4 8.4 7.3
sl@0
  1232
} 1
sl@0
  1233
sl@0
  1234
test package-vsatisfies-3.1 "package vsatisfies multiple" tip268 {
sl@0
  1235
    #                      no  yes
sl@0
  1236
    package vsatisfies 8.4 7.3 8.4
sl@0
  1237
} 1
sl@0
  1238
sl@0
  1239
test package-vsatisfies-3.2 "package vsatisfies multiple" tip268 {
sl@0
  1240
    #                        yes  yes
sl@0
  1241
    package vsatisfies 8.4.2 8.4  8.4.1
sl@0
  1242
} 1
sl@0
  1243
sl@0
  1244
test package-vsatisfies-3.3 "package vsatisfies multiple" tip268 {
sl@0
  1245
    #                      no  no
sl@0
  1246
    package vsatisfies 8.4 7.3 6.1
sl@0
  1247
} 0
sl@0
  1248
sl@0
  1249
sl@0
  1250
proc prefer {args} {
sl@0
  1251
    set ip [interp create]
sl@0
  1252
    lappend res [$ip eval {package prefer}]
sl@0
  1253
    foreach mode $args {
sl@0
  1254
	lappend res [$ip eval [list package prefer $mode]]
sl@0
  1255
    }
sl@0
  1256
    interp delete $ip
sl@0
  1257
    return $res
sl@0
  1258
}
sl@0
  1259
sl@0
  1260
test package-prefer-1.0 {default} tip268 {
sl@0
  1261
    prefer
sl@0
  1262
} stable
sl@0
  1263
sl@0
  1264
test package-prefer-1.1 {default} tip268 {
sl@0
  1265
    set   ::env(TCL_PKG_PREFER_LATEST) stable ; # value not relevant!
sl@0
  1266
    set res [prefer]
sl@0
  1267
    unset ::env(TCL_PKG_PREFER_LATEST)
sl@0
  1268
    set res
sl@0
  1269
} latest
sl@0
  1270
sl@0
  1271
test package-prefer-2.0 {wrong\#args} tip268 {
sl@0
  1272
    catch {package prefer foo bar} msg
sl@0
  1273
    set msg
sl@0
  1274
} {wrong # args: should be "package prefer ?latest|stable?"}
sl@0
  1275
sl@0
  1276
test package-prefer-2.1 {bogus argument} tip268 {
sl@0
  1277
    catch {package prefer foo} msg
sl@0
  1278
    set msg
sl@0
  1279
} {bad preference "foo": must be latest or stable}
sl@0
  1280
sl@0
  1281
test package-prefer-3.0 {set, keep} tip268 {
sl@0
  1282
    package prefer stable
sl@0
  1283
} stable
sl@0
  1284
sl@0
  1285
test package-prefer-3.1 {set stable, keep} tip268 {
sl@0
  1286
    prefer stable
sl@0
  1287
} {stable stable}
sl@0
  1288
sl@0
  1289
test package-prefer-3.2 {set latest, change} tip268 {
sl@0
  1290
    prefer latest
sl@0
  1291
} {stable latest}
sl@0
  1292
sl@0
  1293
test package-prefer-3.3 {set latest, keep} tip268 {
sl@0
  1294
    prefer  latest latest
sl@0
  1295
} {stable latest latest}
sl@0
  1296
sl@0
  1297
test package-prefer-3.4 {set stable, rejected} tip268 {
sl@0
  1298
    prefer latest stable
sl@0
  1299
} {stable latest latest}
sl@0
  1300
sl@0
  1301
rename prefer {}
sl@0
  1302
sl@0
  1303
sl@0
  1304
set auto_path $oldPath
sl@0
  1305
package unknown $oldPkgUnknown
sl@0
  1306
concat
sl@0
  1307
sl@0
  1308
cleanupTests
sl@0
  1309
}
sl@0
  1310
sl@0
  1311
# cleanup
sl@0
  1312
interp delete $i
sl@0
  1313
::tcltest::cleanupTests
sl@0
  1314
return