blob: 6f6d8d85f10a1d4b106734622a7d529e2d7ab394 [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
25 rslt=`FLAGS -h 2>&1`
26 rtrn=$?
27 assertFalse \
28 'short request for help should have returned non-zero exit code.' \
29 ${rtrn}
30 echo "${rslt}" |grep -- 'show this help' >/dev/null
31 rtrn=$?
32 assertTrue \
33 'short request for help should have produced some help output.' \
34 ${rtrn}
35 [ ${rtrn} -ne ${FLAGS_TRUE} ] && echo "${rslt}" >&2
36
37 # test proper output when FLAGS_HELP set
38 rslt=`FLAGS_HELP='this is a test'; FLAGS -h 2>&1`
39 echo "${rslt}" |grep -- 'this is a test' >/dev/null
40 rtrn=$?
kate.ward08e5bba2008-10-21 19:19:10 +000041 assertTrue 'setting FLAGS_HELP did not produce expected result' ${rtrn}
kate.ward2fb41e32008-07-10 18:42:46 +000042 [ ${rtrn} -ne ${FLAGS_TRUE} ] && echo "${rslt}" >&2
43
44 # test that "'" chars work in help string
45 DEFINE_boolean b false "help string containing a ' char" b
46 rslt=`FLAGS -h 2>&1`
47 echo "${rslt}" |grep -- "help string containing a ' char" >/dev/null
48 rtrn=$?
kate.ward08e5bba2008-10-21 19:19:10 +000049 assertTrue "help strings containing apostrophes don't work" ${rtrn}
kate.ward2fb41e32008-07-10 18:42:46 +000050 [ ${rtrn} -ne ${FLAGS_TRUE} ] && echo "${rslt}" >&2
51
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
58 rslt=`FLAGS --help 2>&1`
kate.ward08e5bba2008-10-21 19:19:10 +000059 assertFalse 'long help request should have returned non-zero exit code' $?
kate.ward2fb41e32008-07-10 18:42:46 +000060 echo "${rslt}" |grep -- 'show this help' >/dev/null
kate.ward08e5bba2008-10-21 19:19:10 +000061 assertTrue 'long help request should have produced some help output.' $?
kate.ward2fb41e32008-07-10 18:42:46 +000062}
63
kate.warddc10fe92008-07-10 19:37:16 +000064testStandardHelpOutput()
kate.ward2fb41e32008-07-10 18:42:46 +000065{
kate.warddd6c9132008-11-13 00:47:53 +000066 flags_getoptIsStd || startSkipping
kate.ward2fb41e32008-07-10 18:42:46 +000067
kate.warddc10fe92008-07-10 19:37:16 +000068 DEFINE_boolean test_bool false 'test boolean' b
kate.ward437639d2008-10-19 17:21:41 +000069 DEFINE_integer test_int 0 'test integer' i
kate.warddc10fe92008-07-10 19:37:16 +000070 DEFINE_string test_str '' 'test string' s
kate.ward437639d2008-10-19 17:21:41 +000071 DEFINE_string long_desc 'blah' \
kate.ward64099612008-11-17 17:36:14 +000072 'testing of a long description to force wrap of default value' D
73 DEFINE_string long_default \
kate.ward90681c32008-11-17 17:39:14 +000074 'this_is_a_long_default_value_to_force_alternate_indentation' \
kate.ward64099612008-11-17 17:36:14 +000075 'testing of long default value' F
kate.wardf08c5b62008-07-11 20:32:11 +000076 help='USAGE: standard [flags] args'
kate.ward2fb41e32008-07-10 18:42:46 +000077
78 cat >"${expectedF}" <<EOF
kate.ward3a674972009-04-01 03:44:44 +000079${help}
kate.ward2fb41e32008-07-10 18:42:46 +000080flags:
kate.ward437639d2008-10-19 17:21:41 +000081 -b test boolean (default: false)
82 -i test integer (default: 0)
83 -s test string (default: '')
kate.ward64099612008-11-17 17:36:14 +000084 -D testing of a long description to force wrap of default value
kate.ward437639d2008-10-19 17:21:41 +000085 (default: 'blah')
kate.ward64099612008-11-17 17:36:14 +000086 -F testing of long default value
kate.ward90681c32008-11-17 17:39:14 +000087 (default: 'this_is_a_long_default_value_to_force_alternate_indentation')
kate.ward437639d2008-10-19 17:21:41 +000088 -h show this help (default: false)
kate.warddc10fe92008-07-10 19:37:16 +000089EOF
kate.wardf08c5b62008-07-11 20:32:11 +000090 ( FLAGS_HELP=${help}; FLAGS -h >"${stdoutF}" 2>"${stderrF}" )
kate.warddc10fe92008-07-10 19:37:16 +000091 diff "${expectedF}" "${stderrF}" >/dev/null
kate.ward9b0568f2008-11-14 17:44:24 +000092 rtrn=$?
93 assertTrue 'unexpected help output' ${rtrn}
94 th_showOutput ${rtrn} "${stdoutF}" "${stderrF}"
kate.warddc10fe92008-07-10 19:37:16 +000095}
96
97testEnhancedHelpOutput()
98{
99 flags_getoptIsEnh || startSkipping
100
101 DEFINE_boolean test_bool false 'test boolean' b
kate.ward437639d2008-10-19 17:21:41 +0000102 DEFINE_integer test_int 0 'test integer' i
kate.warddc10fe92008-07-10 19:37:16 +0000103 DEFINE_string test_str '' 'test string' s
kate.ward437639d2008-10-19 17:21:41 +0000104 DEFINE_string long_desc 'blah' \
kate.wardde77c872008-11-17 17:40:04 +0000105 'testing of a long description to force wrap of default value' D
kate.ward64099612008-11-17 17:36:14 +0000106 DEFINE_string long_default \
kate.ward90681c32008-11-17 17:39:14 +0000107 'this_is_a_long_default_value_to_force_alternate_indentation' \
kate.ward64099612008-11-17 17:36:14 +0000108 'testing of long default value' F
kate.ward42cb23b2008-07-11 20:42:58 +0000109 help='USAGE: enhanced [flags] args'
kate.warddc10fe92008-07-10 19:37:16 +0000110
111 cat >"${expectedF}" <<EOF
kate.ward3a674972009-04-01 03:44:44 +0000112${help}
kate.warddc10fe92008-07-10 19:37:16 +0000113flags:
kate.ward437639d2008-10-19 17:21:41 +0000114 -b,--[no]test_bool: test boolean (default: false)
115 -i,--test_int: test integer (default: 0)
116 -s,--test_str: test string (default: '')
kate.ward64099612008-11-17 17:36:14 +0000117 -D,--long_desc: testing of a long description to force wrap of default value
kate.ward437639d2008-10-19 17:21:41 +0000118 (default: 'blah')
kate.ward64099612008-11-17 17:36:14 +0000119 -F,--long_default: testing of long default value
kate.ward90681c32008-11-17 17:39:14 +0000120 (default: 'this_is_a_long_default_value_to_force_alternate_indentation')
kate.ward437639d2008-10-19 17:21:41 +0000121 -h,--[no]help: show this help (default: false)
kate.ward2fb41e32008-07-10 18:42:46 +0000122EOF
kate.wardf08c5b62008-07-11 20:32:11 +0000123 ( FLAGS_HELP=${help}; FLAGS -h >"${stdoutF}" 2>"${stderrF}" )
kate.ward2fb41e32008-07-10 18:42:46 +0000124 diff "${expectedF}" "${stderrF}" >/dev/null
kate.ward20b5e0d2008-11-15 17:10:57 +0000125 rtrn=$?
126 assertTrue 'unexpected help output' ${rtrn}
127 th_showOutput ${rtrn} "${stdoutF}" "${stderrF}"
kate.ward2fb41e32008-07-10 18:42:46 +0000128}
129
kate.ward5b48fc12008-11-13 00:42:43 +0000130testNoHelp()
131{
132 flags_getoptIsEnh || startSkipping
133
134 ( FLAGS --nohelp >"${stdoutF}" 2>"${stderrF}" )
135 rtrn=$?
136 assertTrue "FLAGS returned a non-zero result (${rtrn})" ${rtrn}
137 assertFalse 'expected no output to STDOUT' "[ -s '${stdoutF}' ]"
138 assertFalse 'expected no output to STDERR' "[ -s '${stderrF}' ]"
139}
140
kate.ward2fb41e32008-07-10 18:42:46 +0000141#------------------------------------------------------------------------------
142# suite functions
143#
144
145oneTimeSetUp()
146{
kate.ward1b600c52008-11-12 21:26:05 +0000147 th_oneTimeSetUp
kate.ward709c1342008-11-14 18:23:03 +0000148
kate.wardb0aaccf2008-11-15 17:16:55 +0000149 if flags_getoptIsStd; then
150 th_warn 'Standard version of getopt found. Enhanced tests will be skipped.'
151 else
152 th_warn 'Enhanced version of getopt found. Standard tests will be skipped.'
kate.ward709c1342008-11-14 18:23:03 +0000153 fi
kate.ward2fb41e32008-07-10 18:42:46 +0000154}
155
156setUp()
157{
158 flags_reset
159}
160
161# load and run shUnit2
162[ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0
163. ${TH_SHUNIT}