1 #! /bin/sh 2 # vim:et:ft=sh:sts=2:sw=2 3 # 4 # shFlags unit test for the public functions 5 6 # load test helpers 7 . ./shflags_test_helpers 8 9 #------------------------------------------------------------------------------ 10 # suite tests 11 # 12 13 testHelp() 14 { 15 _testHelp '-h' 16 flags_getoptIsEnh || return 17 _testHelp '--help' 18 } 19 20 _testHelp() 21 { 22 flag=$1 23 24 # test default help output 25 th_clearReturn 26 ( 27 FLAGS ${flag} >"${stdoutF}" 2>"${stderrF}" 28 echo $? >"${returnF}" 29 ) 30 th_queryReturn 31 assertTrue \ 32 'short help request should have returned a true exit code.' \ 33 ${th_return} 34 grep 'show this help' "${stderrF}" >/dev/null 35 grepped=$? 36 assertTrue \ 37 'short request for help should have produced some help output.' \ 38 ${grepped} 39 [ ${grepped} -ne ${FLAGS_TRUE} ] && th_showOutput 40 41 # test proper output when FLAGS_HELP set 42 ( 43 FLAGS_HELP='this is a test' 44 FLAGS ${flag} >"${stdoutF}" 2>"${stderrF}" 45 ) 46 grep 'this is a test' "${stderrF}" >/dev/null 47 grepped=$? 48 assertTrue 'setting FLAGS_HELP did not produce expected result' ${grepped} 49 [ ${grepped} -ne ${FLAGS_TRUE} ] && th_showOutput 50 51 # test that "'" chars work in help string 52 ( 53 DEFINE_boolean b false "help string containing a ' char" b 54 FLAGS ${flag} >"${stdoutF}" 2>"${stderrF}" 55 ) 56 grep "help string containing a ' char" "${stderrF}" >/dev/null 57 grepped=$? 58 assertTrue "help strings containing apostrophes don't work" ${grepped} 59 [ ${grepped} -ne ${FLAGS_TRUE} ] && th_showOutput 60 } 61 62 mock_flags_columns() 63 { 64 echo 80 65 } 66 67 testStandardHelpOutput() 68 { 69 flags_getoptIsStd || startSkipping 70 71 DEFINE_boolean test_bool false 'test boolean' b 72 DEFINE_integer test_int 0 'test integer' i 73 DEFINE_string test_str '' 'test string' s 74 DEFINE_string long_desc 'blah' \ 75 'testing of a long description to force wrap of default value' D 76 DEFINE_string long_default \ 77 'this_is_a_long_default_value_to_force_alternate_indentation' \ 78 'testing of long default value' F 79 help='USAGE: standard [flags] args' 80 81 cat >"${expectedF}" <<EOF 82 ${help} 83 flags: 84 -b test boolean (default: false) 85 -i test integer (default: 0) 86 -s test string (default: '') 87 -D testing of a long description to force wrap of default value 88 (default: 'blah') 89 -F testing of long default value 90 (default: 'this_is_a_long_default_value_to_force_alternate_indentation') 91 -h show this help (default: false) 92 EOF 93 ( 94 _flags_columns() { mock_flags_columns; } 95 FLAGS_HELP=${help}; 96 FLAGS -h >"${stdoutF}" 2>"${stderrF}" 97 ) 98 r3turn=$? 99 assertTrue 'a call for help should not return an error' ${r3turn} 100 101 diff "${expectedF}" "${stderrF}" >/dev/null 102 r3turn=$? 103 assertTrue 'unexpected help output' ${r3turn} 104 th_showOutput ${r3turn} "${stdoutF}" "${stderrF}" 105 } 106 107 testEnhancedHelpOutput() 108 { 109 flags_getoptIsEnh || startSkipping 110 111 DEFINE_boolean test_bool false 'test boolean' b 112 DEFINE_integer test_int 0 'test integer' i 113 DEFINE_string test_str '' 'test string' s 114 DEFINE_string long_desc 'blah' \ 115 'testing of a long description to force wrap of default value' D 116 DEFINE_string long_default \ 117 'this_is_a_long_default_value_to_force_alternate_indentation' \ 118 'testing of long default value' F 119 help='USAGE: enhanced [flags] args' 120 121 cat >"${expectedF}" <<EOF 122 ${help} 123 flags: 124 -b,--[no]test_bool: test boolean (default: false) 125 -i,--test_int: test integer (default: 0) 126 -s,--test_str: test string (default: '') 127 -D,--long_desc: testing of a long description to force wrap of default value 128 (default: 'blah') 129 -F,--long_default: testing of long default value 130 (default: 'this_is_a_long_default_value_to_force_alternate_indentation') 131 -h,--help: show this help (default: false) 132 EOF 133 ( 134 _flags_columns() { mock_flags_columns; } 135 FLAGS_HELP=${help}; 136 FLAGS -h >"${stdoutF}" 2>"${stderrF}" 137 ) 138 r3turn=$? 139 assertTrue 'a call for help should not return an error' ${r3turn} 140 141 diff "${expectedF}" "${stderrF}" >/dev/null 142 differed=$? 143 assertTrue 'unexpected help output' ${differed} 144 th_showOutput ${differed} "${stdoutF}" "${stderrF}" 145 } 146 147 testNoHelp() 148 { 149 flags_getoptIsEnh || startSkipping 150 151 ( FLAGS --nohelp >"${stdoutF}" 2>"${stderrF}" ) 152 r3turn=$? 153 assertTrue "FLAGS returned a non-zero result (${r3turn})" ${r3turn} 154 assertFalse 'expected no output to STDOUT' "[ -s '${stdoutF}' ]" 155 assertFalse 'expected no output to STDERR' "[ -s '${stderrF}' ]" 156 } 157 158 #------------------------------------------------------------------------------ 159 # suite functions 160 # 161 162 oneTimeSetUp() 163 { 164 th_oneTimeSetUp 165 166 if flags_getoptIsStd; then 167 th_warn 'Standard version of getopt found. Enhanced tests will be skipped.' 168 else 169 th_warn 'Enhanced version of getopt found. Standard tests will be skipped.' 170 fi 171 } 172 173 setUp() 174 { 175 flags_reset 176 } 177 178 # load and run shUnit2 179 [ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0 180 . ${TH_SHUNIT} 181