Home | History | Annotate | Download | only in src
      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 
     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 
     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 
     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 
     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 
     90 testValidBool()
     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 
    120 testValidFloatBuiltin()
    121 {
    122   _flags_useBuiltin || startSkipping
    123   _testValidFloat
    124 }
    125 
    126 testValidFloatExpr()
    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 
    149 testValidIntBuiltin()
    150 {
    151   _flags_useBuiltin || startSkipping
    152   _testValidInt
    153 }
    154 
    155 testValidIntExpr()
    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 
    181 testMathBuiltin()
    182 {
    183   _flags_useBuiltin || startSkipping
    184   _testMath
    185 }
    186 
    187 testMathExpr()
    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 
    214 testStrlenBuiltin()
    215 {
    216   _flags_useBuiltin || startSkipping
    217   _testStrlen
    218 }
    219 
    220 testStrlenExpr()
    221 {
    222   (
    223     _flags_useBuiltin() { return ${FLAGS_FALSE}; }
    224     _testStrlen
    225   )
    226 }
    227 
    228 #------------------------------------------------------------------------------
    229 # suite functions
    230 #
    231 
    232 oneTimeSetUp()
    233 {
    234   th_oneTimeSetUp
    235 
    236   _flags_useBuiltin || \
    237     th_warn 'Shell built-ins not supported. Some tests will be skipped.'
    238 }
    239 
    240 tearDown()
    241 {
    242   flags_reset
    243 }
    244 
    245 # load and run shUnit2
    246 [ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0
    247 . ${TH_SHUNIT}
    248