blob: 3877d80a0aca2258d77afb463e3b0014b07ecde8 [file] [log] [blame]
kate.ward2fb41e32008-07-10 18:42:46 +00001#! /bin/sh
kate.warddf46be92008-11-12 20:15:11 +00002# $Id$
kate.ward2fb41e32008-07-10 18:42:46 +00003# vim:et:ft=sh:sts=2:sw=2
4#
5# Copyright 2008 Kate Ward. All Rights Reserved.
6# Released under the LGPL (GNU Lesser General Public License)
7#
8# Author: kate.ward@forestent.com (Kate Ward)
9#
kate.ward437639d2008-10-19 17:21:41 +000010# shFlags unit test for the public functions
kate.ward2fb41e32008-07-10 18:42:46 +000011
12# load test helpers
13. ./shflags_test_helpers
14
15#------------------------------------------------------------------------------
16# suite tests
17#
18
kate.warddc10fe92008-07-10 19:37:16 +000019testHelp()
kate.ward2fb41e32008-07-10 18:42:46 +000020{
kate.warda2adce12013-01-15 00:00:39 +000021 _testHelp '-h'
22 flags_getoptIsEnh || return
23 _testHelp '--help'
24}
kate.ward2fb41e32008-07-10 18:42:46 +000025
kate.warda2adce12013-01-15 00:00:39 +000026_testHelp()
27{
28 flag=$1
29
30 # test default help output
31 th_clearReturn
32 (
33 FLAGS ${flag} >"${stdoutF}" 2>"${stderrF}"
34 echo $? >"${returnF}"
35 )
36 th_queryReturn
kate.ward1cb79602011-06-10 11:15:49 +000037 assertTrue \
38 'short help request should have returned a true exit code.' \
kate.warda2adce12013-01-15 00:00:39 +000039 ${th_return}
40 grep 'show this help' "${stderrF}" >/dev/null
kate.ward1cb79602011-06-10 11:15:49 +000041 grepped=$?
kate.ward2fb41e32008-07-10 18:42:46 +000042 assertTrue \
43 'short request for help should have produced some help output.' \
kate.ward1cb79602011-06-10 11:15:49 +000044 ${grepped}
kate.warda2adce12013-01-15 00:00:39 +000045 [ ${grepped} -ne ${FLAGS_TRUE} ] && th_showOutput
kate.ward2fb41e32008-07-10 18:42:46 +000046
47 # test proper output when FLAGS_HELP set
kate.warda2adce12013-01-15 00:00:39 +000048 (
49 FLAGS_HELP='this is a test'
50 FLAGS ${flag} >"${stdoutF}" 2>"${stderrF}"
51 )
52 grep 'this is a test' "${stderrF}" >/dev/null
kate.ward1cb79602011-06-10 11:15:49 +000053 grepped=$?
54 assertTrue 'setting FLAGS_HELP did not produce expected result' ${grepped}
kate.warda2adce12013-01-15 00:00:39 +000055 [ ${grepped} -ne ${FLAGS_TRUE} ] && th_showOutput
kate.ward2fb41e32008-07-10 18:42:46 +000056
57 # test that "'" chars work in help string
kate.warda2adce12013-01-15 00:00:39 +000058 (
59 DEFINE_boolean b false "help string containing a ' char" b
60 FLAGS ${flag} >"${stdoutF}" 2>"${stderrF}"
61 )
62 grep "help string containing a ' char" "${stderrF}" >/dev/null
kate.ward1cb79602011-06-10 11:15:49 +000063 grepped=$?
64 assertTrue "help strings containing apostrophes don't work" ${grepped}
kate.warda2adce12013-01-15 00:00:39 +000065 [ ${grepped} -ne ${FLAGS_TRUE} ] && th_showOutput
kate.ward2fb41e32008-07-10 18:42:46 +000066}
67
kate.ward1ee88562013-01-01 22:08:05 +000068mock_flags_columns()
69{
70 echo 80
71}
72
kate.warddc10fe92008-07-10 19:37:16 +000073testStandardHelpOutput()
kate.ward2fb41e32008-07-10 18:42:46 +000074{
kate.warddd6c9132008-11-13 00:47:53 +000075 flags_getoptIsStd || startSkipping
kate.ward2fb41e32008-07-10 18:42:46 +000076
kate.warddc10fe92008-07-10 19:37:16 +000077 DEFINE_boolean test_bool false 'test boolean' b
kate.ward437639d2008-10-19 17:21:41 +000078 DEFINE_integer test_int 0 'test integer' i
kate.warddc10fe92008-07-10 19:37:16 +000079 DEFINE_string test_str '' 'test string' s
kate.ward437639d2008-10-19 17:21:41 +000080 DEFINE_string long_desc 'blah' \
kate.ward64099612008-11-17 17:36:14 +000081 'testing of a long description to force wrap of default value' D
82 DEFINE_string long_default \
kate.ward90681c32008-11-17 17:39:14 +000083 'this_is_a_long_default_value_to_force_alternate_indentation' \
kate.ward64099612008-11-17 17:36:14 +000084 'testing of long default value' F
kate.wardf08c5b62008-07-11 20:32:11 +000085 help='USAGE: standard [flags] args'
kate.ward2fb41e32008-07-10 18:42:46 +000086
87 cat >"${expectedF}" <<EOF
kate.ward3a674972009-04-01 03:44:44 +000088${help}
kate.ward2fb41e32008-07-10 18:42:46 +000089flags:
kate.ward437639d2008-10-19 17:21:41 +000090 -b test boolean (default: false)
91 -i test integer (default: 0)
92 -s test string (default: '')
kate.ward64099612008-11-17 17:36:14 +000093 -D testing of a long description to force wrap of default value
kate.ward437639d2008-10-19 17:21:41 +000094 (default: 'blah')
kate.ward64099612008-11-17 17:36:14 +000095 -F testing of long default value
kate.ward90681c32008-11-17 17:39:14 +000096 (default: 'this_is_a_long_default_value_to_force_alternate_indentation')
kate.ward437639d2008-10-19 17:21:41 +000097 -h show this help (default: false)
kate.warddc10fe92008-07-10 19:37:16 +000098EOF
kate.ward1ee88562013-01-01 22:08:05 +000099 (
kate.warda2adce12013-01-15 00:00:39 +0000100 _flags_columns() { mock_flags_columns; }
kate.ward1ee88562013-01-01 22:08:05 +0000101 FLAGS_HELP=${help};
102 FLAGS -h >"${stdoutF}" 2>"${stderrF}"
103 )
kate.ward1cb79602011-06-10 11:15:49 +0000104 r3turn=$?
105 assertTrue 'a call for help should not return an error' ${r3turn}
kate.warde10dd532013-01-04 21:52:23 +0000106
kate.warddc10fe92008-07-10 19:37:16 +0000107 diff "${expectedF}" "${stderrF}" >/dev/null
kate.warde10dd532013-01-04 21:52:23 +0000108 r3turn=$?
109 assertTrue 'unexpected help output' ${r3turn}
110 th_showOutput ${r3turn} "${stdoutF}" "${stderrF}"
kate.warddc10fe92008-07-10 19:37:16 +0000111}
112
113testEnhancedHelpOutput()
114{
115 flags_getoptIsEnh || startSkipping
116
117 DEFINE_boolean test_bool false 'test boolean' b
kate.ward437639d2008-10-19 17:21:41 +0000118 DEFINE_integer test_int 0 'test integer' i
kate.warddc10fe92008-07-10 19:37:16 +0000119 DEFINE_string test_str '' 'test string' s
kate.ward437639d2008-10-19 17:21:41 +0000120 DEFINE_string long_desc 'blah' \
kate.wardde77c872008-11-17 17:40:04 +0000121 'testing of a long description to force wrap of default value' D
kate.ward64099612008-11-17 17:36:14 +0000122 DEFINE_string long_default \
kate.ward90681c32008-11-17 17:39:14 +0000123 'this_is_a_long_default_value_to_force_alternate_indentation' \
kate.ward64099612008-11-17 17:36:14 +0000124 'testing of long default value' F
kate.ward42cb23b2008-07-11 20:42:58 +0000125 help='USAGE: enhanced [flags] args'
kate.warddc10fe92008-07-10 19:37:16 +0000126
127 cat >"${expectedF}" <<EOF
kate.ward3a674972009-04-01 03:44:44 +0000128${help}
kate.warddc10fe92008-07-10 19:37:16 +0000129flags:
kate.ward437639d2008-10-19 17:21:41 +0000130 -b,--[no]test_bool: test boolean (default: false)
131 -i,--test_int: test integer (default: 0)
132 -s,--test_str: test string (default: '')
kate.ward64099612008-11-17 17:36:14 +0000133 -D,--long_desc: testing of a long description to force wrap of default value
kate.ward437639d2008-10-19 17:21:41 +0000134 (default: 'blah')
kate.ward64099612008-11-17 17:36:14 +0000135 -F,--long_default: testing of long default value
kate.ward90681c32008-11-17 17:39:14 +0000136 (default: 'this_is_a_long_default_value_to_force_alternate_indentation')
kate.ward1cb79602011-06-10 11:15:49 +0000137 -h,--help: show this help (default: false)
kate.ward2fb41e32008-07-10 18:42:46 +0000138EOF
kate.warde10dd532013-01-04 21:52:23 +0000139 (
kate.warda2adce12013-01-15 00:00:39 +0000140 _flags_columns() { mock_flags_columns; }
kate.warde10dd532013-01-04 21:52:23 +0000141 FLAGS_HELP=${help};
142 FLAGS -h >"${stdoutF}" 2>"${stderrF}"
143 )
kate.ward1cb79602011-06-10 11:15:49 +0000144 r3turn=$?
145 assertTrue 'a call for help should not return an error' ${r3turn}
kate.warde10dd532013-01-04 21:52:23 +0000146
kate.ward2fb41e32008-07-10 18:42:46 +0000147 diff "${expectedF}" "${stderrF}" >/dev/null
kate.ward1cb79602011-06-10 11:15:49 +0000148 differed=$?
149 assertTrue 'unexpected help output' ${differed}
150 th_showOutput ${differed} "${stdoutF}" "${stderrF}"
kate.ward2fb41e32008-07-10 18:42:46 +0000151}
152
kate.ward5b48fc12008-11-13 00:42:43 +0000153testNoHelp()
154{
155 flags_getoptIsEnh || startSkipping
156
157 ( FLAGS --nohelp >"${stdoutF}" 2>"${stderrF}" )
kate.ward1cb79602011-06-10 11:15:49 +0000158 r3turn=$?
159 assertTrue "FLAGS returned a non-zero result (${r3turn})" ${r3turn}
kate.ward5b48fc12008-11-13 00:42:43 +0000160 assertFalse 'expected no output to STDOUT' "[ -s '${stdoutF}' ]"
161 assertFalse 'expected no output to STDERR' "[ -s '${stderrF}' ]"
162}
163
kate.ward2fb41e32008-07-10 18:42:46 +0000164#------------------------------------------------------------------------------
165# suite functions
166#
167
168oneTimeSetUp()
169{
kate.ward1b600c52008-11-12 21:26:05 +0000170 th_oneTimeSetUp
kate.ward709c1342008-11-14 18:23:03 +0000171
kate.wardb0aaccf2008-11-15 17:16:55 +0000172 if flags_getoptIsStd; then
173 th_warn 'Standard version of getopt found. Enhanced tests will be skipped.'
174 else
175 th_warn 'Enhanced version of getopt found. Standard tests will be skipped.'
kate.ward709c1342008-11-14 18:23:03 +0000176 fi
kate.ward2fb41e32008-07-10 18:42:46 +0000177}
178
179setUp()
180{
181 flags_reset
182}
183
184# load and run shUnit2
185[ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0
186. ${TH_SHUNIT}