kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 1 | #! /bin/sh |
kate.ward | f99f485 | 2008-11-12 20:14:45 +0000 | [diff] [blame] | 2 | # $Id$ |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 3 | # 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.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 15 | #------------------------------------------------------------------------------ |
| 16 | # suite tests |
| 17 | # |
| 18 | |
| 19 | testFlagsDefine() |
| 20 | { |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 21 | # no arguments |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 22 | _flags_define >"${stdoutF}" 2>"${stderrF}" |
| 23 | assertFalse '_flags_define() with no arguments should have failed.' $? |
kate.ward | f99f485 | 2008-11-12 20:14:45 +0000 | [diff] [blame] | 24 | assertErrorMsg '' 'no arguments' |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 25 | |
| 26 | # one argument |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 27 | _flags_define arg1 >"${stdoutF}" 2>"${stderrF}" |
| 28 | assertFalse '_flags_define() call with one argument should fail' $? |
kate.ward | f99f485 | 2008-11-12 20:14:45 +0000 | [diff] [blame] | 29 | assertErrorMsg '' 'one argument' |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 30 | |
| 31 | # two arguments |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 32 | _flags_define arg1 arg2 >"${stdoutF}" 2>"${stderrF}" |
| 33 | assertFalse '_flags_define() call with two arguments should fail' $? |
kate.ward | f99f485 | 2008-11-12 20:14:45 +0000 | [diff] [blame] | 34 | assertErrorMsg '' 'two arguments' |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 35 | |
| 36 | # three arguments |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 37 | _flags_define arg1 arg2 arg3 >"${stdoutF}" 2>"${stderrF}" |
| 38 | assertFalse '_flags_define() call with three arguments should fail' $? |
kate.ward | f99f485 | 2008-11-12 20:14:45 +0000 | [diff] [blame] | 39 | assertErrorMsg '' 'three arguments' |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 40 | |
| 41 | # multiple definition -- assumes working boolean definition (tested elsewhere) |
| 42 | _flags_define ${__FLAGS_TYPE_BOOLEAN} multiDefBool true 'multi def #1' m |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 43 | _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.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 46 | assertTrue \ |
| 47 | '_flags_define() should not overwrite previously defined default.' \ |
| 48 | "${FLAGS_multiDefBool:-}" |
kate.ward | f99f485 | 2008-11-12 20:14:45 +0000 | [diff] [blame] | 49 | assertWarnMsg '' 'existing flag' |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 50 | |
| 51 | # TODO(kward): test requirement of enhanced getopt |
| 52 | |
| 53 | # invalid type |
kate.ward | f99f485 | 2008-11-12 20:14:45 +0000 | [diff] [blame] | 54 | _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.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 57 | } |
| 58 | |
| 59 | testBoolean() |
| 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.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 67 | "DEFINE_boolean() call with default of '${default}' failed." \ |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 68 | "${FLAGS_boolVal:-}" |
| 69 | assertTrue \ |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 70 | "DEFINE_boolean() call with default of '${default}' returned faliure." \ |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 71 | ${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.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 80 | "DEFINE_boolean() call with default of '${default}' failed." \ |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 81 | "${FLAGS_boolVal:-}" |
| 82 | assertTrue \ |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 83 | "DEFINE_boolean() call with default of '${default}' returned faliure." \ |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 84 | ${rtrn} |
| 85 | done |
| 86 | |
| 87 | # test invalid default |
| 88 | flags_reset |
| 89 | DEFINE_boolean boolVal 'invalid' 'my boolean' b >"${stdoutF}" 2>"${stderrF}" |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 90 | assertFalse 'DEFINE_boolean() call with invalid default did not fail.' $? |
| 91 | assertErrorMsg |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 92 | } |
| 93 | |
| 94 | testFloat() |
| 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.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 101 | assertSame "DEFINE_float() call with valid default failed." \ |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 102 | ${default} "${FLAGS_floatVal:-}" |
| 103 | assertTrue \ |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 104 | "DEFINE_float() call with valid default of '${default}' returned faliure." \ |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 105 | ${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.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 112 | assertFalse 'DEFINE_float() call with string value default did not fail.' $? |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 113 | assertErrorMsg |
| 114 | } |
| 115 | |
| 116 | testInteger() |
| 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.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 127 | "DEFINE_integer() call with valid default of '${default}' returned failure." \ |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 128 | ${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.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 135 | assertFalse 'DEFINE_integer() call with float value default did not fail.' $? |
| 136 | assertErrorMsg 'invalid default' 'float default' |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 137 | |
| 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.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 143 | assertErrorMsg 'invalid default' 'negative float default' |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 144 | |
| 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.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 150 | assertErrorMsg 'invalid default' 'string default' |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 151 | } |
| 152 | |
| 153 | testString() |
| 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.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 164 | "DEFINE_string() call with valid default of '${default}' returned faliure." \ |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 165 | ${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.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 174 | '' "${FLAGS_str:-}" |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 175 | } |
| 176 | |
| 177 | testShortNameLength() |
| 178 | { |
| 179 | # make sure short names are no longer than a single character |
| 180 | : |
| 181 | } |
| 182 | |
kate.ward | 39913d1 | 2009-04-01 14:09:23 +0000 | [diff] [blame] | 183 | testFlagNameIsReserved() |
| 184 | { |
| 185 | ( DEFINE_string TRUE '' 'true is a reserved flag name' t \ |
| 186 | >"${stdoutF}" 2>"${stderrF}" ) |
| 187 | rtrn=$? |
| 188 | assertEquals ${FLAGS_ERROR} ${rtrn} |
kate.ward | 7a3c9c4 | 2009-04-24 00:12:35 +0000 | [diff] [blame^] | 189 | assertErrorMsg 'flag name (TRUE) is reserved' |
kate.ward | 39913d1 | 2009-04-01 14:09:23 +0000 | [diff] [blame] | 190 | } |
| 191 | |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 192 | #------------------------------------------------------------------------------ |
| 193 | # suite functions |
| 194 | # |
| 195 | |
| 196 | oneTimeSetUp() |
| 197 | { |
kate.ward | 1b600c5 | 2008-11-12 21:26:05 +0000 | [diff] [blame] | 198 | th_oneTimeSetUp |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 199 | } |
| 200 | |
| 201 | setUp() |
| 202 | { |
| 203 | flags_reset |
| 204 | } |
| 205 | |
| 206 | # load and run shUnit2 |
| 207 | [ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0 |
| 208 | . ${TH_SHUNIT} |