#! /bin/sh
# vim:et:ft=sh:sts=2:sw=2
#
# shFlags unit test for the internal functions
# load test helpers
. ./shflags_test_helpers
#------------------------------------------------------------------------------
# suite tests
#
testColumns()
{
cols=`_flags_columns`
value=`expr "${cols}" : '\([0-9]*\)'`
assertNotNull "unexpected screen width (${cols})" "${value}"
}
testGenOptStr()
{
_testGenOptStr '' ''
DEFINE_boolean bool false 'boolean value' b
_testGenOptStr 'b' 'bool'
DEFINE_float float 0.0 'float value' f
_testGenOptStr 'bf:' 'bool,float:'
DEFINE_integer int 0 'integer value' i
_testGenOptStr 'bf:i:' 'bool,float:,int:'
DEFINE_string str 0 'string value' s
_testGenOptStr 'bf:i:s:' 'bool,float:,int:,str:'
DEFINE_boolean help false 'show help' h
_testGenOptStr 'bf:i:s:h' 'bool,float:,int:,str:,help'
}
_testGenOptStr()
{
short=$1
long=$2
result=`_flags_genOptStr ${__FLAGS_OPTSTR_SHORT}`
assertTrue 'short option string generation failed' $?
assertEquals "${short}" "${result}"
result=`_flags_genOptStr ${__FLAGS_OPTSTR_LONG}`
assertTrue 'long option string generation failed' $?
assertEquals "${long}" "${result}"
}
testGetFlagInfo()
{
__flags_blah_foobar='1234'
rslt=`_flags_getFlagInfo 'blah' 'foobar'`
assertTrue 'request for valid flag info failed' $?
assertEquals 'invalid flag info returned' "${__flags_blah_foobar}" "${rslt}"
rslt=`_flags_getFlagInfo 'blah' 'hubbabubba' >"${stdoutF}" 2>"${stderrF}"`
assertEquals 'invalid flag did not result in an error' ${FLAGS_ERROR} $?
assertErrorMsg 'missing flag info variable'
}
testItemInList()
{
list='this is a test'
_flags_itemInList 'is' ${list}
assertTrue 'unable to find leading string (this)' $?
_flags_itemInList 'is' ${list}
assertTrue 'unable to find string (is)' $?
_flags_itemInList 'is' ${list}
assertTrue 'unable to find trailing string (test)' $?
_flags_itemInList 'abc' ${list}
assertFalse 'found nonexistant string (abc)' $?
_flags_itemInList '' ${list}
assertFalse 'empty strings should not match' $?
_flags_itemInList 'blah' ''
assertFalse 'empty lists should not match' $?
}
testValidBool()
{
# valid values
for value in ${TH_BOOL_VALID}; do
_flags_validBool "${value}"
assertTrue "valid value (${value}) did not validate" $?
done
# invalid values
for value in ${TH_BOOL_INVALID}; do
_flags_validBool "${value}"
assertFalse "invalid value (${value}) validated" $?
done
}
_testValidFloat()
{
# valid values
for value in ${TH_INT_VALID} ${TH_FLOAT_VALID}; do
_flags_validFloat "${value}"
assertTrue "valid value (${value}) did not validate" $?
done
# invalid values
for value in ${TH_FLOAT_INVALID}; do
_flags_validFloat "${value}"
assertFalse "invalid value (${value}) validated" $?
done
}
testValidFloatBuiltin()
{
_flags_useBuiltin || startSkipping
_testValidFloat
}
testValidFloatExpr()
{
(
_flags_useBuiltin() { return ${FLAGS_FALSE}; }
_testValidFloat
)
}
_testValidInt()
{
# valid values
for value in ${TH_INT_VALID}; do
_flags_validInt "${value}"
assertTrue "valid value (${value}) did not validate" $?
done
# invalid values
for value in ${TH_INT_INVALID}; do
_flags_validInt "${value}"
assertFalse "invalid value (${value}) should not validate" $?
done
}
testValidIntBuiltin()
{
_flags_useBuiltin || startSkipping
_testValidInt
}
testValidIntExpr()
{
(
_flags_useBuiltin() { return ${FLAGS_FALSE}; }
_testValidInt
)
}
_testMath()
{
result=`_flags_math 1`
assertTrue '1 failed' $?
assertEquals '1' 1 ${result}
result=`_flags_math '1 + 2'`
assertTrue '1+2 failed' $?
assertEquals '1+2' 3 ${result}
result=`_flags_math '1 + 2 + 3'`
assertTrue '1+2+3 failed' $?
assertEquals '1+2+3' 6 ${result}
result=`_flags_math`
assertFalse 'missing math succeeded' $?
}
testMathBuiltin()
{
_flags_useBuiltin || startSkipping
_testMath
}
testMathExpr()
{
(
_flags_useBuiltin() { return ${FLAGS_FALSE}; }
_testMath
)
}
_testStrlen()
{
len=`_flags_strlen`
assertTrue 'missing argument failed' $?
assertEquals 'missing argument' 0 ${len}
len=`_flags_strlen ''`
assertTrue 'empty argument failed' $?
assertEquals 'empty argument' 0 ${len}
len=`_flags_strlen abc123`
assertTrue 'single-word failed' $?
assertEquals 'single-word' 6 ${len}
len=`_flags_strlen 'This is a test'`
assertTrue 'multi-word failed' $?
assertEquals 'multi-word' 14 ${len}
}
testStrlenBuiltin()
{
_flags_useBuiltin || startSkipping
_testStrlen
}
testStrlenExpr()
{
(
_flags_useBuiltin() { return ${FLAGS_FALSE}; }
_testStrlen
)
}
#------------------------------------------------------------------------------
# suite functions
#
oneTimeSetUp()
{
th_oneTimeSetUp
_flags_useBuiltin || \
th_warn 'Shell built-ins not supported. Some tests will be skipped.'
}
tearDown()
{
flags_reset
}
# load and run shUnit2
[ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0
. ${TH_SHUNIT}