blob: 552a999d6512e0b253703f498f351d3b31a548da [file] [log] [blame]
kate.wardf51c6162008-06-17 16:38:35 +00001#! /bin/sh
kate.wardf99f4852008-11-12 20:14:45 +00002# $Id$
kate.wardf51c6162008-06-17 16:38:35 +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#
10# shFlags unit test for the flag definition methods
11
12# load test helpers
13. ./shflags_test_helpers
14
kate.wardf51c6162008-06-17 16:38:35 +000015#------------------------------------------------------------------------------
16# suite tests
17#
18
19testFlagsDefine()
20{
kate.wardf51c6162008-06-17 16:38:35 +000021 # no arguments
kate.ward20d06782008-10-21 19:57:19 +000022 _flags_define >"${stdoutF}" 2>"${stderrF}"
23 assertFalse '_flags_define() with no arguments should have failed.' $?
kate.wardf99f4852008-11-12 20:14:45 +000024 assertErrorMsg '' 'no arguments'
kate.wardf51c6162008-06-17 16:38:35 +000025
26 # one argument
kate.ward20d06782008-10-21 19:57:19 +000027 _flags_define arg1 >"${stdoutF}" 2>"${stderrF}"
28 assertFalse '_flags_define() call with one argument should fail' $?
kate.wardf99f4852008-11-12 20:14:45 +000029 assertErrorMsg '' 'one argument'
kate.wardf51c6162008-06-17 16:38:35 +000030
31 # two arguments
kate.ward20d06782008-10-21 19:57:19 +000032 _flags_define arg1 arg2 >"${stdoutF}" 2>"${stderrF}"
33 assertFalse '_flags_define() call with two arguments should fail' $?
kate.wardf99f4852008-11-12 20:14:45 +000034 assertErrorMsg '' 'two arguments'
kate.wardf51c6162008-06-17 16:38:35 +000035
36 # three arguments
kate.ward20d06782008-10-21 19:57:19 +000037 _flags_define arg1 arg2 arg3 >"${stdoutF}" 2>"${stderrF}"
38 assertFalse '_flags_define() call with three arguments should fail' $?
kate.wardf99f4852008-11-12 20:14:45 +000039 assertErrorMsg '' 'three arguments'
kate.wardf51c6162008-06-17 16:38:35 +000040
41 # multiple definition -- assumes working boolean definition (tested elsewhere)
42 _flags_define ${__FLAGS_TYPE_BOOLEAN} multiDefBool true 'multi def #1' m
kate.ward20d06782008-10-21 19:57:19 +000043 _flags_define ${__FLAGS_TYPE_BOOLEAN} multiDefBool false 'multi def #2' m \
44 >"${stdoutF}" 2>"${stderrF}"
45 assertFalse '_flags_define() with existing flag name should fail' $?
kate.wardf51c6162008-06-17 16:38:35 +000046 assertTrue \
47 '_flags_define() should not overwrite previously defined default.' \
48 "${FLAGS_multiDefBool:-}"
kate.wardf99f4852008-11-12 20:14:45 +000049 assertWarnMsg '' 'existing flag'
kate.wardf51c6162008-06-17 16:38:35 +000050
51 # TODO(kward): test requirement of enhanced getopt
52
53 # invalid type
kate.wardf99f4852008-11-12 20:14:45 +000054 _flags_define invalid arg2 arg3 arg4 i >"${stdoutF}" 2>"${stderrF}"
55 assertFalse '_flags_define() with "invalid" type should have failed.' $?
56 assertErrorMsg 'unrecognized flag type' 'invalid type'
kate.wardf51c6162008-06-17 16:38:35 +000057}
58
59testBoolean()
60{
61 # test true defaults
62 for default in 'true' 't' 0; do
63 flags_reset
64 DEFINE_boolean boolVal "${default}" 'my boolean' b
65 rtrn=$?
66 assertTrue \
kate.ward20d06782008-10-21 19:57:19 +000067 "DEFINE_boolean() call with default of '${default}' failed." \
kate.wardf51c6162008-06-17 16:38:35 +000068 "${FLAGS_boolVal:-}"
69 assertTrue \
kate.ward20d06782008-10-21 19:57:19 +000070 "DEFINE_boolean() call with default of '${default}' returned faliure." \
kate.wardf51c6162008-06-17 16:38:35 +000071 ${rtrn}
72 done
73
74 # test false defaults
75 for default in 'false' 'f' 1; do
76 flags_reset
77 DEFINE_boolean boolVal "${default}" 'my boolean' b
78 rtrn=$?
79 assertFalse \
kate.ward20d06782008-10-21 19:57:19 +000080 "DEFINE_boolean() call with default of '${default}' failed." \
kate.wardf51c6162008-06-17 16:38:35 +000081 "${FLAGS_boolVal:-}"
82 assertTrue \
kate.ward20d06782008-10-21 19:57:19 +000083 "DEFINE_boolean() call with default of '${default}' returned faliure." \
kate.wardf51c6162008-06-17 16:38:35 +000084 ${rtrn}
85 done
86
87 # test invalid default
88 flags_reset
89 DEFINE_boolean boolVal 'invalid' 'my boolean' b >"${stdoutF}" 2>"${stderrF}"
kate.ward20d06782008-10-21 19:57:19 +000090 assertFalse 'DEFINE_boolean() call with invalid default did not fail.' $?
91 assertErrorMsg
kate.wardf51c6162008-06-17 16:38:35 +000092}
93
94testFloat()
95{
96 # test valid defaults
97 for default in -1234.56789 -1.0 0.0 1.0 1234.56789; do
98 flags_reset
99 DEFINE_float floatVal ${default} "float: ${default}" f
100 rtrn=$?
kate.ward20d06782008-10-21 19:57:19 +0000101 assertSame "DEFINE_float() call with valid default failed." \
kate.wardf51c6162008-06-17 16:38:35 +0000102 ${default} "${FLAGS_floatVal:-}"
103 assertTrue \
kate.ward20d06782008-10-21 19:57:19 +0000104 "DEFINE_float() call with valid default of '${default}' returned faliure." \
kate.wardf51c6162008-06-17 16:38:35 +0000105 ${rtrn}
106 done
107
108 # test invalid defaults
109 flags_reset
110 DEFINE_float floatVal 'invalid' 'invalid float: string' f \
111 >"${stdoutF}" 2>"${stderrF}"
kate.ward20d06782008-10-21 19:57:19 +0000112 assertFalse 'DEFINE_float() call with string value default did not fail.' $?
kate.wardf51c6162008-06-17 16:38:35 +0000113 assertErrorMsg
114}
115
116testInteger()
117{
118 # test valid defaults
119 for default in -123456789 -1 0 1 123456789; do
120 flags_reset
121 DEFINE_integer intVal ${default} "integer: ${default}" i
122 rtrn=$?
123 assertSame \
124 "DEFINE_integer() call with valid default failed." \
125 ${default} "${FLAGS_intVal:-}"
126 assertTrue \
kate.ward20d06782008-10-21 19:57:19 +0000127 "DEFINE_integer() call with valid default of '${default}' returned failure." \
kate.wardf51c6162008-06-17 16:38:35 +0000128 ${rtrn}
129 done
130
131 # test invalid defaults
132 flags_reset
133 DEFINE_integer intVal 1.234 'invalid integer: float' i \
134 >"${stdoutF}" 2>"${stderrF}"
kate.ward20d06782008-10-21 19:57:19 +0000135 assertFalse 'DEFINE_integer() call with float value default did not fail.' $?
136 assertErrorMsg 'invalid default' 'float default'
kate.wardf51c6162008-06-17 16:38:35 +0000137
138 DEFINE_integer intVal -1.234 'invalid integer: negative float' i \
139 >"${stdoutF}" 2>"${stderrF}"
140 assertFalse \
141 'DEFINE_integer() call with negative float value default did not fail.' \
142 $?
kate.ward20d06782008-10-21 19:57:19 +0000143 assertErrorMsg 'invalid default' 'negative float default'
kate.wardf51c6162008-06-17 16:38:35 +0000144
145 DEFINE_integer intVal 'invalid' 'invalid integer: string' i \
146 >"${stdoutF}" 2>"${stderrF}"
147 assertFalse \
148 'DEFINE_integer() call with string value default did not fail.' \
149 $?
kate.ward20d06782008-10-21 19:57:19 +0000150 assertErrorMsg 'invalid default' 'string default'
kate.wardf51c6162008-06-17 16:38:35 +0000151}
152
153testString()
154{
155 # test valid defaults
156 for default in -1234.56789 -1.0 0.0 1.0 1234.56789 valid 'also valid'; do
157 flags_reset
158 DEFINE_string strVal "${default}" "string: ${default}" s
159 rtrn=$?
160 assertSame \
161 "DEFINE_string() call with valid default failed." \
162 "${default}" "${FLAGS_strVal:-}"
163 assertTrue \
kate.ward20d06782008-10-21 19:57:19 +0000164 "DEFINE_string() call with valid default of '${default}' returned faliure." \
kate.wardf51c6162008-06-17 16:38:35 +0000165 ${rtrn}
166 done
167
168 # test "empty" strings
169 flags_reset
170 DEFINE_string str '' "string: empty single quotes" s
171 rtrn=$?
172 assertSame \
173 "DEFINE_string() call with valid default failed." \
kate.ward20d06782008-10-21 19:57:19 +0000174 '' "${FLAGS_str:-}"
kate.wardf51c6162008-06-17 16:38:35 +0000175}
176
177testShortNameLength()
178{
179 # make sure short names are no longer than a single character
180 :
181}
182
kate.ward39913d12009-04-01 14:09:23 +0000183testFlagNameIsReserved()
184{
185 ( DEFINE_string TRUE '' 'true is a reserved flag name' t \
186 >"${stdoutF}" 2>"${stderrF}" )
187 rtrn=$?
188 assertEquals ${FLAGS_ERROR} ${rtrn}
kate.ward7a3c9c42009-04-24 00:12:35 +0000189 assertErrorMsg 'flag name (TRUE) is reserved'
kate.ward39913d12009-04-01 14:09:23 +0000190}
191
kate.wardf51c6162008-06-17 16:38:35 +0000192#------------------------------------------------------------------------------
193# suite functions
194#
195
196oneTimeSetUp()
197{
kate.ward1b600c52008-11-12 21:26:05 +0000198 th_oneTimeSetUp
kate.wardf51c6162008-06-17 16:38:35 +0000199}
200
201setUp()
202{
203 flags_reset
204}
205
206# load and run shUnit2
207[ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0
208. ${TH_SHUNIT}