blob: a46b3c4a5cfd98828023b8a5ec8329f065e3c88c [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
kate.wardda8d2c02011-06-28 13:26:02 +000051 # duplicate dashed and underscored definition
52 _flags_define ${__FLAGS_TYPE_STRING} long-name 'foo' 'dashed name' l
53 _flags_define ${__FLAGS_TYPE_STRING} long_name 'bar' 'underscored name' l \
54 >"${stdoutF}" 2>"${stderrF}"
55 assertFalse '_flags_define() with existing flag name should fail' $?
56 assertEquals \
57 '_flags_define() should not overwrite previously defined default.' \
58 "${FLAGS_long_name}" 'foo'
59 assertWarnMsg '' 'already exists'
60
kate.wardf51c6162008-06-17 16:38:35 +000061 # TODO(kward): test requirement of enhanced getopt
62
63 # invalid type
kate.wardf99f4852008-11-12 20:14:45 +000064 _flags_define invalid arg2 arg3 arg4 i >"${stdoutF}" 2>"${stderrF}"
65 assertFalse '_flags_define() with "invalid" type should have failed.' $?
66 assertErrorMsg 'unrecognized flag type' 'invalid type'
kate.wardf51c6162008-06-17 16:38:35 +000067}
68
69testBoolean()
70{
71 # test true defaults
72 for default in 'true' 't' 0; do
73 flags_reset
74 DEFINE_boolean boolVal "${default}" 'my boolean' b
75 rtrn=$?
76 assertTrue \
kate.ward20d06782008-10-21 19:57:19 +000077 "DEFINE_boolean() call with default of '${default}' failed." \
kate.wardf51c6162008-06-17 16:38:35 +000078 "${FLAGS_boolVal:-}"
79 assertTrue \
kate.ward20d06782008-10-21 19:57:19 +000080 "DEFINE_boolean() call with default of '${default}' returned faliure." \
kate.wardf51c6162008-06-17 16:38:35 +000081 ${rtrn}
82 done
83
84 # test false defaults
85 for default in 'false' 'f' 1; do
86 flags_reset
87 DEFINE_boolean boolVal "${default}" 'my boolean' b
88 rtrn=$?
89 assertFalse \
kate.ward20d06782008-10-21 19:57:19 +000090 "DEFINE_boolean() call with default of '${default}' failed." \
kate.wardf51c6162008-06-17 16:38:35 +000091 "${FLAGS_boolVal:-}"
92 assertTrue \
kate.ward20d06782008-10-21 19:57:19 +000093 "DEFINE_boolean() call with default of '${default}' returned faliure." \
kate.wardf51c6162008-06-17 16:38:35 +000094 ${rtrn}
95 done
96
97 # test invalid default
98 flags_reset
99 DEFINE_boolean boolVal 'invalid' 'my boolean' b >"${stdoutF}" 2>"${stderrF}"
kate.ward20d06782008-10-21 19:57:19 +0000100 assertFalse 'DEFINE_boolean() call with invalid default did not fail.' $?
101 assertErrorMsg
kate.wardf51c6162008-06-17 16:38:35 +0000102}
103
104testFloat()
105{
106 # test valid defaults
kate.ward60095fa2013-01-05 13:55:29 +0000107 for default in ${TH_FLOAT_VALID}; do
kate.wardf51c6162008-06-17 16:38:35 +0000108 flags_reset
109 DEFINE_float floatVal ${default} "float: ${default}" f
110 rtrn=$?
kate.ward20d06782008-10-21 19:57:19 +0000111 assertSame "DEFINE_float() call with valid default failed." \
kate.wardf51c6162008-06-17 16:38:35 +0000112 ${default} "${FLAGS_floatVal:-}"
113 assertTrue \
kate.ward20d06782008-10-21 19:57:19 +0000114 "DEFINE_float() call with valid default of '${default}' returned faliure." \
kate.wardf51c6162008-06-17 16:38:35 +0000115 ${rtrn}
116 done
117
118 # test invalid defaults
119 flags_reset
120 DEFINE_float floatVal 'invalid' 'invalid float: string' f \
121 >"${stdoutF}" 2>"${stderrF}"
kate.ward20d06782008-10-21 19:57:19 +0000122 assertFalse 'DEFINE_float() call with string value default did not fail.' $?
kate.wardf51c6162008-06-17 16:38:35 +0000123 assertErrorMsg
124}
125
126testInteger()
127{
128 # test valid defaults
kate.ward60095fa2013-01-05 13:55:29 +0000129 for default in ${TH_INT_VALID}; do
kate.wardf51c6162008-06-17 16:38:35 +0000130 flags_reset
131 DEFINE_integer intVal ${default} "integer: ${default}" i
132 rtrn=$?
133 assertSame \
134 "DEFINE_integer() call with valid default failed." \
135 ${default} "${FLAGS_intVal:-}"
136 assertTrue \
kate.ward20d06782008-10-21 19:57:19 +0000137 "DEFINE_integer() call with valid default of '${default}' returned failure." \
kate.wardf51c6162008-06-17 16:38:35 +0000138 ${rtrn}
139 done
140
141 # test invalid defaults
142 flags_reset
143 DEFINE_integer intVal 1.234 'invalid integer: float' i \
144 >"${stdoutF}" 2>"${stderrF}"
kate.ward20d06782008-10-21 19:57:19 +0000145 assertFalse 'DEFINE_integer() call with float value default did not fail.' $?
146 assertErrorMsg 'invalid default' 'float default'
kate.wardf51c6162008-06-17 16:38:35 +0000147
148 DEFINE_integer intVal -1.234 'invalid integer: negative float' i \
149 >"${stdoutF}" 2>"${stderrF}"
150 assertFalse \
151 'DEFINE_integer() call with negative float value default did not fail.' \
152 $?
kate.ward20d06782008-10-21 19:57:19 +0000153 assertErrorMsg 'invalid default' 'negative float default'
kate.wardf51c6162008-06-17 16:38:35 +0000154
155 DEFINE_integer intVal 'invalid' 'invalid integer: string' i \
156 >"${stdoutF}" 2>"${stderrF}"
157 assertFalse \
158 'DEFINE_integer() call with string value default did not fail.' \
159 $?
kate.ward20d06782008-10-21 19:57:19 +0000160 assertErrorMsg 'invalid default' 'string default'
kate.wardf51c6162008-06-17 16:38:35 +0000161}
162
163testString()
164{
165 # test valid defaults
kate.ward60095fa2013-01-05 13:55:29 +0000166 for default in \
167 ${TH_BOOL_VALID} \
168 ${TH_FLOAT_VALID} \
169 ${TH_INT_VALID} \
170 'also valid'
171 do
kate.wardf51c6162008-06-17 16:38:35 +0000172 flags_reset
173 DEFINE_string strVal "${default}" "string: ${default}" s
174 rtrn=$?
175 assertSame \
176 "DEFINE_string() call with valid default failed." \
177 "${default}" "${FLAGS_strVal:-}"
178 assertTrue \
kate.ward20d06782008-10-21 19:57:19 +0000179 "DEFINE_string() call with valid default of '${default}' returned faliure." \
kate.wardf51c6162008-06-17 16:38:35 +0000180 ${rtrn}
181 done
182
183 # test "empty" strings
184 flags_reset
185 DEFINE_string str '' "string: empty single quotes" s
186 rtrn=$?
187 assertSame \
188 "DEFINE_string() call with valid default failed." \
kate.ward20d06782008-10-21 19:57:19 +0000189 '' "${FLAGS_str:-}"
kate.wardf51c6162008-06-17 16:38:35 +0000190}
191
192testShortNameLength()
193{
194 # make sure short names are no longer than a single character
195 :
196}
197
kate.ward39913d12009-04-01 14:09:23 +0000198testFlagNameIsReserved()
199{
200 ( DEFINE_string TRUE '' 'true is a reserved flag name' t \
201 >"${stdoutF}" 2>"${stderrF}" )
202 rtrn=$?
203 assertEquals ${FLAGS_ERROR} ${rtrn}
kate.ward7a3c9c42009-04-24 00:12:35 +0000204 assertErrorMsg 'flag name (TRUE) is reserved'
kate.ward39913d12009-04-01 14:09:23 +0000205}
206
kate.wardf51c6162008-06-17 16:38:35 +0000207#------------------------------------------------------------------------------
208# suite functions
209#
210
211oneTimeSetUp()
212{
kate.ward1b600c52008-11-12 21:26:05 +0000213 th_oneTimeSetUp
kate.wardf51c6162008-06-17 16:38:35 +0000214}
215
kate.ward60095fa2013-01-05 13:55:29 +0000216tearDown()
kate.wardf51c6162008-06-17 16:38:35 +0000217{
218 flags_reset
219}
220
221# load and run shUnit2
222[ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0
223. ${TH_SHUNIT}