os/persistentdata/persistentstorage/sqlite3api/TEST/TCL/tcldistribution/tests/opt.test
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
# Package covered:  opt1.0/optparse.tcl
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) 1991-1993 The Regents of the University of California.
sl@0
     8
# Copyright (c) 1994-1997 Sun Microsystems, Inc.
sl@0
     9
# Copyright (c) 1998-1999 by Scriptics Corporation.
sl@0
    10
#
sl@0
    11
# See the file "license.terms" for information on usage and redistribution
sl@0
    12
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
sl@0
    13
#
sl@0
    14
# RCS: @(#) $Id: opt.test,v 1.8 2000/07/18 21:30:41 ericm Exp $
sl@0
    15
sl@0
    16
if {[lsearch [namespace children] ::tcltest] == -1} {
sl@0
    17
    package require tcltest
sl@0
    18
    namespace import -force ::tcltest::*
sl@0
    19
}
sl@0
    20
sl@0
    21
# the package we are going to test
sl@0
    22
package require opt 0.4.1
sl@0
    23
sl@0
    24
# we are using implementation specifics to test the package
sl@0
    25
sl@0
    26
sl@0
    27
#### functions tests #####
sl@0
    28
sl@0
    29
set n $::tcl::OptDescN
sl@0
    30
sl@0
    31
test opt-1.1 {OptKeyRegister / check that auto allocation is skipping existing keys} {
sl@0
    32
    list [::tcl::OptKeyRegister {} $n] [::tcl::OptKeyRegister {} [expr $n+1]] [::tcl::OptKeyRegister {}]
sl@0
    33
} "$n [expr $n+1] [expr $n+2]"
sl@0
    34
sl@0
    35
test opt-2.1 {OptKeyDelete} {
sl@0
    36
    list [::tcl::OptKeyRegister {} testkey] \
sl@0
    37
	    [info exists ::tcl::OptDesc(testkey)] \
sl@0
    38
	    [::tcl::OptKeyDelete testkey] \
sl@0
    39
	    [info exists ::tcl::OptDesc(testkey)]
sl@0
    40
} {testkey 1 {} 0}
sl@0
    41
sl@0
    42
sl@0
    43
test opt-3.1 {OptParse / temp key is removed} {
sl@0
    44
    set n $::tcl::OptDescN
sl@0
    45
    set prev [array names ::tcl::OptDesc]
sl@0
    46
    ::tcl::OptKeyRegister {} $n
sl@0
    47
    list [info exists ::tcl::OptDesc($n)]\
sl@0
    48
	    [::tcl::OptKeyDelete $n]\
sl@0
    49
	    [::tcl::OptParse {{-foo}} {}]\
sl@0
    50
	    [info exists ::tcl::OptDesc($n)]\
sl@0
    51
	    [expr {"[lsort $prev]"=="[lsort [array names ::tcl::OptDesc]]"}]
sl@0
    52
} {1 {} {} 0 1}
sl@0
    53
sl@0
    54
sl@0
    55
test opt-3.2 {OptParse / temp key is removed even on errors} {
sl@0
    56
    set n $::tcl::OptDescN
sl@0
    57
    catch {::tcl::OptKeyDelete $n}
sl@0
    58
    list [catch {::tcl::OptParse {{-foo}} {-blah}}] \
sl@0
    59
	    [info exists ::tcl::OptDesc($n)]
sl@0
    60
} {1 0}
sl@0
    61
sl@0
    62
test opt-4.1 {OptProc} {
sl@0
    63
    ::tcl::OptProc optTest {} {}
sl@0
    64
    optTest ;
sl@0
    65
    ::tcl::OptKeyDelete optTest
sl@0
    66
} {}
sl@0
    67
sl@0
    68
sl@0
    69
test opt-5.1 {OptProcArgGiven} {
sl@0
    70
    ::tcl::OptProc optTest {{-foo}} {
sl@0
    71
	if {[::tcl::OptProcArgGiven "-foo"]} {
sl@0
    72
	    return 1
sl@0
    73
	} else {
sl@0
    74
	    return 0
sl@0
    75
	}
sl@0
    76
    }
sl@0
    77
    list [optTest] [optTest -f] [optTest -F] [optTest -fOO]
sl@0
    78
} {0 1 1 1}
sl@0
    79
sl@0
    80
test opt-6.1 {OptKeyParse} {
sl@0
    81
    ::tcl::OptKeyRegister {} test;
sl@0
    82
    list [catch {::tcl::OptKeyParse test {-help}} msg] $msg
sl@0
    83
} {1 {Usage information:
sl@0
    84
    Var/FlagName Type Value Help
sl@0
    85
    ------------ ---- ----- ----
sl@0
    86
    ( -help                 gives this help )}}
sl@0
    87
sl@0
    88
sl@0
    89
test opt-7.1 {OptCheckType} {
sl@0
    90
    list \
sl@0
    91
	    [::tcl::OptCheckType 23 int] \
sl@0
    92
	    [::tcl::OptCheckType 23 float] \
sl@0
    93
	    [::tcl::OptCheckType true boolean] \
sl@0
    94
	    [::tcl::OptCheckType "-blah" any] \
sl@0
    95
	    [::tcl::OptCheckType {a b c} list] \
sl@0
    96
	    [::tcl::OptCheckType maYbe choice {yes maYbe no}] \
sl@0
    97
	    [catch {::tcl::OptCheckType "-blah" string}] \
sl@0
    98
	    [catch {::tcl::OptCheckType 6 boolean}] \
sl@0
    99
	    [catch {::tcl::OptCheckType x float}] \
sl@0
   100
	    [catch {::tcl::OptCheckType "a \{ c" list}] \
sl@0
   101
	    [catch {::tcl::OptCheckType 2.3 int}] \
sl@0
   102
	    [catch {::tcl::OptCheckType foo choice {x y Foo z}}]
sl@0
   103
} {23 23.0 1 -blah {a b c} maYbe 1 1 1 1 1 1}
sl@0
   104
sl@0
   105
sl@0
   106
test opt-8.1 {List utilities} {
sl@0
   107
    ::tcl::Lempty {}
sl@0
   108
} 1
sl@0
   109
test opt-8.2 {List utilities} {
sl@0
   110
    ::tcl::Lempty {a b c}
sl@0
   111
} 0
sl@0
   112
test opt-8.3 {List utilities} {
sl@0
   113
    ::tcl::Lget {a {b c d} e} {1 2}
sl@0
   114
} d
sl@0
   115
sl@0
   116
test opt-8.4 {List utilities} {
sl@0
   117
    set l {a {b c d e} f}
sl@0
   118
    ::tcl::Lvarset l {1 2} D
sl@0
   119
    set l
sl@0
   120
} {a {b c D e} f}
sl@0
   121
sl@0
   122
test opt-8.5 {List utilities} {
sl@0
   123
    set l {a b c}
sl@0
   124
    ::tcl::Lvarset1 l 6 X
sl@0
   125
    set l
sl@0
   126
} {a b c {} {} {} X}
sl@0
   127
sl@0
   128
test opt-8.6 {List utilities} {
sl@0
   129
    set l {a {b c 7 e} f}
sl@0
   130
    ::tcl::Lvarincr l {1 2}
sl@0
   131
    set l
sl@0
   132
} {a {b c 8 e} f}
sl@0
   133
sl@0
   134
test opt-8.7 {List utilities} {
sl@0
   135
    set l {a {b c 7 e} f}
sl@0
   136
    ::tcl::Lvarincr l {1 2} -9
sl@0
   137
    set l
sl@0
   138
} {a {b c -2 e} f}
sl@0
   139
sl@0
   140
test opt-8.10 {List utilities} {
sl@0
   141
    set l {a {b c 7 e} f}
sl@0
   142
    ::tcl::Lvarpop l
sl@0
   143
    set l
sl@0
   144
} {{b c 7 e} f}
sl@0
   145
sl@0
   146
test opt-8.11 {List utilities} {
sl@0
   147
    catch {unset x}
sl@0
   148
    set l {a {b c 7 e} f}
sl@0
   149
    list [::tcl::Lassign $l u v w x] \
sl@0
   150
	    $u $v $w [info exists x]
sl@0
   151
} {3 a {b c 7 e} f 0}
sl@0
   152
sl@0
   153
test opt-9.1 {Misc utilities} {
sl@0
   154
    catch {unset v}
sl@0
   155
    ::tcl::SetMax v 3
sl@0
   156
    ::tcl::SetMax v 7
sl@0
   157
    ::tcl::SetMax v 6
sl@0
   158
    set v
sl@0
   159
} 7
sl@0
   160
sl@0
   161
test opt-9.2 {Misc utilities} {
sl@0
   162
    catch {unset v}
sl@0
   163
    ::tcl::SetMin v 3
sl@0
   164
    ::tcl::SetMin v -7
sl@0
   165
    ::tcl::SetMin v 1
sl@0
   166
    set v
sl@0
   167
} -7
sl@0
   168
sl@0
   169
#### behaviour tests #####
sl@0
   170
sl@0
   171
test opt-10.1 {ambigous flags} {
sl@0
   172
    ::tcl::OptProc optTest {{-fla} {-other} {-flag2xyz} {-flag3xyz}} {}
sl@0
   173
    catch {optTest -fL} msg
sl@0
   174
    set msg
sl@0
   175
} {ambigous option "-fL", choose from:
sl@0
   176
    -fla      boolflag (false) 
sl@0
   177
    -flag2xyz boolflag (false) 
sl@0
   178
    -flag3xyz boolflag (false) }
sl@0
   179
sl@0
   180
test opt-10.2 {non ambigous flags} {
sl@0
   181
    ::tcl::OptProc optTest {{-flag1xyz} {-other} {-flag2xyz} {-flag3xyz}} {
sl@0
   182
	return $flag2xyz
sl@0
   183
    }
sl@0
   184
    optTest -fLaG2
sl@0
   185
} 1
sl@0
   186
sl@0
   187
test opt-10.3 {non ambigous flags because of exact match} {
sl@0
   188
    ::tcl::OptProc optTest {{-flag1x} {-other} {-flag1} {-flag1xy}} {
sl@0
   189
	return $flag1
sl@0
   190
    }
sl@0
   191
    optTest -flAg1
sl@0
   192
} 1
sl@0
   193
sl@0
   194
test opt-10.4 {ambigous flags, not exact match} {
sl@0
   195
    ::tcl::OptProc optTest {{-flag1xy} {-other} {-flag1} {-flag1xyz}} {
sl@0
   196
	return $flag1
sl@0
   197
    }
sl@0
   198
    catch {optTest -fLag1X} msg
sl@0
   199
    set msg
sl@0
   200
} {ambigous option "-fLag1X", choose from:
sl@0
   201
    -flag1xy  boolflag (false) 
sl@0
   202
    -flag1xyz boolflag (false) }
sl@0
   203
sl@0
   204
sl@0
   205
sl@0
   206
# medium size overall test example: (defined once)
sl@0
   207
::tcl::OptProc optTest {
sl@0
   208
    {cmd -choice {print save delete} "sub command to choose"}
sl@0
   209
    {-allowBoing -boolean true}
sl@0
   210
    {arg2 -string "this is help"}
sl@0
   211
    {?arg3? 7 "optional number"}
sl@0
   212
    {-moreflags}
sl@0
   213
} {
sl@0
   214
    list $cmd $allowBoing $arg2 $arg3 $moreflags
sl@0
   215
}
sl@0
   216
sl@0
   217
test opt-10.5 {medium size overall test} {
sl@0
   218
    list [catch {optTest} msg] $msg
sl@0
   219
} {1 {no value given for parameter "cmd" (use -help for full usage) :
sl@0
   220
    cmd choice (print save delete) sub command to choose}}
sl@0
   221
sl@0
   222
sl@0
   223
test opt-10.6 {medium size overall test} {
sl@0
   224
    list [catch {optTest -help} msg] $msg
sl@0
   225
} {1 {Usage information:
sl@0
   226
    Var/FlagName Type     Value   Help
sl@0
   227
    ------------ ----     -----   ----
sl@0
   228
    ( -help                       gives this help )
sl@0
   229
    cmd          choice   (print save delete) sub command to choose
sl@0
   230
    -allowBoing  boolean  (true)  
sl@0
   231
    arg2         string   ()      this is help
sl@0
   232
    ?arg3?       int      (7)     optional number
sl@0
   233
    -moreflags   boolflag (false) }}
sl@0
   234
sl@0
   235
test opt-10.7 {medium size overall test} {
sl@0
   236
    optTest save tst
sl@0
   237
} {save 1 tst 7 0}
sl@0
   238
sl@0
   239
test opt-10.8 {medium size overall test} {
sl@0
   240
    optTest save -allowBoing false -- 8
sl@0
   241
} {save 0 8 7 0}
sl@0
   242
sl@0
   243
test opt-10.9 {medium size overall test} {
sl@0
   244
    optTest save tst -m --
sl@0
   245
} {save 1 tst 7 1}
sl@0
   246
sl@0
   247
test opt-10.10 {medium size overall test} {
sl@0
   248
    list [catch {optTest save tst foo} msg] [lindex [split $msg "\n"] 0]
sl@0
   249
} {1 {too many arguments (unexpected argument(s): foo), usage:}}
sl@0
   250
sl@0
   251
test opt-11.1 {too many args test 2} {
sl@0
   252
    set key [::tcl::OptKeyRegister {-foo}]
sl@0
   253
    list [catch {::tcl::OptKeyParse $key {-foo blah}} msg] $msg\
sl@0
   254
	    [::tcl::OptKeyDelete $key]
sl@0
   255
} {1 {too many arguments (unexpected argument(s): blah), usage:
sl@0
   256
    Var/FlagName Type     Value   Help
sl@0
   257
    ------------ ----     -----   ----
sl@0
   258
    ( -help                       gives this help )
sl@0
   259
    -foo         boolflag (false) } {}}
sl@0
   260
test opt-11.2 {default value for args} {
sl@0
   261
    set args {}
sl@0
   262
    set key [::tcl::OptKeyRegister {{args -list {a b c} "args..."}}]
sl@0
   263
    ::tcl::OptKeyParse $key {}
sl@0
   264
    ::tcl::OptKeyDelete $key
sl@0
   265
    set args
sl@0
   266
} {a b c}
sl@0
   267
sl@0
   268
# cleanup
sl@0
   269
::tcltest::cleanupTests
sl@0
   270
return
sl@0
   271
sl@0
   272
sl@0
   273
sl@0
   274
sl@0
   275
sl@0
   276
sl@0
   277
sl@0
   278
sl@0
   279
sl@0
   280
sl@0
   281
sl@0
   282