kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 1 | #! /bin/sh |
| 2 | # vim:et:ft=sh:sts=2:sw=2 |
| 3 | # |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 4 | # shFlags unit test for the internal functions |
| 5 | |
| 6 | # load test helpers |
| 7 | . ./shflags_test_helpers |
| 8 | |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 9 | #------------------------------------------------------------------------------ |
| 10 | # suite tests |
| 11 | # |
| 12 | |
kate.ward | 929261f | 2010-03-28 23:12:17 +0000 | [diff] [blame] | 13 | testColumns() |
| 14 | { |
| 15 | cols=`_flags_columns` |
| 16 | value=`expr "${cols}" : '\([0-9]*\)'` |
| 17 | assertNotNull "unexpected screen width (${cols})" "${value}" |
| 18 | } |
| 19 | |
| 20 | testGenOptStr() |
| 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.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 54 | testGetFlagInfo() |
| 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.ward | 1b600c5 | 2008-11-12 21:26:05 +0000 | [diff] [blame] | 62 | rslt=`_flags_getFlagInfo 'blah' 'hubbabubba' >"${stdoutF}" 2>"${stderrF}"` |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 63 | assertEquals 'invalid flag did not result in an error' ${FLAGS_ERROR} $? |
kate.ward | cba92e5 | 2013-01-01 22:37:21 +0000 | [diff] [blame] | 64 | assertErrorMsg 'missing flag info variable' |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 65 | } |
| 66 | |
| 67 | testItemInList() |
| 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.ward | e10dd53 | 2013-01-04 21:52:23 +0000 | [diff] [blame] | 90 | testValidBool() |
kate.ward | dadc164 | 2008-11-14 02:00:29 +0000 | [diff] [blame] | 91 | { |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 92 | # valid values |
| 93 | for value in ${TH_BOOL_VALID}; do |
kate.ward | e10dd53 | 2013-01-04 21:52:23 +0000 | [diff] [blame] | 94 | _flags_validBool "${value}" |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 95 | assertTrue "valid value (${value}) did not validate" $? |
| 96 | done |
| 97 | |
| 98 | # invalid values |
| 99 | for value in ${TH_BOOL_INVALID}; do |
kate.ward | e10dd53 | 2013-01-04 21:52:23 +0000 | [diff] [blame] | 100 | _flags_validBool "${value}" |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 101 | assertFalse "invalid value (${value}) validated" $? |
| 102 | done |
| 103 | } |
| 104 | |
kate.ward | e10dd53 | 2013-01-04 21:52:23 +0000 | [diff] [blame] | 105 | _testValidFloat() |
kate.ward | dadc164 | 2008-11-14 02:00:29 +0000 | [diff] [blame] | 106 | { |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 107 | # valid values |
| 108 | for value in ${TH_INT_VALID} ${TH_FLOAT_VALID}; do |
kate.ward | 7417827 | 2013-01-14 22:17:05 +0000 | [diff] [blame] | 109 | _flags_validFloat "${value}" |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 110 | assertTrue "valid value (${value}) did not validate" $? |
| 111 | done |
| 112 | |
| 113 | # invalid values |
| 114 | for value in ${TH_FLOAT_INVALID}; do |
kate.ward | 7417827 | 2013-01-14 22:17:05 +0000 | [diff] [blame] | 115 | _flags_validFloat "${value}" |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 116 | assertFalse "invalid value (${value}) validated" $? |
| 117 | done |
| 118 | } |
| 119 | |
kate.ward | e10dd53 | 2013-01-04 21:52:23 +0000 | [diff] [blame] | 120 | testValidFloatBuiltin() |
kate.ward | dadc164 | 2008-11-14 02:00:29 +0000 | [diff] [blame] | 121 | { |
kate.ward | 7417827 | 2013-01-14 22:17:05 +0000 | [diff] [blame] | 122 | _flags_useBuiltin || startSkipping |
| 123 | _testValidFloat |
kate.ward | e10dd53 | 2013-01-04 21:52:23 +0000 | [diff] [blame] | 124 | } |
| 125 | |
| 126 | testValidFloatExpr() |
| 127 | { |
kate.ward | 7417827 | 2013-01-14 22:17:05 +0000 | [diff] [blame] | 128 | ( |
| 129 | _flags_useBuiltin() { return ${FLAGS_FALSE}; } |
| 130 | _testValidFloat |
| 131 | ) |
kate.ward | e10dd53 | 2013-01-04 21:52:23 +0000 | [diff] [blame] | 132 | } |
| 133 | |
| 134 | _testValidInt() |
| 135 | { |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 136 | # valid values |
| 137 | for value in ${TH_INT_VALID}; do |
kate.ward | c66a5fc | 2013-01-12 23:10:15 +0000 | [diff] [blame] | 138 | _flags_validInt "${value}" |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 139 | assertTrue "valid value (${value}) did not validate" $? |
| 140 | done |
| 141 | |
| 142 | # invalid values |
| 143 | for value in ${TH_INT_INVALID}; do |
kate.ward | c66a5fc | 2013-01-12 23:10:15 +0000 | [diff] [blame] | 144 | _flags_validInt "${value}" |
kate.ward | e10dd53 | 2013-01-04 21:52:23 +0000 | [diff] [blame] | 145 | assertFalse "invalid value (${value}) should not validate" $? |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 146 | done |
| 147 | } |
| 148 | |
kate.ward | e10dd53 | 2013-01-04 21:52:23 +0000 | [diff] [blame] | 149 | testValidIntBuiltin() |
| 150 | { |
kate.ward | 7417827 | 2013-01-14 22:17:05 +0000 | [diff] [blame] | 151 | _flags_useBuiltin || startSkipping |
| 152 | _testValidInt |
kate.ward | e10dd53 | 2013-01-04 21:52:23 +0000 | [diff] [blame] | 153 | } |
| 154 | |
| 155 | testValidIntExpr() |
| 156 | { |
kate.ward | c66a5fc | 2013-01-12 23:10:15 +0000 | [diff] [blame] | 157 | ( |
| 158 | _flags_useBuiltin() { return ${FLAGS_FALSE}; } |
| 159 | _testValidInt |
| 160 | ) |
kate.ward | b075920 | 2013-01-05 13:57:46 +0000 | [diff] [blame] | 161 | } |
| 162 | |
kate.ward | c85fa86 | 2013-01-14 21:33:11 +0000 | [diff] [blame] | 163 | _testMath() |
| 164 | { |
kate.ward | d87a1d9 | 2013-01-15 00:13:10 +0000 | [diff] [blame] | 165 | result=`_flags_math 1` |
| 166 | assertTrue '1 failed' $? |
| 167 | assertEquals '1' 1 ${result} |
kate.ward | 7417827 | 2013-01-14 22:17:05 +0000 | [diff] [blame] | 168 | |
| 169 | result=`_flags_math '1 + 2'` |
| 170 | assertTrue '1+2 failed' $? |
| 171 | assertEquals '1+2' 3 ${result} |
| 172 | |
kate.ward | d87a1d9 | 2013-01-15 00:13:10 +0000 | [diff] [blame] | 173 | result=`_flags_math '1 + 2 + 3'` |
kate.ward | 7417827 | 2013-01-14 22:17:05 +0000 | [diff] [blame] | 174 | assertTrue '1+2+3 failed' $? |
| 175 | assertEquals '1+2+3' 6 ${result} |
| 176 | |
| 177 | result=`_flags_math` |
| 178 | assertFalse 'missing math succeeded' $? |
kate.ward | c85fa86 | 2013-01-14 21:33:11 +0000 | [diff] [blame] | 179 | } |
| 180 | |
kate.ward | b075920 | 2013-01-05 13:57:46 +0000 | [diff] [blame] | 181 | testMathBuiltin() |
| 182 | { |
kate.ward | 7417827 | 2013-01-14 22:17:05 +0000 | [diff] [blame] | 183 | _flags_useBuiltin || startSkipping |
| 184 | _testMath |
kate.ward | b075920 | 2013-01-05 13:57:46 +0000 | [diff] [blame] | 185 | } |
| 186 | |
kate.ward | c85fa86 | 2013-01-14 21:33:11 +0000 | [diff] [blame] | 187 | testMathExpr() |
| 188 | { |
| 189 | ( |
| 190 | _flags_useBuiltin() { return ${FLAGS_FALSE}; } |
| 191 | _testMath |
| 192 | ) |
| 193 | } |
| 194 | |
| 195 | _testStrlen() |
| 196 | { |
| 197 | len=`_flags_strlen` |
kate.ward | 7417827 | 2013-01-14 22:17:05 +0000 | [diff] [blame] | 198 | assertTrue 'missing argument failed' $? |
kate.ward | c85fa86 | 2013-01-14 21:33:11 +0000 | [diff] [blame] | 199 | assertEquals 'missing argument' 0 ${len} |
| 200 | |
| 201 | len=`_flags_strlen ''` |
kate.ward | 7417827 | 2013-01-14 22:17:05 +0000 | [diff] [blame] | 202 | assertTrue 'empty argument failed' $? |
kate.ward | c85fa86 | 2013-01-14 21:33:11 +0000 | [diff] [blame] | 203 | assertEquals 'empty argument' 0 ${len} |
| 204 | |
| 205 | len=`_flags_strlen abc123` |
kate.ward | 7417827 | 2013-01-14 22:17:05 +0000 | [diff] [blame] | 206 | assertTrue 'single-word failed' $? |
kate.ward | c85fa86 | 2013-01-14 21:33:11 +0000 | [diff] [blame] | 207 | assertEquals 'single-word' 6 ${len} |
| 208 | |
| 209 | len=`_flags_strlen 'This is a test'` |
kate.ward | 7417827 | 2013-01-14 22:17:05 +0000 | [diff] [blame] | 210 | assertTrue 'multi-word failed' $? |
kate.ward | c85fa86 | 2013-01-14 21:33:11 +0000 | [diff] [blame] | 211 | assertEquals 'multi-word' 14 ${len} |
| 212 | } |
| 213 | |
| 214 | testStrlenBuiltin() |
| 215 | { |
kate.ward | 7417827 | 2013-01-14 22:17:05 +0000 | [diff] [blame] | 216 | _flags_useBuiltin || startSkipping |
| 217 | _testStrlen |
kate.ward | c85fa86 | 2013-01-14 21:33:11 +0000 | [diff] [blame] | 218 | } |
| 219 | |
| 220 | testStrlenExpr() |
| 221 | { |
| 222 | ( |
| 223 | _flags_useBuiltin() { return ${FLAGS_FALSE}; } |
| 224 | _testStrlen |
| 225 | ) |
| 226 | } |
| 227 | |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 228 | #------------------------------------------------------------------------------ |
| 229 | # suite functions |
| 230 | # |
| 231 | |
| 232 | oneTimeSetUp() |
| 233 | { |
kate.ward | 1b600c5 | 2008-11-12 21:26:05 +0000 | [diff] [blame] | 234 | th_oneTimeSetUp |
kate.ward | 7417827 | 2013-01-14 22:17:05 +0000 | [diff] [blame] | 235 | |
| 236 | _flags_useBuiltin || \ |
| 237 | th_warn 'Shell built-ins not supported. Some tests will be skipped.' |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 238 | } |
| 239 | |
kate.ward | c66a5fc | 2013-01-12 23:10:15 +0000 | [diff] [blame] | 240 | tearDown() |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 241 | { |
| 242 | flags_reset |
| 243 | } |
| 244 | |
| 245 | # load and run shUnit2 |
| 246 | [ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0 |
| 247 | . ${TH_SHUNIT} |