diff options
Diffstat (limited to 'src/shflags_test_defines.sh')
-rwxr-xr-x | src/shflags_test_defines.sh | 223 |
1 files changed, 223 insertions, 0 deletions
diff --git a/src/shflags_test_defines.sh b/src/shflags_test_defines.sh new file mode 100755 index 0000000..a46b3c4 --- /dev/null +++ b/src/shflags_test_defines.sh @@ -0,0 +1,223 @@ +#! /bin/sh +# $Id$ +# vim:et:ft=sh:sts=2:sw=2 +# +# Copyright 2008 Kate Ward. All Rights Reserved. +# Released under the LGPL (GNU Lesser General Public License) +# +# Author: kate.ward@forestent.com (Kate Ward) +# +# shFlags unit test for the flag definition methods + +# load test helpers +. ./shflags_test_helpers + +#------------------------------------------------------------------------------ +# suite tests +# + +testFlagsDefine() +{ + # no arguments + _flags_define >"${stdoutF}" 2>"${stderrF}" + assertFalse '_flags_define() with no arguments should have failed.' $? + assertErrorMsg '' 'no arguments' + + # one argument + _flags_define arg1 >"${stdoutF}" 2>"${stderrF}" + assertFalse '_flags_define() call with one argument should fail' $? + assertErrorMsg '' 'one argument' + + # two arguments + _flags_define arg1 arg2 >"${stdoutF}" 2>"${stderrF}" + assertFalse '_flags_define() call with two arguments should fail' $? + assertErrorMsg '' 'two arguments' + + # three arguments + _flags_define arg1 arg2 arg3 >"${stdoutF}" 2>"${stderrF}" + assertFalse '_flags_define() call with three arguments should fail' $? + assertErrorMsg '' 'three arguments' + + # multiple definition -- assumes working boolean definition (tested elsewhere) + _flags_define ${__FLAGS_TYPE_BOOLEAN} multiDefBool true 'multi def #1' m + _flags_define ${__FLAGS_TYPE_BOOLEAN} multiDefBool false 'multi def #2' m \ + >"${stdoutF}" 2>"${stderrF}" + assertFalse '_flags_define() with existing flag name should fail' $? + assertTrue \ + '_flags_define() should not overwrite previously defined default.' \ + "${FLAGS_multiDefBool:-}" + assertWarnMsg '' 'existing flag' + + # duplicate dashed and underscored definition + _flags_define ${__FLAGS_TYPE_STRING} long-name 'foo' 'dashed name' l + _flags_define ${__FLAGS_TYPE_STRING} long_name 'bar' 'underscored name' l \ + >"${stdoutF}" 2>"${stderrF}" + assertFalse '_flags_define() with existing flag name should fail' $? + assertEquals \ + '_flags_define() should not overwrite previously defined default.' \ + "${FLAGS_long_name}" 'foo' + assertWarnMsg '' 'already exists' + + # TODO(kward): test requirement of enhanced getopt + + # invalid type + _flags_define invalid arg2 arg3 arg4 i >"${stdoutF}" 2>"${stderrF}" + assertFalse '_flags_define() with "invalid" type should have failed.' $? + assertErrorMsg 'unrecognized flag type' 'invalid type' +} + +testBoolean() +{ + # test true defaults + for default in 'true' 't' 0; do + flags_reset + DEFINE_boolean boolVal "${default}" 'my boolean' b + rtrn=$? + assertTrue \ + "DEFINE_boolean() call with default of '${default}' failed." \ + "${FLAGS_boolVal:-}" + assertTrue \ + "DEFINE_boolean() call with default of '${default}' returned faliure." \ + ${rtrn} + done + + # test false defaults + for default in 'false' 'f' 1; do + flags_reset + DEFINE_boolean boolVal "${default}" 'my boolean' b + rtrn=$? + assertFalse \ + "DEFINE_boolean() call with default of '${default}' failed." \ + "${FLAGS_boolVal:-}" + assertTrue \ + "DEFINE_boolean() call with default of '${default}' returned faliure." \ + ${rtrn} + done + + # test invalid default + flags_reset + DEFINE_boolean boolVal 'invalid' 'my boolean' b >"${stdoutF}" 2>"${stderrF}" + assertFalse 'DEFINE_boolean() call with invalid default did not fail.' $? + assertErrorMsg +} + +testFloat() +{ + # test valid defaults + for default in ${TH_FLOAT_VALID}; do + flags_reset + DEFINE_float floatVal ${default} "float: ${default}" f + rtrn=$? + assertSame "DEFINE_float() call with valid default failed." \ + ${default} "${FLAGS_floatVal:-}" + assertTrue \ + "DEFINE_float() call with valid default of '${default}' returned faliure." \ + ${rtrn} + done + + # test invalid defaults + flags_reset + DEFINE_float floatVal 'invalid' 'invalid float: string' f \ + >"${stdoutF}" 2>"${stderrF}" + assertFalse 'DEFINE_float() call with string value default did not fail.' $? + assertErrorMsg +} + +testInteger() +{ + # test valid defaults + for default in ${TH_INT_VALID}; do + flags_reset + DEFINE_integer intVal ${default} "integer: ${default}" i + rtrn=$? + assertSame \ + "DEFINE_integer() call with valid default failed." \ + ${default} "${FLAGS_intVal:-}" + assertTrue \ + "DEFINE_integer() call with valid default of '${default}' returned failure." \ + ${rtrn} + done + + # test invalid defaults + flags_reset + DEFINE_integer intVal 1.234 'invalid integer: float' i \ + >"${stdoutF}" 2>"${stderrF}" + assertFalse 'DEFINE_integer() call with float value default did not fail.' $? + assertErrorMsg 'invalid default' 'float default' + + DEFINE_integer intVal -1.234 'invalid integer: negative float' i \ + >"${stdoutF}" 2>"${stderrF}" + assertFalse \ + 'DEFINE_integer() call with negative float value default did not fail.' \ + $? + assertErrorMsg 'invalid default' 'negative float default' + + DEFINE_integer intVal 'invalid' 'invalid integer: string' i \ + >"${stdoutF}" 2>"${stderrF}" + assertFalse \ + 'DEFINE_integer() call with string value default did not fail.' \ + $? + assertErrorMsg 'invalid default' 'string default' +} + +testString() +{ + # test valid defaults + for default in \ + ${TH_BOOL_VALID} \ + ${TH_FLOAT_VALID} \ + ${TH_INT_VALID} \ + 'also valid' + do + flags_reset + DEFINE_string strVal "${default}" "string: ${default}" s + rtrn=$? + assertSame \ + "DEFINE_string() call with valid default failed." \ + "${default}" "${FLAGS_strVal:-}" + assertTrue \ + "DEFINE_string() call with valid default of '${default}' returned faliure." \ + ${rtrn} + done + + # test "empty" strings + flags_reset + DEFINE_string str '' "string: empty single quotes" s + rtrn=$? + assertSame \ + "DEFINE_string() call with valid default failed." \ + '' "${FLAGS_str:-}" +} + +testShortNameLength() +{ + # make sure short names are no longer than a single character + : +} + +testFlagNameIsReserved() +{ + ( DEFINE_string TRUE '' 'true is a reserved flag name' t \ + >"${stdoutF}" 2>"${stderrF}" ) + rtrn=$? + assertEquals ${FLAGS_ERROR} ${rtrn} + assertErrorMsg 'flag name (TRUE) is reserved' +} + +#------------------------------------------------------------------------------ +# suite functions +# + +oneTimeSetUp() +{ + th_oneTimeSetUp +} + +tearDown() +{ + flags_reset +} + +# load and run shUnit2 +[ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0 +. ${TH_SHUNIT} |