kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 1 | #! /bin/sh |
| 2 | # vim:et:ft=sh:sts=2:sw=2 |
| 3 | # |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 4 | # shFlags unit test for the flag definition methods |
| 5 | |
| 6 | # load test helpers |
| 7 | . ./shflags_test_helpers |
| 8 | |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 9 | #------------------------------------------------------------------------------ |
| 10 | # suite tests |
| 11 | # |
| 12 | |
| 13 | testFlagsDefine() |
| 14 | { |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 15 | # no arguments |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 16 | _flags_define >"${stdoutF}" 2>"${stderrF}" |
| 17 | assertFalse '_flags_define() with no arguments should have failed.' $? |
kate.ward | f99f485 | 2008-11-12 20:14:45 +0000 | [diff] [blame] | 18 | assertErrorMsg '' 'no arguments' |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 19 | |
| 20 | # one argument |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 21 | _flags_define arg1 >"${stdoutF}" 2>"${stderrF}" |
| 22 | assertFalse '_flags_define() call with one argument should fail' $? |
kate.ward | f99f485 | 2008-11-12 20:14:45 +0000 | [diff] [blame] | 23 | assertErrorMsg '' 'one argument' |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 24 | |
| 25 | # two arguments |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 26 | _flags_define arg1 arg2 >"${stdoutF}" 2>"${stderrF}" |
| 27 | assertFalse '_flags_define() call with two arguments should fail' $? |
kate.ward | f99f485 | 2008-11-12 20:14:45 +0000 | [diff] [blame] | 28 | assertErrorMsg '' 'two arguments' |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 29 | |
| 30 | # three arguments |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 31 | _flags_define arg1 arg2 arg3 >"${stdoutF}" 2>"${stderrF}" |
| 32 | assertFalse '_flags_define() call with three arguments should fail' $? |
kate.ward | f99f485 | 2008-11-12 20:14:45 +0000 | [diff] [blame] | 33 | assertErrorMsg '' 'three arguments' |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 34 | |
| 35 | # multiple definition -- assumes working boolean definition (tested elsewhere) |
| 36 | _flags_define ${__FLAGS_TYPE_BOOLEAN} multiDefBool true 'multi def #1' m |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 37 | _flags_define ${__FLAGS_TYPE_BOOLEAN} multiDefBool false 'multi def #2' m \ |
| 38 | >"${stdoutF}" 2>"${stderrF}" |
| 39 | assertFalse '_flags_define() with existing flag name should fail' $? |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 40 | assertTrue \ |
| 41 | '_flags_define() should not overwrite previously defined default.' \ |
| 42 | "${FLAGS_multiDefBool:-}" |
kate.ward | f99f485 | 2008-11-12 20:14:45 +0000 | [diff] [blame] | 43 | assertWarnMsg '' 'existing flag' |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 44 | |
kate.ward | da8d2c0 | 2011-06-28 13:26:02 +0000 | [diff] [blame] | 45 | # duplicate dashed and underscored definition |
| 46 | _flags_define ${__FLAGS_TYPE_STRING} long-name 'foo' 'dashed name' l |
| 47 | _flags_define ${__FLAGS_TYPE_STRING} long_name 'bar' 'underscored name' l \ |
| 48 | >"${stdoutF}" 2>"${stderrF}" |
| 49 | assertFalse '_flags_define() with existing flag name should fail' $? |
| 50 | assertEquals \ |
| 51 | '_flags_define() should not overwrite previously defined default.' \ |
| 52 | "${FLAGS_long_name}" 'foo' |
| 53 | assertWarnMsg '' 'already exists' |
| 54 | |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 55 | # TODO(kward): test requirement of enhanced getopt |
| 56 | |
| 57 | # invalid type |
kate.ward | f99f485 | 2008-11-12 20:14:45 +0000 | [diff] [blame] | 58 | _flags_define invalid arg2 arg3 arg4 i >"${stdoutF}" 2>"${stderrF}" |
| 59 | assertFalse '_flags_define() with "invalid" type should have failed.' $? |
| 60 | assertErrorMsg 'unrecognized flag type' 'invalid type' |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 61 | } |
| 62 | |
| 63 | testBoolean() |
| 64 | { |
| 65 | # test true defaults |
| 66 | for default in 'true' 't' 0; do |
| 67 | flags_reset |
| 68 | DEFINE_boolean boolVal "${default}" 'my boolean' b |
| 69 | rtrn=$? |
| 70 | assertTrue \ |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 71 | "DEFINE_boolean() call with default of '${default}' failed." \ |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 72 | "${FLAGS_boolVal:-}" |
| 73 | assertTrue \ |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 74 | "DEFINE_boolean() call with default of '${default}' returned faliure." \ |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 75 | ${rtrn} |
| 76 | done |
| 77 | |
| 78 | # test false defaults |
| 79 | for default in 'false' 'f' 1; do |
| 80 | flags_reset |
| 81 | DEFINE_boolean boolVal "${default}" 'my boolean' b |
| 82 | rtrn=$? |
| 83 | assertFalse \ |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 84 | "DEFINE_boolean() call with default of '${default}' failed." \ |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 85 | "${FLAGS_boolVal:-}" |
| 86 | assertTrue \ |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 87 | "DEFINE_boolean() call with default of '${default}' returned faliure." \ |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 88 | ${rtrn} |
| 89 | done |
| 90 | |
| 91 | # test invalid default |
| 92 | flags_reset |
| 93 | DEFINE_boolean boolVal 'invalid' 'my boolean' b >"${stdoutF}" 2>"${stderrF}" |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 94 | assertFalse 'DEFINE_boolean() call with invalid default did not fail.' $? |
| 95 | assertErrorMsg |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 96 | } |
| 97 | |
| 98 | testFloat() |
| 99 | { |
| 100 | # test valid defaults |
kate.ward | 60095fa | 2013-01-05 13:55:29 +0000 | [diff] [blame] | 101 | for default in ${TH_FLOAT_VALID}; do |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 102 | flags_reset |
| 103 | DEFINE_float floatVal ${default} "float: ${default}" f |
| 104 | rtrn=$? |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 105 | assertSame "DEFINE_float() call with valid default failed." \ |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 106 | ${default} "${FLAGS_floatVal:-}" |
| 107 | assertTrue \ |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 108 | "DEFINE_float() call with valid default of '${default}' returned faliure." \ |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 109 | ${rtrn} |
| 110 | done |
| 111 | |
| 112 | # test invalid defaults |
| 113 | flags_reset |
| 114 | DEFINE_float floatVal 'invalid' 'invalid float: string' f \ |
| 115 | >"${stdoutF}" 2>"${stderrF}" |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 116 | assertFalse 'DEFINE_float() call with string value default did not fail.' $? |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 117 | assertErrorMsg |
| 118 | } |
| 119 | |
| 120 | testInteger() |
| 121 | { |
| 122 | # test valid defaults |
kate.ward | 60095fa | 2013-01-05 13:55:29 +0000 | [diff] [blame] | 123 | for default in ${TH_INT_VALID}; do |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 124 | flags_reset |
| 125 | DEFINE_integer intVal ${default} "integer: ${default}" i |
| 126 | rtrn=$? |
| 127 | assertSame \ |
| 128 | "DEFINE_integer() call with valid default failed." \ |
| 129 | ${default} "${FLAGS_intVal:-}" |
| 130 | assertTrue \ |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 131 | "DEFINE_integer() call with valid default of '${default}' returned failure." \ |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 132 | ${rtrn} |
| 133 | done |
| 134 | |
| 135 | # test invalid defaults |
| 136 | flags_reset |
| 137 | DEFINE_integer intVal 1.234 'invalid integer: float' i \ |
| 138 | >"${stdoutF}" 2>"${stderrF}" |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 139 | assertFalse 'DEFINE_integer() call with float value default did not fail.' $? |
| 140 | assertErrorMsg 'invalid default' 'float default' |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 141 | |
| 142 | DEFINE_integer intVal -1.234 'invalid integer: negative float' i \ |
| 143 | >"${stdoutF}" 2>"${stderrF}" |
| 144 | assertFalse \ |
| 145 | 'DEFINE_integer() call with negative float value default did not fail.' \ |
| 146 | $? |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 147 | assertErrorMsg 'invalid default' 'negative float default' |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 148 | |
| 149 | DEFINE_integer intVal 'invalid' 'invalid integer: string' i \ |
| 150 | >"${stdoutF}" 2>"${stderrF}" |
| 151 | assertFalse \ |
| 152 | 'DEFINE_integer() call with string value default did not fail.' \ |
| 153 | $? |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 154 | assertErrorMsg 'invalid default' 'string default' |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 155 | } |
| 156 | |
| 157 | testString() |
| 158 | { |
| 159 | # test valid defaults |
kate.ward | 60095fa | 2013-01-05 13:55:29 +0000 | [diff] [blame] | 160 | for default in \ |
| 161 | ${TH_BOOL_VALID} \ |
| 162 | ${TH_FLOAT_VALID} \ |
| 163 | ${TH_INT_VALID} \ |
| 164 | 'also valid' |
| 165 | do |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 166 | flags_reset |
| 167 | DEFINE_string strVal "${default}" "string: ${default}" s |
| 168 | rtrn=$? |
| 169 | assertSame \ |
| 170 | "DEFINE_string() call with valid default failed." \ |
| 171 | "${default}" "${FLAGS_strVal:-}" |
| 172 | assertTrue \ |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 173 | "DEFINE_string() call with valid default of '${default}' returned faliure." \ |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 174 | ${rtrn} |
| 175 | done |
| 176 | |
| 177 | # test "empty" strings |
| 178 | flags_reset |
| 179 | DEFINE_string str '' "string: empty single quotes" s |
| 180 | rtrn=$? |
| 181 | assertSame \ |
| 182 | "DEFINE_string() call with valid default failed." \ |
kate.ward | 20d0678 | 2008-10-21 19:57:19 +0000 | [diff] [blame] | 183 | '' "${FLAGS_str:-}" |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 184 | } |
| 185 | |
| 186 | testShortNameLength() |
| 187 | { |
| 188 | # make sure short names are no longer than a single character |
| 189 | : |
| 190 | } |
| 191 | |
kate.ward | 39913d1 | 2009-04-01 14:09:23 +0000 | [diff] [blame] | 192 | testFlagNameIsReserved() |
| 193 | { |
| 194 | ( DEFINE_string TRUE '' 'true is a reserved flag name' t \ |
| 195 | >"${stdoutF}" 2>"${stderrF}" ) |
| 196 | rtrn=$? |
| 197 | assertEquals ${FLAGS_ERROR} ${rtrn} |
kate.ward | 7a3c9c4 | 2009-04-24 00:12:35 +0000 | [diff] [blame] | 198 | assertErrorMsg 'flag name (TRUE) is reserved' |
kate.ward | 39913d1 | 2009-04-01 14:09:23 +0000 | [diff] [blame] | 199 | } |
| 200 | |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 201 | #------------------------------------------------------------------------------ |
| 202 | # suite functions |
| 203 | # |
| 204 | |
| 205 | oneTimeSetUp() |
| 206 | { |
kate.ward | 1b600c5 | 2008-11-12 21:26:05 +0000 | [diff] [blame] | 207 | th_oneTimeSetUp |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 208 | } |
| 209 | |
kate.ward | 60095fa | 2013-01-05 13:55:29 +0000 | [diff] [blame] | 210 | tearDown() |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 211 | { |
| 212 | flags_reset |
| 213 | } |
| 214 | |
| 215 | # load and run shUnit2 |
| 216 | [ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0 |
| 217 | . ${TH_SHUNIT} |