aboutsummaryrefslogtreecommitdiff
path: root/src/shflags_test_defines.sh
diff options
context:
space:
mode:
Diffstat (limited to 'src/shflags_test_defines.sh')
-rwxr-xr-xsrc/shflags_test_defines.sh223
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}