blob: c252d42aedbc3952310b0ee3b58f3edd14c6c432 [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 internal functions
5
6# load test helpers
7. ./shflags_test_helpers
8
kate.wardf51c6162008-06-17 16:38:35 +00009#------------------------------------------------------------------------------
10# suite tests
11#
12
kate.ward929261f2010-03-28 23:12:17 +000013testColumns()
14{
15 cols=`_flags_columns`
16 value=`expr "${cols}" : '\([0-9]*\)'`
17 assertNotNull "unexpected screen width (${cols})" "${value}"
18}
19
20testGenOptStr()
21{
22 _testGenOptStr '' ''
23
24 DEFINE_boolean bool false 'boolean value' b
25 _testGenOptStr 'b' 'bool'
26
27 DEFINE_float float 0.0 'float value' f
28 _testGenOptStr 'bf:' 'bool,float:'
29
30 DEFINE_integer int 0 'integer value' i
31 _testGenOptStr 'bf:i:' 'bool,float:,int:'
32
33 DEFINE_string str 0 'string value' s
34 _testGenOptStr 'bf:i:s:' 'bool,float:,int:,str:'
35
36 DEFINE_boolean help false 'show help' h
37 _testGenOptStr 'bf:i:s:h' 'bool,float:,int:,str:,help'
38}
39
40_testGenOptStr()
41{
42 short=$1
43 long=$2
44
45 result=`_flags_genOptStr ${__FLAGS_OPTSTR_SHORT}`
46 assertTrue 'short option string generation failed' $?
47 assertEquals "${short}" "${result}"
48
49 result=`_flags_genOptStr ${__FLAGS_OPTSTR_LONG}`
50 assertTrue 'long option string generation failed' $?
51 assertEquals "${long}" "${result}"
52}
53
kate.wardf51c6162008-06-17 16:38:35 +000054testGetFlagInfo()
55{
56 __flags_blah_foobar='1234'
57
58 rslt=`_flags_getFlagInfo 'blah' 'foobar'`
59 assertTrue 'request for valid flag info failed' $?
60 assertEquals 'invalid flag info returned' "${__flags_blah_foobar}" "${rslt}"
61
kate.ward1b600c52008-11-12 21:26:05 +000062 rslt=`_flags_getFlagInfo 'blah' 'hubbabubba' >"${stdoutF}" 2>"${stderrF}"`
kate.wardf51c6162008-06-17 16:38:35 +000063 assertEquals 'invalid flag did not result in an error' ${FLAGS_ERROR} $?
kate.wardcba92e52013-01-01 22:37:21 +000064 assertErrorMsg 'missing flag info variable'
kate.wardf51c6162008-06-17 16:38:35 +000065}
66
67testItemInList()
68{
69 list='this is a test'
70
71 _flags_itemInList 'is' ${list}
72 assertTrue 'unable to find leading string (this)' $?
73
74 _flags_itemInList 'is' ${list}
75 assertTrue 'unable to find string (is)' $?
76
77 _flags_itemInList 'is' ${list}
78 assertTrue 'unable to find trailing string (test)' $?
79
80 _flags_itemInList 'abc' ${list}
81 assertFalse 'found nonexistant string (abc)' $?
82
83 _flags_itemInList '' ${list}
84 assertFalse 'empty strings should not match' $?
85
86 _flags_itemInList 'blah' ''
87 assertFalse 'empty lists should not match' $?
88}
89
kate.warde10dd532013-01-04 21:52:23 +000090testValidBool()
kate.warddadc1642008-11-14 02:00:29 +000091{
kate.wardf51c6162008-06-17 16:38:35 +000092 # valid values
93 for value in ${TH_BOOL_VALID}; do
kate.warde10dd532013-01-04 21:52:23 +000094 _flags_validBool "${value}"
kate.wardf51c6162008-06-17 16:38:35 +000095 assertTrue "valid value (${value}) did not validate" $?
96 done
97
98 # invalid values
99 for value in ${TH_BOOL_INVALID}; do
kate.warde10dd532013-01-04 21:52:23 +0000100 _flags_validBool "${value}"
kate.wardf51c6162008-06-17 16:38:35 +0000101 assertFalse "invalid value (${value}) validated" $?
102 done
103}
104
kate.warde10dd532013-01-04 21:52:23 +0000105_testValidFloat()
kate.warddadc1642008-11-14 02:00:29 +0000106{
kate.wardf51c6162008-06-17 16:38:35 +0000107 # valid values
108 for value in ${TH_INT_VALID} ${TH_FLOAT_VALID}; do
kate.ward74178272013-01-14 22:17:05 +0000109 _flags_validFloat "${value}"
kate.wardf51c6162008-06-17 16:38:35 +0000110 assertTrue "valid value (${value}) did not validate" $?
111 done
112
113 # invalid values
114 for value in ${TH_FLOAT_INVALID}; do
kate.ward74178272013-01-14 22:17:05 +0000115 _flags_validFloat "${value}"
kate.wardf51c6162008-06-17 16:38:35 +0000116 assertFalse "invalid value (${value}) validated" $?
117 done
118}
119
kate.warde10dd532013-01-04 21:52:23 +0000120testValidFloatBuiltin()
kate.warddadc1642008-11-14 02:00:29 +0000121{
kate.ward74178272013-01-14 22:17:05 +0000122 _flags_useBuiltin || startSkipping
123 _testValidFloat
kate.warde10dd532013-01-04 21:52:23 +0000124}
125
126testValidFloatExpr()
127{
kate.ward74178272013-01-14 22:17:05 +0000128 (
129 _flags_useBuiltin() { return ${FLAGS_FALSE}; }
130 _testValidFloat
131 )
kate.warde10dd532013-01-04 21:52:23 +0000132}
133
134_testValidInt()
135{
kate.wardf51c6162008-06-17 16:38:35 +0000136 # valid values
137 for value in ${TH_INT_VALID}; do
kate.wardc66a5fc2013-01-12 23:10:15 +0000138 _flags_validInt "${value}"
kate.wardf51c6162008-06-17 16:38:35 +0000139 assertTrue "valid value (${value}) did not validate" $?
140 done
141
142 # invalid values
143 for value in ${TH_INT_INVALID}; do
kate.wardc66a5fc2013-01-12 23:10:15 +0000144 _flags_validInt "${value}"
kate.warde10dd532013-01-04 21:52:23 +0000145 assertFalse "invalid value (${value}) should not validate" $?
kate.wardf51c6162008-06-17 16:38:35 +0000146 done
147}
148
kate.warde10dd532013-01-04 21:52:23 +0000149testValidIntBuiltin()
150{
kate.ward74178272013-01-14 22:17:05 +0000151 _flags_useBuiltin || startSkipping
152 _testValidInt
kate.warde10dd532013-01-04 21:52:23 +0000153}
154
155testValidIntExpr()
156{
kate.wardc66a5fc2013-01-12 23:10:15 +0000157 (
158 _flags_useBuiltin() { return ${FLAGS_FALSE}; }
159 _testValidInt
160 )
kate.wardb0759202013-01-05 13:57:46 +0000161}
162
kate.wardc85fa862013-01-14 21:33:11 +0000163_testMath()
164{
kate.wardd87a1d92013-01-15 00:13:10 +0000165 result=`_flags_math 1`
166 assertTrue '1 failed' $?
167 assertEquals '1' 1 ${result}
kate.ward74178272013-01-14 22:17:05 +0000168
169 result=`_flags_math '1 + 2'`
170 assertTrue '1+2 failed' $?
171 assertEquals '1+2' 3 ${result}
172
kate.wardd87a1d92013-01-15 00:13:10 +0000173 result=`_flags_math '1 + 2 + 3'`
kate.ward74178272013-01-14 22:17:05 +0000174 assertTrue '1+2+3 failed' $?
175 assertEquals '1+2+3' 6 ${result}
176
177 result=`_flags_math`
178 assertFalse 'missing math succeeded' $?
kate.wardc85fa862013-01-14 21:33:11 +0000179}
180
kate.wardb0759202013-01-05 13:57:46 +0000181testMathBuiltin()
182{
kate.ward74178272013-01-14 22:17:05 +0000183 _flags_useBuiltin || startSkipping
184 _testMath
kate.wardb0759202013-01-05 13:57:46 +0000185}
186
kate.wardc85fa862013-01-14 21:33:11 +0000187testMathExpr()
188{
189 (
190 _flags_useBuiltin() { return ${FLAGS_FALSE}; }
191 _testMath
192 )
193}
194
195_testStrlen()
196{
197 len=`_flags_strlen`
kate.ward74178272013-01-14 22:17:05 +0000198 assertTrue 'missing argument failed' $?
kate.wardc85fa862013-01-14 21:33:11 +0000199 assertEquals 'missing argument' 0 ${len}
200
201 len=`_flags_strlen ''`
kate.ward74178272013-01-14 22:17:05 +0000202 assertTrue 'empty argument failed' $?
kate.wardc85fa862013-01-14 21:33:11 +0000203 assertEquals 'empty argument' 0 ${len}
204
205 len=`_flags_strlen abc123`
kate.ward74178272013-01-14 22:17:05 +0000206 assertTrue 'single-word failed' $?
kate.wardc85fa862013-01-14 21:33:11 +0000207 assertEquals 'single-word' 6 ${len}
208
209 len=`_flags_strlen 'This is a test'`
kate.ward74178272013-01-14 22:17:05 +0000210 assertTrue 'multi-word failed' $?
kate.wardc85fa862013-01-14 21:33:11 +0000211 assertEquals 'multi-word' 14 ${len}
212}
213
214testStrlenBuiltin()
215{
kate.ward74178272013-01-14 22:17:05 +0000216 _flags_useBuiltin || startSkipping
217 _testStrlen
kate.wardc85fa862013-01-14 21:33:11 +0000218}
219
220testStrlenExpr()
221{
222 (
223 _flags_useBuiltin() { return ${FLAGS_FALSE}; }
224 _testStrlen
225 )
226}
227
kate.wardf51c6162008-06-17 16:38:35 +0000228#------------------------------------------------------------------------------
229# suite functions
230#
231
232oneTimeSetUp()
233{
kate.ward1b600c52008-11-12 21:26:05 +0000234 th_oneTimeSetUp
kate.ward74178272013-01-14 22:17:05 +0000235
236 _flags_useBuiltin || \
237 th_warn 'Shell built-ins not supported. Some tests will be skipped.'
kate.wardf51c6162008-06-17 16:38:35 +0000238}
239
kate.wardc66a5fc2013-01-12 23:10:15 +0000240tearDown()
kate.wardf51c6162008-06-17 16:38:35 +0000241{
242 flags_reset
243}
244
245# load and run shUnit2
246[ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0
247. ${TH_SHUNIT}