kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 1 | #! /bin/sh |
kate.ward | 5ed38f0 | 2008-11-12 20:14:19 +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 internal functions |
| 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 | |
kate.ward | 929261f | 2010-03-28 23:12:17 +0000 | [diff] [blame^] | 19 | testColumns() |
| 20 | { |
| 21 | cols=`_flags_columns` |
| 22 | value=`expr "${cols}" : '\([0-9]*\)'` |
| 23 | assertNotNull "unexpected screen width (${cols})" "${value}" |
| 24 | } |
| 25 | |
| 26 | testGenOptStr() |
| 27 | { |
| 28 | _testGenOptStr '' '' |
| 29 | |
| 30 | DEFINE_boolean bool false 'boolean value' b |
| 31 | _testGenOptStr 'b' 'bool' |
| 32 | |
| 33 | DEFINE_float float 0.0 'float value' f |
| 34 | _testGenOptStr 'bf:' 'bool,float:' |
| 35 | |
| 36 | DEFINE_integer int 0 'integer value' i |
| 37 | _testGenOptStr 'bf:i:' 'bool,float:,int:' |
| 38 | |
| 39 | DEFINE_string str 0 'string value' s |
| 40 | _testGenOptStr 'bf:i:s:' 'bool,float:,int:,str:' |
| 41 | |
| 42 | DEFINE_boolean help false 'show help' h |
| 43 | _testGenOptStr 'bf:i:s:h' 'bool,float:,int:,str:,help' |
| 44 | } |
| 45 | |
| 46 | _testGenOptStr() |
| 47 | { |
| 48 | short=$1 |
| 49 | long=$2 |
| 50 | |
| 51 | result=`_flags_genOptStr ${__FLAGS_OPTSTR_SHORT}` |
| 52 | assertTrue 'short option string generation failed' $? |
| 53 | assertEquals "${short}" "${result}" |
| 54 | |
| 55 | result=`_flags_genOptStr ${__FLAGS_OPTSTR_LONG}` |
| 56 | assertTrue 'long option string generation failed' $? |
| 57 | assertEquals "${long}" "${result}" |
| 58 | } |
| 59 | |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 60 | testGetFlagInfo() |
| 61 | { |
| 62 | __flags_blah_foobar='1234' |
| 63 | |
| 64 | rslt=`_flags_getFlagInfo 'blah' 'foobar'` |
| 65 | assertTrue 'request for valid flag info failed' $? |
| 66 | assertEquals 'invalid flag info returned' "${__flags_blah_foobar}" "${rslt}" |
| 67 | |
kate.ward | 1b600c5 | 2008-11-12 21:26:05 +0000 | [diff] [blame] | 68 | rslt=`_flags_getFlagInfo 'blah' 'hubbabubba' >"${stdoutF}" 2>"${stderrF}"` |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 69 | assertEquals 'invalid flag did not result in an error' ${FLAGS_ERROR} $? |
kate.ward | 1b600c5 | 2008-11-12 21:26:05 +0000 | [diff] [blame] | 70 | assertErrorMsg 'invalid flag name' |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 71 | } |
| 72 | |
| 73 | testItemInList() |
| 74 | { |
| 75 | list='this is a test' |
| 76 | |
| 77 | _flags_itemInList 'is' ${list} |
| 78 | assertTrue 'unable to find leading string (this)' $? |
| 79 | |
| 80 | _flags_itemInList 'is' ${list} |
| 81 | assertTrue 'unable to find string (is)' $? |
| 82 | |
| 83 | _flags_itemInList 'is' ${list} |
| 84 | assertTrue 'unable to find trailing string (test)' $? |
| 85 | |
| 86 | _flags_itemInList 'abc' ${list} |
| 87 | assertFalse 'found nonexistant string (abc)' $? |
| 88 | |
| 89 | _flags_itemInList '' ${list} |
| 90 | assertFalse 'empty strings should not match' $? |
| 91 | |
| 92 | _flags_itemInList 'blah' '' |
| 93 | assertFalse 'empty lists should not match' $? |
| 94 | } |
| 95 | |
kate.ward | dadc164 | 2008-11-14 02:00:29 +0000 | [diff] [blame] | 96 | testValidateBoolean() |
| 97 | { |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 98 | # valid values |
| 99 | for value in ${TH_BOOL_VALID}; do |
| 100 | _flags_validateBoolean "${value}" |
| 101 | assertTrue "valid value (${value}) did not validate" $? |
| 102 | done |
| 103 | |
| 104 | # invalid values |
| 105 | for value in ${TH_BOOL_INVALID}; do |
| 106 | _flags_validateBoolean "${value}" |
| 107 | assertFalse "invalid value (${value}) validated" $? |
| 108 | done |
| 109 | } |
| 110 | |
kate.ward | dadc164 | 2008-11-14 02:00:29 +0000 | [diff] [blame] | 111 | testValidateFloat() |
| 112 | { |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 113 | # valid values |
| 114 | for value in ${TH_INT_VALID} ${TH_FLOAT_VALID}; do |
| 115 | _flags_validateFloat "${value}" |
| 116 | assertTrue "valid value (${value}) did not validate" $? |
| 117 | done |
| 118 | |
| 119 | # invalid values |
| 120 | for value in ${TH_FLOAT_INVALID}; do |
| 121 | _flags_validateFloat "${value}" |
| 122 | assertFalse "invalid value (${value}) validated" $? |
| 123 | done |
| 124 | } |
| 125 | |
kate.ward | dadc164 | 2008-11-14 02:00:29 +0000 | [diff] [blame] | 126 | testValidateInteger() |
| 127 | { |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 128 | # valid values |
| 129 | for value in ${TH_INT_VALID}; do |
| 130 | _flags_validateInteger "${value}" |
| 131 | assertTrue "valid value (${value}) did not validate" $? |
| 132 | done |
| 133 | |
| 134 | # invalid values |
| 135 | for value in ${TH_INT_INVALID}; do |
| 136 | _flags_validateInteger "${value}" |
| 137 | assertFalse "invalid value (${value}) validated" $? |
| 138 | done |
| 139 | } |
| 140 | |
| 141 | #------------------------------------------------------------------------------ |
| 142 | # suite functions |
| 143 | # |
| 144 | |
| 145 | oneTimeSetUp() |
| 146 | { |
kate.ward | 1b600c5 | 2008-11-12 21:26:05 +0000 | [diff] [blame] | 147 | th_oneTimeSetUp |
kate.ward | f51c616 | 2008-06-17 16:38:35 +0000 | [diff] [blame] | 148 | } |
| 149 | |
| 150 | setUp() |
| 151 | { |
| 152 | flags_reset |
| 153 | } |
| 154 | |
| 155 | # load and run shUnit2 |
| 156 | [ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0 |
| 157 | . ${TH_SHUNIT} |