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 | |
kate.ward | da8d2c0 | 2011-06-28 13:26:02 +0000 | [diff] [blame] | 51 | # 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.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 61 | # TODO(kward): test requirement of enhanced getopt |
| 62 | |
| 63 | # invalid type |
kate.ward | f99f485 | 2008-11-12 20:14:45 +0000 | [diff] [blame] | 64 | _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.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 67 | } |
| 68 | |
| 69 | testBoolean() |
| 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.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 77 | "DEFINE_boolean() call with default of '${default}' failed." \ |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 78 | "${FLAGS_boolVal:-}" |
| 79 | assertTrue \ |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 80 | "DEFINE_boolean() call with default of '${default}' returned faliure." \ |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 81 | ${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.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 90 | "DEFINE_boolean() call with default of '${default}' failed." \ |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 91 | "${FLAGS_boolVal:-}" |
| 92 | assertTrue \ |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 93 | "DEFINE_boolean() call with default of '${default}' returned faliure." \ |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 94 | ${rtrn} |
| 95 | done |
| 96 | |
| 97 | # test invalid default |
| 98 | flags_reset |
| 99 | DEFINE_boolean boolVal 'invalid' 'my boolean' b >"${stdoutF}" 2>"${stderrF}" |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 100 | assertFalse 'DEFINE_boolean() call with invalid default did not fail.' $? |
| 101 | assertErrorMsg |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 102 | } |
| 103 | |
| 104 | testFloat() |
| 105 | { |
| 106 | # test valid defaults |
kate.ward | 60095fa | 2013-01-05 13:55:29 +0000 | [diff] [blame^] | 107 | for default in ${TH_FLOAT_VALID}; do |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 108 | flags_reset |
| 109 | DEFINE_float floatVal ${default} "float: ${default}" f |
| 110 | rtrn=$? |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 111 | assertSame "DEFINE_float() call with valid default failed." \ |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 112 | ${default} "${FLAGS_floatVal:-}" |
| 113 | assertTrue \ |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 114 | "DEFINE_float() call with valid default of '${default}' returned faliure." \ |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 115 | ${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.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 122 | assertFalse 'DEFINE_float() call with string value default did not fail.' $? |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 123 | assertErrorMsg |
| 124 | } |
| 125 | |
| 126 | testInteger() |
| 127 | { |
| 128 | # test valid defaults |
kate.ward | 60095fa | 2013-01-05 13:55:29 +0000 | [diff] [blame^] | 129 | for default in ${TH_INT_VALID}; do |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 130 | 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.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 137 | "DEFINE_integer() call with valid default of '${default}' returned failure." \ |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 138 | ${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.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 145 | assertFalse 'DEFINE_integer() call with float value default did not fail.' $? |
| 146 | assertErrorMsg 'invalid default' 'float default' |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 147 | |
| 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.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 153 | assertErrorMsg 'invalid default' 'negative float default' |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 154 | |
| 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.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 160 | assertErrorMsg 'invalid default' 'string default' |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 161 | } |
| 162 | |
| 163 | testString() |
| 164 | { |
| 165 | # test valid defaults |
kate.ward | 60095fa | 2013-01-05 13:55:29 +0000 | [diff] [blame^] | 166 | for default in \ |
| 167 | ${TH_BOOL_VALID} \ |
| 168 | ${TH_FLOAT_VALID} \ |
| 169 | ${TH_INT_VALID} \ |
| 170 | 'also valid' |
| 171 | do |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 172 | 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.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 179 | "DEFINE_string() call with valid default of '${default}' returned faliure." \ |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 180 | ${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.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 189 | '' "${FLAGS_str:-}" |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 190 | } |
| 191 | |
| 192 | testShortNameLength() |
| 193 | { |
| 194 | # make sure short names are no longer than a single character |
| 195 | : |
| 196 | } |
| 197 | |
kate.ward | 39913d1 | 2009-04-01 14:09:23 +0000 | [diff] [blame] | 198 | testFlagNameIsReserved() |
| 199 | { |
| 200 | ( DEFINE_string TRUE '' 'true is a reserved flag name' t \ |
| 201 | >"${stdoutF}" 2>"${stderrF}" ) |
| 202 | rtrn=$? |
| 203 | assertEquals ${FLAGS_ERROR} ${rtrn} |
kate.ward | 7a3c9c4 | 2009-04-24 00:12:35 +0000 | [diff] [blame] | 204 | assertErrorMsg 'flag name (TRUE) is reserved' |
kate.ward | 39913d1 | 2009-04-01 14:09:23 +0000 | [diff] [blame] | 205 | } |
| 206 | |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 207 | #------------------------------------------------------------------------------ |
| 208 | # suite functions |
| 209 | # |
| 210 | |
| 211 | oneTimeSetUp() |
| 212 | { |
kate.ward | 1b600c5 | 2008-11-12 21:26:05 +0000 | [diff] [blame] | 213 | th_oneTimeSetUp |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 214 | } |
| 215 | |
kate.ward | 60095fa | 2013-01-05 13:55:29 +0000 | [diff] [blame^] | 216 | tearDown() |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 217 | { |
| 218 | flags_reset |
| 219 | } |
| 220 | |
| 221 | # load and run shUnit2 |
| 222 | [ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0 |
| 223 | . ${TH_SHUNIT} |