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