blob: 1f76c3e8009a13f8d9101995b873dadfc697e328 [file] [log] [blame]
kate.wardf51c6162008-06-17 16:38:35 +00001#! /bin/sh
2# vim:et:ft=sh:sts=2:sw=2
3#
kate.wardf51c6162008-06-17 16:38:35 +00004# shFlags unit test for the flag definition methods
5
6# load test helpers
7. ./shflags_test_helpers
8
kate.wardf51c6162008-06-17 16:38:35 +00009#------------------------------------------------------------------------------
10# suite tests
11#
12
13testFlagsDefine()
14{
kate.wardf51c6162008-06-17 16:38:35 +000015 # no arguments
kate.ward20d06782008-10-21 19:57:19 +000016 _flags_define >"${stdoutF}" 2>"${stderrF}"
17 assertFalse '_flags_define() with no arguments should have failed.' $?
kate.wardf99f4852008-11-12 20:14:45 +000018 assertErrorMsg '' 'no arguments'
kate.wardf51c6162008-06-17 16:38:35 +000019
20 # one argument
kate.ward20d06782008-10-21 19:57:19 +000021 _flags_define arg1 >"${stdoutF}" 2>"${stderrF}"
22 assertFalse '_flags_define() call with one argument should fail' $?
kate.wardf99f4852008-11-12 20:14:45 +000023 assertErrorMsg '' 'one argument'
kate.wardf51c6162008-06-17 16:38:35 +000024
25 # two arguments
kate.ward20d06782008-10-21 19:57:19 +000026 _flags_define arg1 arg2 >"${stdoutF}" 2>"${stderrF}"
27 assertFalse '_flags_define() call with two arguments should fail' $?
kate.wardf99f4852008-11-12 20:14:45 +000028 assertErrorMsg '' 'two arguments'
kate.wardf51c6162008-06-17 16:38:35 +000029
30 # three arguments
kate.ward20d06782008-10-21 19:57:19 +000031 _flags_define arg1 arg2 arg3 >"${stdoutF}" 2>"${stderrF}"
32 assertFalse '_flags_define() call with three arguments should fail' $?
kate.wardf99f4852008-11-12 20:14:45 +000033 assertErrorMsg '' 'three arguments'
kate.wardf51c6162008-06-17 16:38:35 +000034
35 # multiple definition -- assumes working boolean definition (tested elsewhere)
36 _flags_define ${__FLAGS_TYPE_BOOLEAN} multiDefBool true 'multi def #1' m
kate.ward20d06782008-10-21 19:57:19 +000037 _flags_define ${__FLAGS_TYPE_BOOLEAN} multiDefBool false 'multi def #2' m \
38 >"${stdoutF}" 2>"${stderrF}"
39 assertFalse '_flags_define() with existing flag name should fail' $?
kate.wardf51c6162008-06-17 16:38:35 +000040 assertTrue \
41 '_flags_define() should not overwrite previously defined default.' \
42 "${FLAGS_multiDefBool:-}"
kate.wardf99f4852008-11-12 20:14:45 +000043 assertWarnMsg '' 'existing flag'
kate.wardf51c6162008-06-17 16:38:35 +000044
kate.wardda8d2c02011-06-28 13:26:02 +000045 # duplicate dashed and underscored definition
46 _flags_define ${__FLAGS_TYPE_STRING} long-name 'foo' 'dashed name' l
47 _flags_define ${__FLAGS_TYPE_STRING} long_name 'bar' 'underscored name' l \
48 >"${stdoutF}" 2>"${stderrF}"
49 assertFalse '_flags_define() with existing flag name should fail' $?
50 assertEquals \
51 '_flags_define() should not overwrite previously defined default.' \
52 "${FLAGS_long_name}" 'foo'
53 assertWarnMsg '' 'already exists'
54
kate.wardf51c6162008-06-17 16:38:35 +000055 # TODO(kward): test requirement of enhanced getopt
56
57 # invalid type
kate.wardf99f4852008-11-12 20:14:45 +000058 _flags_define invalid arg2 arg3 arg4 i >"${stdoutF}" 2>"${stderrF}"
59 assertFalse '_flags_define() with "invalid" type should have failed.' $?
60 assertErrorMsg 'unrecognized flag type' 'invalid type'
kate.wardf51c6162008-06-17 16:38:35 +000061}
62
63testBoolean()
64{
65 # test true defaults
66 for default in 'true' 't' 0; do
67 flags_reset
68 DEFINE_boolean boolVal "${default}" 'my boolean' b
69 rtrn=$?
70 assertTrue \
kate.ward20d06782008-10-21 19:57:19 +000071 "DEFINE_boolean() call with default of '${default}' failed." \
kate.wardf51c6162008-06-17 16:38:35 +000072 "${FLAGS_boolVal:-}"
73 assertTrue \
kate.ward20d06782008-10-21 19:57:19 +000074 "DEFINE_boolean() call with default of '${default}' returned faliure." \
kate.wardf51c6162008-06-17 16:38:35 +000075 ${rtrn}
76 done
77
78 # test false defaults
79 for default in 'false' 'f' 1; do
80 flags_reset
81 DEFINE_boolean boolVal "${default}" 'my boolean' b
82 rtrn=$?
83 assertFalse \
kate.ward20d06782008-10-21 19:57:19 +000084 "DEFINE_boolean() call with default of '${default}' failed." \
kate.wardf51c6162008-06-17 16:38:35 +000085 "${FLAGS_boolVal:-}"
86 assertTrue \
kate.ward20d06782008-10-21 19:57:19 +000087 "DEFINE_boolean() call with default of '${default}' returned faliure." \
kate.wardf51c6162008-06-17 16:38:35 +000088 ${rtrn}
89 done
90
91 # test invalid default
92 flags_reset
93 DEFINE_boolean boolVal 'invalid' 'my boolean' b >"${stdoutF}" 2>"${stderrF}"
kate.ward20d06782008-10-21 19:57:19 +000094 assertFalse 'DEFINE_boolean() call with invalid default did not fail.' $?
95 assertErrorMsg
kate.wardf51c6162008-06-17 16:38:35 +000096}
97
98testFloat()
99{
100 # test valid defaults
kate.ward60095fa2013-01-05 13:55:29 +0000101 for default in ${TH_FLOAT_VALID}; do
kate.wardf51c6162008-06-17 16:38:35 +0000102 flags_reset
103 DEFINE_float floatVal ${default} "float: ${default}" f
104 rtrn=$?
kate.ward20d06782008-10-21 19:57:19 +0000105 assertSame "DEFINE_float() call with valid default failed." \
kate.wardf51c6162008-06-17 16:38:35 +0000106 ${default} "${FLAGS_floatVal:-}"
107 assertTrue \
kate.ward20d06782008-10-21 19:57:19 +0000108 "DEFINE_float() call with valid default of '${default}' returned faliure." \
kate.wardf51c6162008-06-17 16:38:35 +0000109 ${rtrn}
110 done
111
112 # test invalid defaults
113 flags_reset
114 DEFINE_float floatVal 'invalid' 'invalid float: string' f \
115 >"${stdoutF}" 2>"${stderrF}"
kate.ward20d06782008-10-21 19:57:19 +0000116 assertFalse 'DEFINE_float() call with string value default did not fail.' $?
kate.wardf51c6162008-06-17 16:38:35 +0000117 assertErrorMsg
118}
119
120testInteger()
121{
122 # test valid defaults
kate.ward60095fa2013-01-05 13:55:29 +0000123 for default in ${TH_INT_VALID}; do
kate.wardf51c6162008-06-17 16:38:35 +0000124 flags_reset
125 DEFINE_integer intVal ${default} "integer: ${default}" i
126 rtrn=$?
127 assertSame \
128 "DEFINE_integer() call with valid default failed." \
129 ${default} "${FLAGS_intVal:-}"
130 assertTrue \
kate.ward20d06782008-10-21 19:57:19 +0000131 "DEFINE_integer() call with valid default of '${default}' returned failure." \
kate.wardf51c6162008-06-17 16:38:35 +0000132 ${rtrn}
133 done
134
135 # test invalid defaults
136 flags_reset
137 DEFINE_integer intVal 1.234 'invalid integer: float' i \
138 >"${stdoutF}" 2>"${stderrF}"
kate.ward20d06782008-10-21 19:57:19 +0000139 assertFalse 'DEFINE_integer() call with float value default did not fail.' $?
140 assertErrorMsg 'invalid default' 'float default'
kate.wardf51c6162008-06-17 16:38:35 +0000141
142 DEFINE_integer intVal -1.234 'invalid integer: negative float' i \
143 >"${stdoutF}" 2>"${stderrF}"
144 assertFalse \
145 'DEFINE_integer() call with negative float value default did not fail.' \
146 $?
kate.ward20d06782008-10-21 19:57:19 +0000147 assertErrorMsg 'invalid default' 'negative float default'
kate.wardf51c6162008-06-17 16:38:35 +0000148
149 DEFINE_integer intVal 'invalid' 'invalid integer: string' i \
150 >"${stdoutF}" 2>"${stderrF}"
151 assertFalse \
152 'DEFINE_integer() call with string value default did not fail.' \
153 $?
kate.ward20d06782008-10-21 19:57:19 +0000154 assertErrorMsg 'invalid default' 'string default'
kate.wardf51c6162008-06-17 16:38:35 +0000155}
156
157testString()
158{
159 # test valid defaults
kate.ward60095fa2013-01-05 13:55:29 +0000160 for default in \
161 ${TH_BOOL_VALID} \
162 ${TH_FLOAT_VALID} \
163 ${TH_INT_VALID} \
164 'also valid'
165 do
kate.wardf51c6162008-06-17 16:38:35 +0000166 flags_reset
167 DEFINE_string strVal "${default}" "string: ${default}" s
168 rtrn=$?
169 assertSame \
170 "DEFINE_string() call with valid default failed." \
171 "${default}" "${FLAGS_strVal:-}"
172 assertTrue \
kate.ward20d06782008-10-21 19:57:19 +0000173 "DEFINE_string() call with valid default of '${default}' returned faliure." \
kate.wardf51c6162008-06-17 16:38:35 +0000174 ${rtrn}
175 done
176
177 # test "empty" strings
178 flags_reset
179 DEFINE_string str '' "string: empty single quotes" s
180 rtrn=$?
181 assertSame \
182 "DEFINE_string() call with valid default failed." \
kate.ward20d06782008-10-21 19:57:19 +0000183 '' "${FLAGS_str:-}"
kate.wardf51c6162008-06-17 16:38:35 +0000184}
185
186testShortNameLength()
187{
188 # make sure short names are no longer than a single character
189 :
190}
191
kate.ward39913d12009-04-01 14:09:23 +0000192testFlagNameIsReserved()
193{
194 ( DEFINE_string TRUE '' 'true is a reserved flag name' t \
195 >"${stdoutF}" 2>"${stderrF}" )
196 rtrn=$?
197 assertEquals ${FLAGS_ERROR} ${rtrn}
kate.ward7a3c9c42009-04-24 00:12:35 +0000198 assertErrorMsg 'flag name (TRUE) is reserved'
kate.ward39913d12009-04-01 14:09:23 +0000199}
200
kate.wardf51c6162008-06-17 16:38:35 +0000201#------------------------------------------------------------------------------
202# suite functions
203#
204
205oneTimeSetUp()
206{
kate.ward1b600c52008-11-12 21:26:05 +0000207 th_oneTimeSetUp
kate.wardf51c6162008-06-17 16:38:35 +0000208}
209
kate.ward60095fa2013-01-05 13:55:29 +0000210tearDown()
kate.wardf51c6162008-06-17 16:38:35 +0000211{
212 flags_reset
213}
214
215# load and run shUnit2
216[ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0
217. ${TH_SHUNIT}