aboutsummaryrefslogtreecommitdiff
path: root/source/1.0/src/shflags_test_parsing.sh
diff options
context:
space:
mode:
authorkate.ward <kate.ward@forestent.com>2008-06-17 16:38:35 +0000
committerkate.ward <kate.ward@forestent.com>2008-06-17 16:38:35 +0000
commitf51c61688f665b31f26c658cf389a9cd7843d4a9 (patch)
tree03db2704dfd65ad68896ecf95ab89fdea9dfeb25 /source/1.0/src/shflags_test_parsing.sh
downloadshflags-f51c61688f665b31f26c658cf389a9cd7843d4a9.tar.gz
initial check-in
Diffstat (limited to 'source/1.0/src/shflags_test_parsing.sh')
-rwxr-xr-xsource/1.0/src/shflags_test_parsing.sh329
1 files changed, 329 insertions, 0 deletions
diff --git a/source/1.0/src/shflags_test_parsing.sh b/source/1.0/src/shflags_test_parsing.sh
new file mode 100755
index 0000000..f044546
--- /dev/null
+++ b/source/1.0/src/shflags_test_parsing.sh
@@ -0,0 +1,329 @@
+#! /bin/sh
+# 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
+#
+# TODO(kward): assert on FLAGS errors
+
+# load test helpers
+. ./shflags_test_helpers
+
+#------------------------------------------------------------------------------
+# suite tests
+#
+
+testHelp()
+{
+ #
+ # test short -h option
+ #
+
+ rslt=`FLAGS -h 2>&1`
+ rtrn=$?
+ assertFalse \
+ 'short request for help should have returned non-zero exit code.' \
+ ${rtrn}
+ echo "${rslt}" |grep -- 'show this help' >/dev/null
+ rtrn=$?
+ assertTrue \
+ 'short request for help should have produced some help output.' \
+ ${rtrn}
+ [ ${rtrn} -ne ${FLAGS_TRUE} ] && echo "${rslt}" >&2
+
+ # test proper output when FLAGS_HELP set
+ rslt=`FLAGS_HELP='this is a test'; FLAGS -h 2>&1`
+ echo "${rslt}" |grep -- 'this is a test' >/dev/null
+ rtrn=$?
+ assertTrue \
+ 'setting FLAGS_HELP did not produce expected result' \
+ ${rtrn}
+ [ ${rtrn} -ne ${FLAGS_TRUE} ] && echo "${rslt}" >&2
+
+ # test that "'" chars work in help string
+ DEFINE_boolean b false "help string containing a ' char" b
+ rslt=`FLAGS -h 2>&1`
+ echo "${rslt}" |grep -- "help string containing a ' char" >/dev/null
+ rtrn=$?
+ assertTrue \
+ "help strings containing apostrophes don't work" \
+ ${rtrn}
+ [ ${rtrn} -ne ${FLAGS_TRUE} ] && echo "${rslt}" >&2
+
+ #
+ # test long --help option
+ #
+
+ flags_getoptIsStd && startSkipping
+
+ rslt=`FLAGS --help 2>&1`
+ rtrn=$?
+ assertFalse \
+ 'long request for help should have returned non-zero exit code.' \
+ ${rtrn}
+ echo "${rslt}" |grep -- 'show this help' >/dev/null
+ assertTrue \
+ 'long request for help should have produced some help output.' \
+ $?
+}
+
+testValidBooleanShort()
+{
+ DEFINE_boolean bool false 'boolean value' b
+
+ # flip flag to true
+ FLAGS -b >"${stdoutF}" 2>"${stderrF}"
+ rtrn=$?
+ assertTrue 'FLAGS returned a non-zero result' ${rtrn}
+ assertTrue 'boolean was false.' ${FLAGS_bool:-}
+ assertFalse 'expected no output to STDERR' "[ -s \"${stderrF}\" ]"
+ th_showOutput ${rtrn} "${stdoutF}" "${stderrF}"
+
+ # verify that passing the option a second time leaves the flag true
+ FLAGS -b >"${stdoutF}" 2>"${stderrF}"
+ rtrn=$?
+ assertTrue 'FLAGS returned a non-zero result' ${rtrn}
+ assertTrue 'boolean was false.' ${FLAGS_bool:-}
+ assertFalse 'expected no output to STDERR' "[ -s \"${stderrF}\" ]"
+ th_showOutput ${rtrn} "${stdoutF}" "${stderrF}"
+}
+
+testValidBooleanLong()
+{
+ flags_getoptIsStd && startSkipping
+
+ DEFINE_boolean bool false 'boolean test' 'b'
+
+ # leave flag false
+ FLAGS --nobool >"${stdoutF}" 2>"${stderrF}"
+ rtrn=$?
+ assertTrue 'FLAGS returned a non-zero result' ${rtrn}
+ assertFalse '--noXX flag resulted in true value.' ${FLAGS_bool:-}
+ assertFalse 'expected no output to STDERR' "[ -s \"${stderrF}\" ]"
+ th_showOutput ${rtrn} "${stdoutF}" "${stderrF}"
+
+ # flip flag true
+ FLAGS --bool >"${stdoutF}" 2>"${stderrF}"
+ rtrn=$?
+ assertTrue 'FLAGS returned a non-zero result' ${rtrn}
+ assertTrue '--XX flag resulted in false value.' ${FLAGS_bool:-}
+ assertFalse 'expected no output to STDERR' "[ -s \"${stderrF}\" ]"
+ th_showOutput ${rtrn} "${stdoutF}" "${stderrF}"
+
+ # flip flag back false
+ FLAGS --nobool >"${stdoutF}" 2>"${stderrF}"
+ rtrn=$?
+ assertTrue 'FLAGS returned a non-zero result' ${rtrn}
+ assertFalse '--noXX flag resulted in true value.' ${FLAGS_bool:-}
+ assertFalse 'expected no output to STDERR' "[ -s \"${stderrF}\" ]"
+ th_showOutput ${rtrn} "${stdoutF}" "${stderrF}"
+}
+
+testValidFloats()
+{
+ _testValidFloats '-f'
+ flags_getoptIsStd && startSkipping
+ _testValidFloats '--float'
+}
+
+_testValidFloats()
+{
+ flag=$1
+ for value in ${TH_FLOAT_VALID}; do
+ flags_reset
+ DEFINE_float float 0 'float test' 'f'
+ FLAGS ${flag} ${value} >"${stdoutF}" 2>"${stderrF}"
+ rtrn=$?
+ assertTrue "FLAGS (${value}) returned a non-zero result" ${rtrn}
+ assertEquals "float (${value}) test failed." ${value} ${FLAGS_float}
+ assertFalse 'expected no output to STDERR' "[ -s \"${stderrF}\" ]"
+ th_showOutput ${rtrn} "${stdoutF}" "${stderrF}"
+ done
+}
+
+testInvalidFloats()
+{
+ _testInvalidFloats '-f'
+ flags_getoptIsStd && startSkipping
+ _testInvalidFloats '--float'
+}
+
+_testInvalidFloats()
+{
+ flag=$1
+ for value in ${TH_FLOAT_INVALID}; do
+ flags_reset
+ DEFINE_float float 0 'float test' 'f'
+ FLAGS ${flag} ${value} >"${stdoutF}" 2>"${stderrF}"
+ rtrn=$?
+ assertFalse "FLAGS (${value}) returned a zero result" ${rtrn}
+ assertTrue 'expected no output to STDERR' "[ -s \"${stderrF}\" ]"
+ done
+}
+
+testValidIntegers()
+{
+ _testValidIntegers '-i'
+ flags_getoptIsStd && startSkipping
+ _testValidIntegers '--int'
+}
+
+_testValidIntegers()
+{
+ flag=$1
+ for value in ${TH_INT_VALID}; do
+ flags_reset
+ DEFINE_integer int 0 'integer test' 'i'
+ FLAGS ${flag} ${value} >"${stdoutF}" 2>"${stderrF}"
+ rtrn=$?
+ assertTrue "FLAGS (${value}) returned a non-zero result" ${rtrn}
+ assertEquals "integer (${value}) test failed." ${value} ${FLAGS_int}
+ assertFalse 'expected no output to STDERR' "[ -s \"${stderrF}\" ]"
+ th_showOutput ${rtrn} "${stdoutF}" "${stderrF}"
+ done
+}
+
+testInvalidIntegers()
+{
+ _testInvalidIntegers '-i'
+ flags_getoptIsStd && startSkipping
+ _testInvalidIntegers '--int'
+}
+
+_testInvalidIntegers()
+{
+ flag=$1
+ for value in ${TH_INT_INVALID}; do
+ flags_reset
+ DEFINE_integer int 0 'integer test' 'i'
+ FLAGS ${flag} ${value} >"${stdoutF}" 2>"${stderrF}"
+ rtrn=$?
+ assertFalse "invalid integer (${value}) test returned success." ${rtrn}
+ assertTrue 'expected no output to STDERR' "[ -s \"${stderrF}\" ]"
+ done
+}
+
+testValidStrings()
+{
+ _testValidStrings '-s'
+ flags_getoptIsStd && startSkipping
+ _testValidStrings '--str'
+}
+
+_testValidStrings()
+{
+ flag=$1
+ for value in single_word 'string with spaces'; do
+ flags_reset
+ DEFINE_string str '' 'string test' 's'
+ FLAGS ${flag} "${value}" >"${stdoutF}" 2>"${stderrF}"
+ rtrn=$?
+ assertTrue "FLAGS (${value}) returned a non-zero result" ${rtrn}
+ assertEquals "string (${value}) test failed." "${value}" "${FLAGS_str}"
+ th_showOutput ${rtrn} "${stdoutF}" "${stderrF}"
+ if [ ${rtrn} -eq ${FLAGS_TRUE} ]; then
+ assertFalse 'expected no output to STDERR' "[ -s \"${stderrF}\" ]"
+ else
+ # validate that an error is thrown for unsupported getopt uses
+ assertErrorMsg "${value}"
+ fi
+ done
+}
+
+testMultipleFlags()
+{
+ _testMultipleFlags '-b' '-i' '-f' '-s'
+ flags_getoptIsStd && startSkipping
+ _testMultipleFlags '--bool' '--int' '--float' '--str'
+}
+
+_testMultipleFlags()
+{
+ boolFlag=$1
+ intFlag=$2
+ floatFlag=$3
+ strFlag=$4
+
+ flags_reset
+ DEFINE_boolean bool false 'a boolean' 'b'
+ DEFINE_integer int 0 'a integer' 'i'
+ DEFINE_float float 0 'a float' 'f'
+ DEFINE_string str '' 'a string' 's'
+ FLAGS \
+ ${boolFlag} \
+ ${intFlag} 567 \
+ ${floatFlag} 123.45678 \
+ ${strFlag} 'some_string' \
+ >"${stdoutF}" 2>"${stderrF}"
+ rtrn=$?
+ assertTrue "use of multple flags returned a non-zero result" ${rtrn}
+ assertTrue 'boolean test failed.' ${FLAGS_bool}
+ assertNotSame 'float test failed.' 0 ${FLAGS_float}
+ assertNotSame 'integer test failed.' 0 ${FLAGS_int}
+ assertNotSame 'string test failed.' '' ${FLAGS_str}
+ assertFalse 'expected no output to STDERR' "[ -s \"${stderrF}\" ]"
+ th_showOutput ${rtrn} "${stdoutF}" "${stderrF}"
+}
+
+_testNonFlagArgs()
+{
+ argc=$1
+ shift
+
+ FLAGS $@
+ assertTrue 'parse returned value.' $?
+
+ # shift out the parsed arguments to reach those that weren't parsed
+ shift ${FLAGS_ARGC}
+ assertSame 'wrong argc value.' ${argc} $#
+}
+
+testSingleNonFlagArg()
+{
+ _testNonFlagArgs 1 argOne
+}
+
+testMultipleNonFlagArgs()
+{
+ _testNonFlagArgs 3 argOne argTwo arg3
+}
+
+testMultipleNonFlagStringArgsWithSpaces()
+{
+ _testNonFlagArgs 3 argOne 'arg #2' arg3
+}
+
+# TODO(kward): testNonstandardIFS()
+
+#------------------------------------------------------------------------------
+# suite functions
+#
+
+oneTimeSetUp()
+{
+ # load flags
+ [ -n "${ZSH_VERSION:-}" ] && FLAGS_PARENT=$0
+ . ${TH_SHFLAGS}
+
+ tmpDir="${__shunit_tmpDir}/output"
+ mkdir "${tmpDir}"
+ stdoutF="${tmpDir}/stdout"
+ stderrF="${tmpDir}/stderr"
+
+ if [ ${__FLAGS_GETOPT_VERS} -eq ${__FLAGS_GETOPT_VERS_STD} ]; then
+ th_warn 'Standard version of getopt found. Some tests will be skipped.'
+ fi
+}
+
+setUp()
+{
+ flags_reset
+}
+
+# load and run shUnit2
+[ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0
+. ${TH_SHUNIT}