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