blob: d5c6112db0e6c5e387e0e623107288226a669ca3 [file] [log] [blame]
kate.wardf51c6162008-06-17 16:38:35 +00001#! /bin/sh
kate.ward5ed38f02008-11-12 20:14:19 +00002# $Id$
kate.wardf51c6162008-06-17 16:38:35 +00003# vim:et:ft=sh:sts=2:sw=2
4#
5# Copyright 2008 Kate Ward. All Rights Reserved.
6# Released under the LGPL (GNU Lesser General Public License)
7#
8# Author: kate.ward@forestent.com (Kate Ward)
9#
10# shFlags unit test for the internal functions
11
12# load test helpers
13. ./shflags_test_helpers
14
kate.wardf51c6162008-06-17 16:38:35 +000015#------------------------------------------------------------------------------
16# suite tests
17#
18
kate.ward929261f2010-03-28 23:12:17 +000019testColumns()
20{
21 cols=`_flags_columns`
22 value=`expr "${cols}" : '\([0-9]*\)'`
23 assertNotNull "unexpected screen width (${cols})" "${value}"
24}
25
26testGenOptStr()
27{
28 _testGenOptStr '' ''
29
30 DEFINE_boolean bool false 'boolean value' b
31 _testGenOptStr 'b' 'bool'
32
33 DEFINE_float float 0.0 'float value' f
34 _testGenOptStr 'bf:' 'bool,float:'
35
36 DEFINE_integer int 0 'integer value' i
37 _testGenOptStr 'bf:i:' 'bool,float:,int:'
38
39 DEFINE_string str 0 'string value' s
40 _testGenOptStr 'bf:i:s:' 'bool,float:,int:,str:'
41
42 DEFINE_boolean help false 'show help' h
43 _testGenOptStr 'bf:i:s:h' 'bool,float:,int:,str:,help'
44}
45
46_testGenOptStr()
47{
48 short=$1
49 long=$2
50
51 result=`_flags_genOptStr ${__FLAGS_OPTSTR_SHORT}`
52 assertTrue 'short option string generation failed' $?
53 assertEquals "${short}" "${result}"
54
55 result=`_flags_genOptStr ${__FLAGS_OPTSTR_LONG}`
56 assertTrue 'long option string generation failed' $?
57 assertEquals "${long}" "${result}"
58}
59
kate.wardf51c6162008-06-17 16:38:35 +000060testGetFlagInfo()
61{
62 __flags_blah_foobar='1234'
63
64 rslt=`_flags_getFlagInfo 'blah' 'foobar'`
65 assertTrue 'request for valid flag info failed' $?
66 assertEquals 'invalid flag info returned' "${__flags_blah_foobar}" "${rslt}"
67
kate.ward1b600c52008-11-12 21:26:05 +000068 rslt=`_flags_getFlagInfo 'blah' 'hubbabubba' >"${stdoutF}" 2>"${stderrF}"`
kate.wardf51c6162008-06-17 16:38:35 +000069 assertEquals 'invalid flag did not result in an error' ${FLAGS_ERROR} $?
kate.wardcba92e52013-01-01 22:37:21 +000070 assertErrorMsg 'missing flag info variable'
kate.wardf51c6162008-06-17 16:38:35 +000071}
72
73testItemInList()
74{
75 list='this is a test'
76
77 _flags_itemInList 'is' ${list}
78 assertTrue 'unable to find leading string (this)' $?
79
80 _flags_itemInList 'is' ${list}
81 assertTrue 'unable to find string (is)' $?
82
83 _flags_itemInList 'is' ${list}
84 assertTrue 'unable to find trailing string (test)' $?
85
86 _flags_itemInList 'abc' ${list}
87 assertFalse 'found nonexistant string (abc)' $?
88
89 _flags_itemInList '' ${list}
90 assertFalse 'empty strings should not match' $?
91
92 _flags_itemInList 'blah' ''
93 assertFalse 'empty lists should not match' $?
94}
95
kate.warde10dd532013-01-04 21:52:23 +000096testValidBool()
kate.warddadc1642008-11-14 02:00:29 +000097{
kate.wardf51c6162008-06-17 16:38:35 +000098 # valid values
99 for value in ${TH_BOOL_VALID}; do
kate.warde10dd532013-01-04 21:52:23 +0000100 _flags_validBool "${value}"
kate.wardf51c6162008-06-17 16:38:35 +0000101 assertTrue "valid value (${value}) did not validate" $?
102 done
103
104 # invalid values
105 for value in ${TH_BOOL_INVALID}; do
kate.warde10dd532013-01-04 21:52:23 +0000106 _flags_validBool "${value}"
kate.wardf51c6162008-06-17 16:38:35 +0000107 assertFalse "invalid value (${value}) validated" $?
108 done
109}
110
kate.warde10dd532013-01-04 21:52:23 +0000111_testValidFloat()
kate.warddadc1642008-11-14 02:00:29 +0000112{
kate.wardf51c6162008-06-17 16:38:35 +0000113 # valid values
114 for value in ${TH_INT_VALID} ${TH_FLOAT_VALID}; do
kate.ward74178272013-01-14 22:17:05 +0000115 _flags_validFloat "${value}"
kate.wardf51c6162008-06-17 16:38:35 +0000116 assertTrue "valid value (${value}) did not validate" $?
117 done
118
119 # invalid values
120 for value in ${TH_FLOAT_INVALID}; do
kate.ward74178272013-01-14 22:17:05 +0000121 _flags_validFloat "${value}"
kate.wardf51c6162008-06-17 16:38:35 +0000122 assertFalse "invalid value (${value}) validated" $?
123 done
124}
125
kate.warde10dd532013-01-04 21:52:23 +0000126testValidFloatBuiltin()
kate.warddadc1642008-11-14 02:00:29 +0000127{
kate.ward74178272013-01-14 22:17:05 +0000128 _flags_useBuiltin || startSkipping
129 _testValidFloat
kate.warde10dd532013-01-04 21:52:23 +0000130}
131
132testValidFloatExpr()
133{
kate.ward74178272013-01-14 22:17:05 +0000134 (
135 _flags_useBuiltin() { return ${FLAGS_FALSE}; }
136 _testValidFloat
137 )
kate.warde10dd532013-01-04 21:52:23 +0000138}
139
140_testValidInt()
141{
kate.wardf51c6162008-06-17 16:38:35 +0000142 # valid values
143 for value in ${TH_INT_VALID}; do
kate.wardc66a5fc2013-01-12 23:10:15 +0000144 _flags_validInt "${value}"
kate.wardf51c6162008-06-17 16:38:35 +0000145 assertTrue "valid value (${value}) did not validate" $?
146 done
147
148 # invalid values
149 for value in ${TH_INT_INVALID}; do
kate.wardc66a5fc2013-01-12 23:10:15 +0000150 _flags_validInt "${value}"
kate.warde10dd532013-01-04 21:52:23 +0000151 assertFalse "invalid value (${value}) should not validate" $?
kate.wardf51c6162008-06-17 16:38:35 +0000152 done
153}
154
kate.warde10dd532013-01-04 21:52:23 +0000155testValidIntBuiltin()
156{
kate.ward74178272013-01-14 22:17:05 +0000157 _flags_useBuiltin || startSkipping
158 _testValidInt
kate.warde10dd532013-01-04 21:52:23 +0000159}
160
161testValidIntExpr()
162{
kate.wardc66a5fc2013-01-12 23:10:15 +0000163 (
164 _flags_useBuiltin() { return ${FLAGS_FALSE}; }
165 _testValidInt
166 )
kate.wardb0759202013-01-05 13:57:46 +0000167}
168
kate.wardc85fa862013-01-14 21:33:11 +0000169_testMath()
170{
kate.wardd87a1d92013-01-15 00:13:10 +0000171 result=`_flags_math 1`
172 assertTrue '1 failed' $?
173 assertEquals '1' 1 ${result}
kate.ward74178272013-01-14 22:17:05 +0000174
175 result=`_flags_math '1 + 2'`
176 assertTrue '1+2 failed' $?
177 assertEquals '1+2' 3 ${result}
178
kate.wardd87a1d92013-01-15 00:13:10 +0000179 result=`_flags_math '1 + 2 + 3'`
kate.ward74178272013-01-14 22:17:05 +0000180 assertTrue '1+2+3 failed' $?
181 assertEquals '1+2+3' 6 ${result}
182
183 result=`_flags_math`
184 assertFalse 'missing math succeeded' $?
kate.wardc85fa862013-01-14 21:33:11 +0000185}
186
kate.wardb0759202013-01-05 13:57:46 +0000187testMathBuiltin()
188{
kate.ward74178272013-01-14 22:17:05 +0000189 _flags_useBuiltin || startSkipping
190 _testMath
kate.wardb0759202013-01-05 13:57:46 +0000191}
192
kate.wardc85fa862013-01-14 21:33:11 +0000193testMathExpr()
194{
195 (
196 _flags_useBuiltin() { return ${FLAGS_FALSE}; }
197 _testMath
198 )
199}
200
201_testStrlen()
202{
203 len=`_flags_strlen`
kate.ward74178272013-01-14 22:17:05 +0000204 assertTrue 'missing argument failed' $?
kate.wardc85fa862013-01-14 21:33:11 +0000205 assertEquals 'missing argument' 0 ${len}
206
207 len=`_flags_strlen ''`
kate.ward74178272013-01-14 22:17:05 +0000208 assertTrue 'empty argument failed' $?
kate.wardc85fa862013-01-14 21:33:11 +0000209 assertEquals 'empty argument' 0 ${len}
210
211 len=`_flags_strlen abc123`
kate.ward74178272013-01-14 22:17:05 +0000212 assertTrue 'single-word failed' $?
kate.wardc85fa862013-01-14 21:33:11 +0000213 assertEquals 'single-word' 6 ${len}
214
215 len=`_flags_strlen 'This is a test'`
kate.ward74178272013-01-14 22:17:05 +0000216 assertTrue 'multi-word failed' $?
kate.wardc85fa862013-01-14 21:33:11 +0000217 assertEquals 'multi-word' 14 ${len}
218}
219
220testStrlenBuiltin()
221{
kate.ward74178272013-01-14 22:17:05 +0000222 _flags_useBuiltin || startSkipping
223 _testStrlen
kate.wardc85fa862013-01-14 21:33:11 +0000224}
225
226testStrlenExpr()
227{
228 (
229 _flags_useBuiltin() { return ${FLAGS_FALSE}; }
230 _testStrlen
231 )
232}
233
kate.wardf51c6162008-06-17 16:38:35 +0000234#------------------------------------------------------------------------------
235# suite functions
236#
237
238oneTimeSetUp()
239{
kate.ward1b600c52008-11-12 21:26:05 +0000240 th_oneTimeSetUp
kate.ward74178272013-01-14 22:17:05 +0000241
242 _flags_useBuiltin || \
243 th_warn 'Shell built-ins not supported. Some tests will be skipped.'
kate.wardf51c6162008-06-17 16:38:35 +0000244}
245
kate.wardc66a5fc2013-01-12 23:10:15 +0000246tearDown()
kate.wardf51c6162008-06-17 16:38:35 +0000247{
248 flags_reset
249}
250
251# load and run shUnit2
252[ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0
253. ${TH_SHUNIT}