#! /bin/sh # vim:et:ft=sh:sts=2:sw=2 # # shFlags unit test for the public functions # load test helpers . ./shflags_test_helpers #------------------------------------------------------------------------------ # suite tests # testHelp() { _testHelp '-h' flags_getoptIsEnh || return _testHelp '--help' } _testHelp() { flag=$1 # test default help output th_clearReturn ( FLAGS ${flag} >"${stdoutF}" 2>"${stderrF}" echo $? >"${returnF}" ) th_queryReturn assertTrue \ 'short help request should have returned a true exit code.' \ ${th_return} grep 'show this help' "${stderrF}" >/dev/null grepped=$? assertTrue \ 'short request for help should have produced some help output.' \ ${grepped} [ ${grepped} -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 grepped=$? assertTrue 'setting FLAGS_HELP did not produce expected result' ${grepped} [ ${grepped} -ne ${FLAGS_TRUE} ] && th_showOutput # test that "'" chars work in help string ( DEFINE_boolean b false "help string containing a ' char" b FLAGS ${flag} >"${stdoutF}" 2>"${stderrF}" ) grep "help string containing a ' char" "${stderrF}" >/dev/null grepped=$? assertTrue "help strings containing apostrophes don't work" ${grepped} [ ${grepped} -ne ${FLAGS_TRUE} ] && th_showOutput } mock_flags_columns() { echo 80 } testStandardHelpOutput() { flags_getoptIsStd || startSkipping 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 help='USAGE: standard [flags] args' cat >"${expectedF}" <"${stdoutF}" 2>"${stderrF}" ) r3turn=$? assertTrue 'a call for help should not return an error' ${r3turn} diff "${expectedF}" "${stderrF}" >/dev/null r3turn=$? assertTrue 'unexpected help output' ${r3turn} th_showOutput ${r3turn} "${stdoutF}" "${stderrF}" } testEnhancedHelpOutput() { flags_getoptIsEnh || startSkipping 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 help='USAGE: enhanced [flags] args' cat >"${expectedF}" <"${stdoutF}" 2>"${stderrF}" ) r3turn=$? assertTrue 'a call for help should not return an error' ${r3turn} diff "${expectedF}" "${stderrF}" >/dev/null differed=$? assertTrue 'unexpected help output' ${differed} th_showOutput ${differed} "${stdoutF}" "${stderrF}" } testNoHelp() { flags_getoptIsEnh || startSkipping ( 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}' ]" } #------------------------------------------------------------------------------ # suite functions # oneTimeSetUp() { th_oneTimeSetUp if flags_getoptIsStd; then th_warn 'Standard version of getopt found. Enhanced tests will be skipped.' else th_warn 'Enhanced version of getopt found. Standard tests will be skipped.' fi } setUp() { flags_reset } # load and run shUnit2 [ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0 . ${TH_SHUNIT}