blob: adffb745d7744b676c9fa75ae11360237c24ee25 [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{
21 #
22 # test short -h option
23 #
24
kate.ward1cb79602011-06-10 11:15:49 +000025 result=`FLAGS -h 2>&1`
26 r3turn=$?
27 assertTrue \
28 'short help request should have returned a true exit code.' \
29 ${r3turn}
30 echo "${result}" |grep -- 'show this help' >/dev/null
31 grepped=$?
kate.ward2fb41e32008-07-10 18:42:46 +000032 assertTrue \
33 'short request for help should have produced some help output.' \
kate.ward1cb79602011-06-10 11:15:49 +000034 ${grepped}
35 [ ${grepped} -ne ${FLAGS_TRUE} ] && echo "${result}" >&2
kate.ward2fb41e32008-07-10 18:42:46 +000036
37 # test proper output when FLAGS_HELP set
kate.ward1cb79602011-06-10 11:15:49 +000038 result=`FLAGS_HELP='this is a test'; FLAGS -h 2>&1`
39 echo "${result}" |grep -- 'this is a test' >/dev/null
40 grepped=$?
41 assertTrue 'setting FLAGS_HELP did not produce expected result' ${grepped}
42 [ ${grepped} -ne ${FLAGS_TRUE} ] && echo "${result}" >&2
kate.ward2fb41e32008-07-10 18:42:46 +000043
44 # test that "'" chars work in help string
45 DEFINE_boolean b false "help string containing a ' char" b
kate.ward1cb79602011-06-10 11:15:49 +000046 result=`FLAGS -h 2>&1`
47 echo "${result}" |grep -- "help string containing a ' char" >/dev/null
48 grepped=$?
49 assertTrue "help strings containing apostrophes don't work" ${grepped}
50 [ ${grepped} -ne ${FLAGS_TRUE} ] && echo "${result}" >&2
kate.ward2fb41e32008-07-10 18:42:46 +000051
52 #
53 # test long --help option
54 #
55
kate.warddd6c9132008-11-13 00:47:53 +000056 flags_getoptIsEnh || startSkipping
kate.ward2fb41e32008-07-10 18:42:46 +000057
kate.ward1cb79602011-06-10 11:15:49 +000058 result=`FLAGS --help 2>&1`
59 r3turn=$?
60 assertTrue \
61 'long help request should have returned a true exit code' \
62 ${r3turn}
63 echo "${result}" |grep -- 'show this help' >/dev/null
64 grepped=$?
65 assertTrue \
66 'long help request should have produced some help output.' \
67 ${grepped}
kate.ward2fb41e32008-07-10 18:42:46 +000068}
69
kate.ward1ee88562013-01-01 22:08:05 +000070mock_flags_columns()
71{
72 echo 80
73}
74
kate.warddc10fe92008-07-10 19:37:16 +000075testStandardHelpOutput()
kate.ward2fb41e32008-07-10 18:42:46 +000076{
kate.warddd6c9132008-11-13 00:47:53 +000077 flags_getoptIsStd || startSkipping
kate.ward2fb41e32008-07-10 18:42:46 +000078
kate.warddc10fe92008-07-10 19:37:16 +000079 DEFINE_boolean test_bool false 'test boolean' b
kate.ward437639d2008-10-19 17:21:41 +000080 DEFINE_integer test_int 0 'test integer' i
kate.warddc10fe92008-07-10 19:37:16 +000081 DEFINE_string test_str '' 'test string' s
kate.ward437639d2008-10-19 17:21:41 +000082 DEFINE_string long_desc 'blah' \
kate.ward64099612008-11-17 17:36:14 +000083 'testing of a long description to force wrap of default value' D
84 DEFINE_string long_default \
kate.ward90681c32008-11-17 17:39:14 +000085 'this_is_a_long_default_value_to_force_alternate_indentation' \
kate.ward64099612008-11-17 17:36:14 +000086 'testing of long default value' F
kate.wardf08c5b62008-07-11 20:32:11 +000087 help='USAGE: standard [flags] args'
kate.ward2fb41e32008-07-10 18:42:46 +000088
89 cat >"${expectedF}" <<EOF
kate.ward3a674972009-04-01 03:44:44 +000090${help}
kate.ward2fb41e32008-07-10 18:42:46 +000091flags:
kate.ward437639d2008-10-19 17:21:41 +000092 -b test boolean (default: false)
93 -i test integer (default: 0)
94 -s test string (default: '')
kate.ward64099612008-11-17 17:36:14 +000095 -D testing of a long description to force wrap of default value
kate.ward437639d2008-10-19 17:21:41 +000096 (default: 'blah')
kate.ward64099612008-11-17 17:36:14 +000097 -F testing of long default value
kate.ward90681c32008-11-17 17:39:14 +000098 (default: 'this_is_a_long_default_value_to_force_alternate_indentation')
kate.ward437639d2008-10-19 17:21:41 +000099 -h show this help (default: false)
kate.warddc10fe92008-07-10 19:37:16 +0000100EOF
kate.ward1ee88562013-01-01 22:08:05 +0000101 (
kate.warde10dd532013-01-04 21:52:23 +0000102 _flags_columns() { mock_flags_columns "\$@"; }
kate.ward1ee88562013-01-01 22:08:05 +0000103 FLAGS_HELP=${help};
104 FLAGS -h >"${stdoutF}" 2>"${stderrF}"
105 )
kate.ward1cb79602011-06-10 11:15:49 +0000106 r3turn=$?
107 assertTrue 'a call for help should not return an error' ${r3turn}
kate.warde10dd532013-01-04 21:52:23 +0000108
kate.warddc10fe92008-07-10 19:37:16 +0000109 diff "${expectedF}" "${stderrF}" >/dev/null
kate.warde10dd532013-01-04 21:52:23 +0000110 r3turn=$?
111 assertTrue 'unexpected help output' ${r3turn}
112 th_showOutput ${r3turn} "${stdoutF}" "${stderrF}"
kate.warddc10fe92008-07-10 19:37:16 +0000113}
114
115testEnhancedHelpOutput()
116{
117 flags_getoptIsEnh || startSkipping
118
119 DEFINE_boolean test_bool false 'test boolean' b
kate.ward437639d2008-10-19 17:21:41 +0000120 DEFINE_integer test_int 0 'test integer' i
kate.warddc10fe92008-07-10 19:37:16 +0000121 DEFINE_string test_str '' 'test string' s
kate.ward437639d2008-10-19 17:21:41 +0000122 DEFINE_string long_desc 'blah' \
kate.wardde77c872008-11-17 17:40:04 +0000123 'testing of a long description to force wrap of default value' D
kate.ward64099612008-11-17 17:36:14 +0000124 DEFINE_string long_default \
kate.ward90681c32008-11-17 17:39:14 +0000125 'this_is_a_long_default_value_to_force_alternate_indentation' \
kate.ward64099612008-11-17 17:36:14 +0000126 'testing of long default value' F
kate.ward42cb23b2008-07-11 20:42:58 +0000127 help='USAGE: enhanced [flags] args'
kate.warddc10fe92008-07-10 19:37:16 +0000128
129 cat >"${expectedF}" <<EOF
kate.ward3a674972009-04-01 03:44:44 +0000130${help}
kate.warddc10fe92008-07-10 19:37:16 +0000131flags:
kate.ward437639d2008-10-19 17:21:41 +0000132 -b,--[no]test_bool: test boolean (default: false)
133 -i,--test_int: test integer (default: 0)
134 -s,--test_str: test string (default: '')
kate.ward64099612008-11-17 17:36:14 +0000135 -D,--long_desc: testing of a long description to force wrap of default value
kate.ward437639d2008-10-19 17:21:41 +0000136 (default: 'blah')
kate.ward64099612008-11-17 17:36:14 +0000137 -F,--long_default: testing of long default value
kate.ward90681c32008-11-17 17:39:14 +0000138 (default: 'this_is_a_long_default_value_to_force_alternate_indentation')
kate.ward1cb79602011-06-10 11:15:49 +0000139 -h,--help: show this help (default: false)
kate.ward2fb41e32008-07-10 18:42:46 +0000140EOF
kate.warde10dd532013-01-04 21:52:23 +0000141 (
142 _flags_columns() { mock_flags_columns "\$@"; }
143 FLAGS_HELP=${help};
144 FLAGS -h >"${stdoutF}" 2>"${stderrF}"
145 )
kate.ward1cb79602011-06-10 11:15:49 +0000146 r3turn=$?
147 assertTrue 'a call for help should not return an error' ${r3turn}
kate.warde10dd532013-01-04 21:52:23 +0000148
kate.ward2fb41e32008-07-10 18:42:46 +0000149 diff "${expectedF}" "${stderrF}" >/dev/null
kate.ward1cb79602011-06-10 11:15:49 +0000150 differed=$?
151 assertTrue 'unexpected help output' ${differed}
152 th_showOutput ${differed} "${stdoutF}" "${stderrF}"
kate.ward2fb41e32008-07-10 18:42:46 +0000153}
154
kate.ward5b48fc12008-11-13 00:42:43 +0000155testNoHelp()
156{
157 flags_getoptIsEnh || startSkipping
158
159 ( FLAGS --nohelp >"${stdoutF}" 2>"${stderrF}" )
kate.ward1cb79602011-06-10 11:15:49 +0000160 r3turn=$?
161 assertTrue "FLAGS returned a non-zero result (${r3turn})" ${r3turn}
kate.ward5b48fc12008-11-13 00:42:43 +0000162 assertFalse 'expected no output to STDOUT' "[ -s '${stdoutF}' ]"
163 assertFalse 'expected no output to STDERR' "[ -s '${stderrF}' ]"
164}
165
kate.ward2fb41e32008-07-10 18:42:46 +0000166#------------------------------------------------------------------------------
167# suite functions
168#
169
170oneTimeSetUp()
171{
kate.ward1b600c52008-11-12 21:26:05 +0000172 th_oneTimeSetUp
kate.ward709c1342008-11-14 18:23:03 +0000173
kate.wardb0aaccf2008-11-15 17:16:55 +0000174 if flags_getoptIsStd; then
175 th_warn 'Standard version of getopt found. Enhanced tests will be skipped.'
176 else
177 th_warn 'Enhanced version of getopt found. Standard tests will be skipped.'
kate.ward709c1342008-11-14 18:23:03 +0000178 fi
kate.ward2fb41e32008-07-10 18:42:46 +0000179}
180
181setUp()
182{
183 flags_reset
184}
185
186# load and run shUnit2
187[ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0
188. ${TH_SHUNIT}