blob: 5efb43e9dd350c529938833635881f0fb600567c [file] [log] [blame]
kate.ward2fb41e32008-07-10 18:42:46 +00001#! /bin/sh
2# vim:et:ft=sh:sts=2:sw=2
3#
kate.ward437639d2008-10-19 17:21:41 +00004# shFlags unit test for the public functions
kate.ward2fb41e32008-07-10 18:42:46 +00005
6# load test helpers
7. ./shflags_test_helpers
8
9#------------------------------------------------------------------------------
10# suite tests
11#
12
kate.warddc10fe92008-07-10 19:37:16 +000013testHelp()
kate.ward2fb41e32008-07-10 18:42:46 +000014{
kate.warda2adce12013-01-15 00:00:39 +000015 _testHelp '-h'
16 flags_getoptIsEnh || return
17 _testHelp '--help'
18}
kate.ward2fb41e32008-07-10 18:42:46 +000019
kate.warda2adce12013-01-15 00:00:39 +000020_testHelp()
21{
22 flag=$1
23
24 # test default help output
25 th_clearReturn
26 (
27 FLAGS ${flag} >"${stdoutF}" 2>"${stderrF}"
28 echo $? >"${returnF}"
29 )
30 th_queryReturn
kate.ward1cb79602011-06-10 11:15:49 +000031 assertTrue \
32 'short help request should have returned a true exit code.' \
kate.warda2adce12013-01-15 00:00:39 +000033 ${th_return}
34 grep 'show this help' "${stderrF}" >/dev/null
kate.ward1cb79602011-06-10 11:15:49 +000035 grepped=$?
kate.ward2fb41e32008-07-10 18:42:46 +000036 assertTrue \
37 'short request for help should have produced some help output.' \
kate.ward1cb79602011-06-10 11:15:49 +000038 ${grepped}
kate.warda2adce12013-01-15 00:00:39 +000039 [ ${grepped} -ne ${FLAGS_TRUE} ] && th_showOutput
kate.ward2fb41e32008-07-10 18:42:46 +000040
41 # test proper output when FLAGS_HELP set
kate.warda2adce12013-01-15 00:00:39 +000042 (
43 FLAGS_HELP='this is a test'
44 FLAGS ${flag} >"${stdoutF}" 2>"${stderrF}"
45 )
46 grep 'this is a test' "${stderrF}" >/dev/null
kate.ward1cb79602011-06-10 11:15:49 +000047 grepped=$?
48 assertTrue 'setting FLAGS_HELP did not produce expected result' ${grepped}
kate.warda2adce12013-01-15 00:00:39 +000049 [ ${grepped} -ne ${FLAGS_TRUE} ] && th_showOutput
kate.ward2fb41e32008-07-10 18:42:46 +000050
51 # test that "'" chars work in help string
kate.warda2adce12013-01-15 00:00:39 +000052 (
53 DEFINE_boolean b false "help string containing a ' char" b
54 FLAGS ${flag} >"${stdoutF}" 2>"${stderrF}"
55 )
56 grep "help string containing a ' char" "${stderrF}" >/dev/null
kate.ward1cb79602011-06-10 11:15:49 +000057 grepped=$?
58 assertTrue "help strings containing apostrophes don't work" ${grepped}
kate.warda2adce12013-01-15 00:00:39 +000059 [ ${grepped} -ne ${FLAGS_TRUE} ] && th_showOutput
kate.ward2fb41e32008-07-10 18:42:46 +000060}
61
kate.ward1ee88562013-01-01 22:08:05 +000062mock_flags_columns()
63{
64 echo 80
65}
66
kate.warddc10fe92008-07-10 19:37:16 +000067testStandardHelpOutput()
kate.ward2fb41e32008-07-10 18:42:46 +000068{
kate.warddd6c9132008-11-13 00:47:53 +000069 flags_getoptIsStd || startSkipping
kate.ward2fb41e32008-07-10 18:42:46 +000070
kate.warddc10fe92008-07-10 19:37:16 +000071 DEFINE_boolean test_bool false 'test boolean' b
kate.ward437639d2008-10-19 17:21:41 +000072 DEFINE_integer test_int 0 'test integer' i
kate.warddc10fe92008-07-10 19:37:16 +000073 DEFINE_string test_str '' 'test string' s
kate.ward437639d2008-10-19 17:21:41 +000074 DEFINE_string long_desc 'blah' \
kate.ward64099612008-11-17 17:36:14 +000075 'testing of a long description to force wrap of default value' D
76 DEFINE_string long_default \
kate.ward90681c32008-11-17 17:39:14 +000077 'this_is_a_long_default_value_to_force_alternate_indentation' \
kate.ward64099612008-11-17 17:36:14 +000078 'testing of long default value' F
kate.wardf08c5b62008-07-11 20:32:11 +000079 help='USAGE: standard [flags] args'
kate.ward2fb41e32008-07-10 18:42:46 +000080
81 cat >"${expectedF}" <<EOF
kate.ward3a674972009-04-01 03:44:44 +000082${help}
kate.ward2fb41e32008-07-10 18:42:46 +000083flags:
kate.ward437639d2008-10-19 17:21:41 +000084 -b test boolean (default: false)
85 -i test integer (default: 0)
86 -s test string (default: '')
kate.ward64099612008-11-17 17:36:14 +000087 -D testing of a long description to force wrap of default value
kate.ward437639d2008-10-19 17:21:41 +000088 (default: 'blah')
kate.ward64099612008-11-17 17:36:14 +000089 -F testing of long default value
kate.ward90681c32008-11-17 17:39:14 +000090 (default: 'this_is_a_long_default_value_to_force_alternate_indentation')
kate.ward437639d2008-10-19 17:21:41 +000091 -h show this help (default: false)
kate.warddc10fe92008-07-10 19:37:16 +000092EOF
kate.ward1ee88562013-01-01 22:08:05 +000093 (
kate.warda2adce12013-01-15 00:00:39 +000094 _flags_columns() { mock_flags_columns; }
kate.ward1ee88562013-01-01 22:08:05 +000095 FLAGS_HELP=${help};
96 FLAGS -h >"${stdoutF}" 2>"${stderrF}"
97 )
kate.ward1cb79602011-06-10 11:15:49 +000098 r3turn=$?
99 assertTrue 'a call for help should not return an error' ${r3turn}
kate.warde10dd532013-01-04 21:52:23 +0000100
kate.warddc10fe92008-07-10 19:37:16 +0000101 diff "${expectedF}" "${stderrF}" >/dev/null
kate.warde10dd532013-01-04 21:52:23 +0000102 r3turn=$?
103 assertTrue 'unexpected help output' ${r3turn}
104 th_showOutput ${r3turn} "${stdoutF}" "${stderrF}"
kate.warddc10fe92008-07-10 19:37:16 +0000105}
106
107testEnhancedHelpOutput()
108{
109 flags_getoptIsEnh || startSkipping
110
111 DEFINE_boolean test_bool false 'test boolean' b
kate.ward437639d2008-10-19 17:21:41 +0000112 DEFINE_integer test_int 0 'test integer' i
kate.warddc10fe92008-07-10 19:37:16 +0000113 DEFINE_string test_str '' 'test string' s
kate.ward437639d2008-10-19 17:21:41 +0000114 DEFINE_string long_desc 'blah' \
kate.wardde77c872008-11-17 17:40:04 +0000115 'testing of a long description to force wrap of default value' D
kate.ward64099612008-11-17 17:36:14 +0000116 DEFINE_string long_default \
kate.ward90681c32008-11-17 17:39:14 +0000117 'this_is_a_long_default_value_to_force_alternate_indentation' \
kate.ward64099612008-11-17 17:36:14 +0000118 'testing of long default value' F
kate.ward42cb23b2008-07-11 20:42:58 +0000119 help='USAGE: enhanced [flags] args'
kate.warddc10fe92008-07-10 19:37:16 +0000120
121 cat >"${expectedF}" <<EOF
kate.ward3a674972009-04-01 03:44:44 +0000122${help}
kate.warddc10fe92008-07-10 19:37:16 +0000123flags:
kate.ward437639d2008-10-19 17:21:41 +0000124 -b,--[no]test_bool: test boolean (default: false)
125 -i,--test_int: test integer (default: 0)
126 -s,--test_str: test string (default: '')
kate.ward64099612008-11-17 17:36:14 +0000127 -D,--long_desc: testing of a long description to force wrap of default value
kate.ward437639d2008-10-19 17:21:41 +0000128 (default: 'blah')
kate.ward64099612008-11-17 17:36:14 +0000129 -F,--long_default: testing of long default value
kate.ward90681c32008-11-17 17:39:14 +0000130 (default: 'this_is_a_long_default_value_to_force_alternate_indentation')
kate.ward1cb79602011-06-10 11:15:49 +0000131 -h,--help: show this help (default: false)
kate.ward2fb41e32008-07-10 18:42:46 +0000132EOF
kate.warde10dd532013-01-04 21:52:23 +0000133 (
kate.warda2adce12013-01-15 00:00:39 +0000134 _flags_columns() { mock_flags_columns; }
kate.warde10dd532013-01-04 21:52:23 +0000135 FLAGS_HELP=${help};
136 FLAGS -h >"${stdoutF}" 2>"${stderrF}"
137 )
kate.ward1cb79602011-06-10 11:15:49 +0000138 r3turn=$?
139 assertTrue 'a call for help should not return an error' ${r3turn}
kate.warde10dd532013-01-04 21:52:23 +0000140
kate.ward2fb41e32008-07-10 18:42:46 +0000141 diff "${expectedF}" "${stderrF}" >/dev/null
kate.ward1cb79602011-06-10 11:15:49 +0000142 differed=$?
143 assertTrue 'unexpected help output' ${differed}
144 th_showOutput ${differed} "${stdoutF}" "${stderrF}"
kate.ward2fb41e32008-07-10 18:42:46 +0000145}
146
kate.ward5b48fc12008-11-13 00:42:43 +0000147testNoHelp()
148{
149 flags_getoptIsEnh || startSkipping
150
151 ( FLAGS --nohelp >"${stdoutF}" 2>"${stderrF}" )
kate.ward1cb79602011-06-10 11:15:49 +0000152 r3turn=$?
153 assertTrue "FLAGS returned a non-zero result (${r3turn})" ${r3turn}
kate.ward5b48fc12008-11-13 00:42:43 +0000154 assertFalse 'expected no output to STDOUT' "[ -s '${stdoutF}' ]"
155 assertFalse 'expected no output to STDERR' "[ -s '${stderrF}' ]"
156}
157
kate.ward2fb41e32008-07-10 18:42:46 +0000158#------------------------------------------------------------------------------
159# suite functions
160#
161
162oneTimeSetUp()
163{
kate.ward1b600c52008-11-12 21:26:05 +0000164 th_oneTimeSetUp
kate.ward709c1342008-11-14 18:23:03 +0000165
kate.wardb0aaccf2008-11-15 17:16:55 +0000166 if flags_getoptIsStd; then
167 th_warn 'Standard version of getopt found. Enhanced tests will be skipped.'
168 else
169 th_warn 'Enhanced version of getopt found. Standard tests will be skipped.'
kate.ward709c1342008-11-14 18:23:03 +0000170 fi
kate.ward2fb41e32008-07-10 18:42:46 +0000171}
172
173setUp()
174{
175 flags_reset
176}
177
178# load and run shUnit2
179[ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0
180. ${TH_SHUNIT}