aboutsummaryrefslogtreecommitdiff
path: root/shflags_public_test.sh
diff options
context:
space:
mode:
Diffstat (limited to 'shflags_public_test.sh')
-rwxr-xr-xshflags_public_test.sh242
1 files changed, 242 insertions, 0 deletions
diff --git a/shflags_public_test.sh b/shflags_public_test.sh
new file mode 100755
index 0000000..ad6eab1
--- /dev/null
+++ b/shflags_public_test.sh
@@ -0,0 +1,242 @@
+#! /bin/sh
+# vim:et:ft=sh:sts=2:sw=2
+#
+# shFlags unit test for the public functions.
+#
+# Copyright 2008-2020 Kate Ward. All Rights Reserved.
+# Released under the Apache 2.0 license.
+#
+# Author: kate.ward@forestent.com (Kate Ward)
+# https://github.com/kward/shflags
+#
+### ShellCheck (http://www.shellcheck.net/)
+# Disable source following.
+# shellcheck disable=SC1090,SC1091
+# $() are not fully portable (POSIX != portable).
+# shellcheck disable=SC2006
+
+# These variables will be overridden by the test helpers.
+expectedF="${TMPDIR:-/tmp}/expected"
+returnF="${TMPDIR:-/tmp}/return"
+stdoutF="${TMPDIR:-/tmp}/STDOUT"
+stderrF="${TMPDIR:-/tmp}/STDERR"
+
+# Load test helpers.
+. ./shflags_test_helpers
+
+testHelp() {
+ _testHelp '-h'
+ _testHelp '--help'
+}
+
+_testHelp() {
+ if ! flags_getoptIsEnh; then
+ return
+ fi
+
+ flag=$1
+
+ # Test default help output.
+ th_clearReturn
+ (
+ FLAGS "${flag}" >"${stdoutF}" 2>"${stderrF}"
+ echo $? >"${returnF}"
+ )
+ assertFalse \
+ 'short help request should have returned a false exit code.' \
+ "$(th_queryReturn)"
+ (grep 'show this help' "${stderrF}" >/dev/null)
+ r3turn=$?
+ assertTrue \
+ 'short request for help should have produced some help output.' \
+ ${r3turn}
+ [ ${r3turn} -ne "${FLAGS_TRUE}" ] && th_showOutput
+
+ # Test proper output when FLAGS_HELP set.
+ (
+ FLAGS_HELP='this is a test'
+ FLAGS "${flag}" >"${stdoutF}" 2>"${stderrF}"
+ )
+ (grep 'this is a test' "${stderrF}" >/dev/null)
+ r3turn=$?
+ assertTrue 'setting FLAGS_HELP did not produce expected result' ${r3turn}
+ [ ${r3turn} -ne "${FLAGS_TRUE}" ] && th_showOutput
+
+ # Test that "'" chars work in help string.
+ (
+ # shellcheck disable=SC2034
+ DEFINE_boolean b false "help string containing a ' char" b
+ FLAGS "${flag}" >"${stdoutF}" 2>"${stderrF}"
+ )
+ (grep "help string containing a ' char" "${stderrF}" >/dev/null)
+ r3turn=$?
+ assertTrue "help strings containing apostrophes don't work" ${r3turn}
+ [ ${r3turn} -ne "${FLAGS_TRUE}" ] && th_showOutput
+
+ return "${SHUNIT_TRUE}"
+}
+
+mock_flags_columns() {
+ echo 80
+}
+
+testStandardHelpOutput() {
+ if ! flags_getoptIsStd; then
+ startSkipping
+ fi
+
+ DEFINE_boolean test_bool false 'test boolean' b
+ DEFINE_integer test_int 0 'test integer' i
+ DEFINE_string test_str '' 'test string' s
+ DEFINE_string long_desc 'blah' \
+ 'testing of a long description to force wrap of default value' D
+ DEFINE_string long_default \
+ 'this_is_a_long_default_value_to_force_alternate_indentation' \
+ 'testing of long default value' F
+
+ # Test for https://github.com/kward/shflags/issues/28.
+ DEFINE_boolean 'force' false '' f
+
+ help='USAGE: standard [flags] args'
+
+ cat >"${expectedF}" <<EOF
+${help}
+flags:
+ -b test boolean (default: false)
+ -i test integer (default: 0)
+ -s test string (default: '')
+ -D testing of a long description to force wrap of default value
+ (default: 'blah')
+ -F testing of long default value
+ (default: 'this_is_a_long_default_value_to_force_alternate_indentation')
+ -f (default: false)
+ -h show this help (default: false)
+EOF
+ (
+ _flags_columns() { mock_flags_columns; }
+ FLAGS_HELP=${help};
+ # Wrap FLAGS call in if/then/else so 'set -e' works properly.
+ if FLAGS -h >"${stdoutF}" 2>"${stderrF}"; then
+ rtrn=$?
+ else
+ rtrn=$?
+ fi
+ echo "${rtrn}" >"${returnF}"
+ )
+ assertFalse 'a call for help should return a non-zero exit code.' "$(th_queryReturn)"
+
+ if ! diff "${expectedF}" "${stderrF}" >/dev/null; then
+ fail 'unexpected help output'
+ th_showOutput
+ fi
+}
+
+testEnhancedHelpOutput() {
+ if ! flags_getoptIsEnh; then
+ startSkipping
+ fi
+
+ # shellcheck disable=SC2034
+ DEFINE_boolean test_bool false 'test boolean' b
+ # shellcheck disable=SC2034
+ DEFINE_integer test_int 0 'test integer' i
+ # shellcheck disable=SC2034
+ DEFINE_string test_str '' 'test string' s
+ # shellcheck disable=SC2034
+ DEFINE_string long_desc 'blah' \
+ 'testing of a long description to force wrap of default value' D
+ # shellcheck disable=SC2034
+ DEFINE_string long_default \
+ 'this_is_a_long_default_value_to_force_alternate_indentation' \
+ 'testing of long default value' F
+
+ # Test for https://github.com/kward/shflags/issues/28.
+ DEFINE_boolean 'force' false '' f
+
+ help='USAGE: enhanced [flags] args'
+
+ cat >"${expectedF}" <<EOF
+${help}
+flags:
+ -b,--[no]test_bool: test boolean (default: false)
+ -i,--test_int: test integer (default: 0)
+ -s,--test_str: test string (default: '')
+ -D,--long_desc: testing of a long description to force wrap of default value
+ (default: 'blah')
+ -F,--long_default: testing of long default value
+ (default: 'this_is_a_long_default_value_to_force_alternate_indentation')
+ -f,--[no]force: (default: false)
+ -h,--help: show this help (default: false)
+EOF
+ (
+ _flags_columns() { mock_flags_columns; }
+ # shellcheck disable=SC2034
+ FLAGS_HELP=${help}
+ # Wrap FLAGS call in if/then/else so 'set -e' works properly.
+ if FLAGS -h >"${stdoutF}" 2>"${stderrF}"; then
+ rtrn=$?
+ else
+ rtrn=$?
+ fi
+ echo "${rtrn}" >"${returnF}"
+ )
+ assertFalse 'a call for help should return a non-zero exit code.' "$(th_queryReturn)"
+
+ if ! diff "${expectedF}" "${stderrF}" >/dev/null; then
+ fail 'unexpected help output'
+ th_showOutput
+ fi
+}
+
+testNoHelp() {
+ if ! flags_getoptIsEnh; then
+ startSkipping
+ fi
+
+ ( FLAGS --nohelp >"${stdoutF}" 2>"${stderrF}" )
+ r3turn=$?
+ assertTrue "FLAGS returned a non-zero result (${r3turn})" ${r3turn}
+ assertFalse 'expected no output to STDOUT' "[ -s '${stdoutF}' ]"
+ assertFalse 'expected no output to STDERR' "[ -s '${stderrF}' ]"
+}
+
+testLoggingLevel() {
+ # Check that the default logging level is set properly.
+ got=`flags_loggingLevel` want=${__FLAGS_LEVEL_DEFAULT}
+ assertTrue "Unexpected default logging level = ${got}, want ${want}" "[ ${got} -eq ${want} ]"
+
+ # Override the logging level, and check again.
+ flags_setLoggingLevel "${FLAGS_LEVEL_FATAL}"
+ flags_setLoggingLevel "${FLAGS_LEVEL_INFO}"
+ got=`flags_loggingLevel` want=${FLAGS_LEVEL_INFO}
+ assertTrue "Unexpected configured logging level = ${got}, want ${want}" "[ ${got} -eq ${want} ]"
+}
+
+# According to https://github.com/kward/shflags/issues/28
+#
+# DEFINE_boolean misbehaves when help-string is empty
+testIssue28() {
+ # shellcheck disable=SC2034
+ DEFINE_boolean 'force' false '' f
+
+ testHelp && return
+}
+
+oneTimeSetUp() {
+ th_oneTimeSetUp
+
+ if flags_getoptIsStd; then
+ th_warn 'Standard version of getopt found. Enhanced tests will be skipped.'
+ return
+ fi
+ th_warn 'Enhanced version of getopt found. Standard tests will be skipped.'
+}
+
+setUp() {
+ flags_reset
+}
+
+# Load and run shUnit2.
+# shellcheck disable=SC2034
+[ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0
+. "${TH_SHUNIT}"