blob: 50778629ca026452d0ed38a6ef2cfe131a401402 [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.warddc10fe92008-07-10 19:37:16 +000070testStandardHelpOutput()
kate.ward2fb41e32008-07-10 18:42:46 +000071{
kate.warddd6c9132008-11-13 00:47:53 +000072 flags_getoptIsStd || startSkipping
kate.ward2fb41e32008-07-10 18:42:46 +000073
kate.warddc10fe92008-07-10 19:37:16 +000074 DEFINE_boolean test_bool false 'test boolean' b
kate.ward437639d2008-10-19 17:21:41 +000075 DEFINE_integer test_int 0 'test integer' i
kate.warddc10fe92008-07-10 19:37:16 +000076 DEFINE_string test_str '' 'test string' s
kate.ward437639d2008-10-19 17:21:41 +000077 DEFINE_string long_desc 'blah' \
kate.ward64099612008-11-17 17:36:14 +000078 'testing of a long description to force wrap of default value' D
79 DEFINE_string long_default \
kate.ward90681c32008-11-17 17:39:14 +000080 'this_is_a_long_default_value_to_force_alternate_indentation' \
kate.ward64099612008-11-17 17:36:14 +000081 'testing of long default value' F
kate.wardf08c5b62008-07-11 20:32:11 +000082 help='USAGE: standard [flags] args'
kate.ward2fb41e32008-07-10 18:42:46 +000083
84 cat >"${expectedF}" <<EOF
kate.ward3a674972009-04-01 03:44:44 +000085${help}
kate.ward2fb41e32008-07-10 18:42:46 +000086flags:
kate.ward437639d2008-10-19 17:21:41 +000087 -b test boolean (default: false)
88 -i test integer (default: 0)
89 -s test string (default: '')
kate.ward64099612008-11-17 17:36:14 +000090 -D testing of a long description to force wrap of default value
kate.ward437639d2008-10-19 17:21:41 +000091 (default: 'blah')
kate.ward64099612008-11-17 17:36:14 +000092 -F testing of long default value
kate.ward90681c32008-11-17 17:39:14 +000093 (default: 'this_is_a_long_default_value_to_force_alternate_indentation')
kate.ward437639d2008-10-19 17:21:41 +000094 -h show this help (default: false)
kate.warddc10fe92008-07-10 19:37:16 +000095EOF
kate.wardf08c5b62008-07-11 20:32:11 +000096 ( FLAGS_HELP=${help}; FLAGS -h >"${stdoutF}" 2>"${stderrF}" )
kate.ward1cb79602011-06-10 11:15:49 +000097 r3turn=$?
98 assertTrue 'a call for help should not return an error' ${r3turn}
kate.warddc10fe92008-07-10 19:37:16 +000099 diff "${expectedF}" "${stderrF}" >/dev/null
kate.ward1cb79602011-06-10 11:15:49 +0000100 differed=$?
101 assertTrue 'unexpected help output' ${differed}
102 th_showOutput ${differed} "${stdoutF}" "${stderrF}"
kate.warddc10fe92008-07-10 19:37:16 +0000103}
104
105testEnhancedHelpOutput()
106{
107 flags_getoptIsEnh || startSkipping
108
109 DEFINE_boolean test_bool false 'test boolean' b
kate.ward437639d2008-10-19 17:21:41 +0000110 DEFINE_integer test_int 0 'test integer' i
kate.warddc10fe92008-07-10 19:37:16 +0000111 DEFINE_string test_str '' 'test string' s
kate.ward437639d2008-10-19 17:21:41 +0000112 DEFINE_string long_desc 'blah' \
kate.wardde77c872008-11-17 17:40:04 +0000113 'testing of a long description to force wrap of default value' D
kate.ward64099612008-11-17 17:36:14 +0000114 DEFINE_string long_default \
kate.ward90681c32008-11-17 17:39:14 +0000115 'this_is_a_long_default_value_to_force_alternate_indentation' \
kate.ward64099612008-11-17 17:36:14 +0000116 'testing of long default value' F
kate.ward42cb23b2008-07-11 20:42:58 +0000117 help='USAGE: enhanced [flags] args'
kate.warddc10fe92008-07-10 19:37:16 +0000118
119 cat >"${expectedF}" <<EOF
kate.ward3a674972009-04-01 03:44:44 +0000120${help}
kate.warddc10fe92008-07-10 19:37:16 +0000121flags:
kate.ward437639d2008-10-19 17:21:41 +0000122 -b,--[no]test_bool: test boolean (default: false)
123 -i,--test_int: test integer (default: 0)
124 -s,--test_str: test string (default: '')
kate.ward64099612008-11-17 17:36:14 +0000125 -D,--long_desc: testing of a long description to force wrap of default value
kate.ward437639d2008-10-19 17:21:41 +0000126 (default: 'blah')
kate.ward64099612008-11-17 17:36:14 +0000127 -F,--long_default: testing of long default value
kate.ward90681c32008-11-17 17:39:14 +0000128 (default: 'this_is_a_long_default_value_to_force_alternate_indentation')
kate.ward1cb79602011-06-10 11:15:49 +0000129 -h,--help: show this help (default: false)
kate.ward2fb41e32008-07-10 18:42:46 +0000130EOF
kate.wardf08c5b62008-07-11 20:32:11 +0000131 ( FLAGS_HELP=${help}; FLAGS -h >"${stdoutF}" 2>"${stderrF}" )
kate.ward1cb79602011-06-10 11:15:49 +0000132 r3turn=$?
133 assertTrue 'a call for help should not return an error' ${r3turn}
kate.ward2fb41e32008-07-10 18:42:46 +0000134 diff "${expectedF}" "${stderrF}" >/dev/null
kate.ward1cb79602011-06-10 11:15:49 +0000135 differed=$?
136 assertTrue 'unexpected help output' ${differed}
137 th_showOutput ${differed} "${stdoutF}" "${stderrF}"
kate.ward2fb41e32008-07-10 18:42:46 +0000138}
139
kate.ward5b48fc12008-11-13 00:42:43 +0000140testNoHelp()
141{
142 flags_getoptIsEnh || startSkipping
143
144 ( FLAGS --nohelp >"${stdoutF}" 2>"${stderrF}" )
kate.ward1cb79602011-06-10 11:15:49 +0000145 r3turn=$?
146 assertTrue "FLAGS returned a non-zero result (${r3turn})" ${r3turn}
kate.ward5b48fc12008-11-13 00:42:43 +0000147 assertFalse 'expected no output to STDOUT' "[ -s '${stdoutF}' ]"
148 assertFalse 'expected no output to STDERR' "[ -s '${stderrF}' ]"
149}
150
kate.ward2fb41e32008-07-10 18:42:46 +0000151#------------------------------------------------------------------------------
152# suite functions
153#
154
155oneTimeSetUp()
156{
kate.ward1b600c52008-11-12 21:26:05 +0000157 th_oneTimeSetUp
kate.ward709c1342008-11-14 18:23:03 +0000158
kate.wardb0aaccf2008-11-15 17:16:55 +0000159 if flags_getoptIsStd; then
160 th_warn 'Standard version of getopt found. Enhanced tests will be skipped.'
161 else
162 th_warn 'Enhanced version of getopt found. Standard tests will be skipped.'
kate.ward709c1342008-11-14 18:23:03 +0000163 fi
kate.ward2fb41e32008-07-10 18:42:46 +0000164}
165
166setUp()
167{
168 flags_reset
169}
170
171# load and run shUnit2
172[ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0
173. ${TH_SHUNIT}