#! /bin/sh # vim:et:ft=sh:sts=2:sw=2 # # shFlags unit test for https://github.com/kward/shflags/issues/28. # # Copyright 2008-2017 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 # These variables will be overridden by the test helpers. setglobal expectedF = ""$(TMPDIR:-/tmp)/expected"" setglobal returnF = ""$(TMPDIR:-/tmp)/return"" setglobal stdoutF = ""$(TMPDIR:-/tmp)/STDOUT"" setglobal stderrF = ""$(TMPDIR:-/tmp)/STDERR"" # Load test helpers. source ./shflags_test_helpers proc testHelp { _testHelp '-h' flags_getoptIsEnh || return _testHelp '--help' } proc _testHelp { setglobal flag = $1 # Test default help output. th_clearReturn shell { FLAGS $(flag) >$(stdoutF) !2 >$(stderrF) echo $Status >$(returnF) } assertFalse \ 'short help request should have returned a false exit code.' \ $[th_queryReturn] grep 'show this help' $(stderrF) >/dev/null setglobal grepped = $Status assertTrue \ 'short request for help should have produced some help output.' \ $(grepped) test $(grepped) -ne $(FLAGS_TRUE) && th_showOutput # Test proper output when FLAGS_HELP set. shell { setglobal FLAGS_HELP = ''this is a test'' FLAGS $(flag) >$(stdoutF) !2 >$(stderrF) } grep 'this is a test' $(stderrF) >/dev/null setglobal grepped = $Status assertTrue 'setting FLAGS_HELP did not produce expected result' $(grepped) test $(grepped) -ne $(FLAGS_TRUE) && th_showOutput # test that "'" chars work in help string shell { DEFINE_boolean b false "help string containing a ' char" b FLAGS $(flag) >$(stdoutF) !2 >$(stderrF) } grep "help string containing a ' char" $(stderrF) >/dev/null setglobal grepped = $Status assertTrue "help strings containing apostrophes don't work" $(grepped) test $(grepped) -ne $(FLAGS_TRUE) && th_showOutput } proc mock_flags_columns { echo 80 } proc _doDefines { DEFINE_boolean 'force' false '' f } proc testStandardHelpOutput { flags_getoptIsStd || startSkipping _doDefines setglobal help = ''USAGE: standard [flags] args'' cat >$(expectedF) << """ $(help) flags: -f (default: false) -h show this help (default: false) """ shell { proc _flags_columns { mock_flags_columns; } setglobal FLAGS_HELP = $(help); FLAGS -h >$(stdoutF) !2 >$(stderrF) } diff $(expectedF) $(stderrF) >/dev/null setglobal r3turn = $Status assertTrue 'unexpected help output' $(r3turn) th_showOutput $(r3turn) $(stdoutF) $(stderrF) } proc testEnhancedHelpOutput { flags_getoptIsEnh || startSkipping _doDefines setglobal help = ''USAGE: enhanced [flags] args'' cat >$(expectedF) << """ $(help) flags: -f,--[no]force: (default: false) -h,--help: show this help (default: false) """ shell { proc _flags_columns { mock_flags_columns; } # shellcheck disable=SC2034 setglobal FLAGS_HELP = $(help); FLAGS -h >$(stdoutF) !2 >$(stderrF) } diff $(expectedF) $(stderrF) >/dev/null setglobal differed = $Status assertTrue 'unexpected help output' $(differed) th_showOutput $(differed) $(stdoutF) $(stderrF) } proc oneTimeSetUp { th_oneTimeSetUp if flags_getoptIsStd { th_warn 'Standard version of getopt found. Enhanced tests will be skipped.' return } th_warn 'Enhanced version of getopt found. Standard tests will be skipped.' } proc setUp { flags_reset } # Load and run shUnit2. # shellcheck disable=SC2034 test -n $(ZSH_VERSION:-) && setglobal SHUNIT_PARENT = $0 source "${TH_SHUNIT}"