1*63d4e48fSSadaf Ebrahimi#! /bin/sh 2*63d4e48fSSadaf Ebrahimi# vim:et:ft=sh:sts=2:sw=2 3*63d4e48fSSadaf Ebrahimi# 4*63d4e48fSSadaf Ebrahimi# shFlags unit test for the flag definition methods 5*63d4e48fSSadaf Ebrahimi# 6*63d4e48fSSadaf Ebrahimi# Copyright 2008-2020 Kate Ward. All Rights Reserved. 7*63d4e48fSSadaf Ebrahimi# Released under the Apache 2.0 license. 8*63d4e48fSSadaf Ebrahimi# 9*63d4e48fSSadaf Ebrahimi# Author: [email protected] (Kate Ward) 10*63d4e48fSSadaf Ebrahimi# https://github.com/kward/shflags 11*63d4e48fSSadaf Ebrahimi# 12*63d4e48fSSadaf Ebrahimi### ShellCheck (http://www.shellcheck.net/) 13*63d4e48fSSadaf Ebrahimi# Disable source following. 14*63d4e48fSSadaf Ebrahimi# shellcheck disable=SC1090,SC1091 15*63d4e48fSSadaf Ebrahimi 16*63d4e48fSSadaf Ebrahimi# TODO(kward): assert on FLAGS errors 17*63d4e48fSSadaf Ebrahimi# TODO(kward): testNonStandardIFS() 18*63d4e48fSSadaf Ebrahimi 19*63d4e48fSSadaf Ebrahimi# These variables will be overridden by the test helpers. 20*63d4e48fSSadaf EbrahimistdoutF="${TMPDIR:-/tmp}/STDOUT" 21*63d4e48fSSadaf EbrahimistderrF="${TMPDIR:-/tmp}/STDERR" 22*63d4e48fSSadaf Ebrahimi 23*63d4e48fSSadaf Ebrahimi# Load test helpers. 24*63d4e48fSSadaf Ebrahimi. ./shflags_test_helpers 25*63d4e48fSSadaf Ebrahimi 26*63d4e48fSSadaf EbrahimitestGetoptStandard() { 27*63d4e48fSSadaf Ebrahimi if ! _flags_getoptStandard '-b' >"${stdoutF}" 2>"${stderrF}"; then 28*63d4e48fSSadaf Ebrahimi fail "error parsing -b flag" 29*63d4e48fSSadaf Ebrahimi _showTestOutput 30*63d4e48fSSadaf Ebrahimi fi 31*63d4e48fSSadaf Ebrahimi 32*63d4e48fSSadaf Ebrahimi if _flags_getoptStandard '-x' >"${stdoutF}" 2>"${stderrF}"; then 33*63d4e48fSSadaf Ebrahimi fail "expected error parsing invalid -x flag" 34*63d4e48fSSadaf Ebrahimi _showTestOutput 35*63d4e48fSSadaf Ebrahimi fi 36*63d4e48fSSadaf Ebrahimi} 37*63d4e48fSSadaf Ebrahimi 38*63d4e48fSSadaf EbrahimitestGetoptEnhanced() { 39*63d4e48fSSadaf Ebrahimi if ! flags_getoptIsEnh; then 40*63d4e48fSSadaf Ebrahimi return 41*63d4e48fSSadaf Ebrahimi fi 42*63d4e48fSSadaf Ebrahimi 43*63d4e48fSSadaf Ebrahimi if ! _flags_getoptEnhanced '-b' >"${stdoutF}" 2>"${stderrF}"; then 44*63d4e48fSSadaf Ebrahimi fail "error parsing -b flag" 45*63d4e48fSSadaf Ebrahimi _showTestOutput 46*63d4e48fSSadaf Ebrahimi fi 47*63d4e48fSSadaf Ebrahimi if ! _flags_getoptEnhanced '--bool' >"${stdoutF}" 2>"${stderrF}"; then 48*63d4e48fSSadaf Ebrahimi fail "error parsing --bool flag" 49*63d4e48fSSadaf Ebrahimi _showTestOutput 50*63d4e48fSSadaf Ebrahimi fi 51*63d4e48fSSadaf Ebrahimi 52*63d4e48fSSadaf Ebrahimi if _flags_getoptEnhanced '-x' >"${stdoutF}" 2>"${stderrF}"; then 53*63d4e48fSSadaf Ebrahimi fail "expected error parsing invalid -x flag" 54*63d4e48fSSadaf Ebrahimi _showTestOutput 55*63d4e48fSSadaf Ebrahimi fi 56*63d4e48fSSadaf Ebrahimi if _flags_getoptEnhanced '--xyz' >"${stdoutF}" 2>"${stderrF}"; then 57*63d4e48fSSadaf Ebrahimi fail "expected error parsing invalid --xyz flag" 58*63d4e48fSSadaf Ebrahimi _showTestOutput 59*63d4e48fSSadaf Ebrahimi fi 60*63d4e48fSSadaf Ebrahimi} 61*63d4e48fSSadaf Ebrahimi 62*63d4e48fSSadaf EbrahimitestValidBoolsShort() { 63*63d4e48fSSadaf Ebrahimi desc='bool_true_arg' 64*63d4e48fSSadaf Ebrahimi if FLAGS -b >"${stdoutF}" 2>"${stderrF}"; then 65*63d4e48fSSadaf Ebrahimi assertTrue "${desc}: expected true value" "${FLAGS_bool:-}" 66*63d4e48fSSadaf Ebrahimi else 67*63d4e48fSSadaf Ebrahimi fail "${desc}: FLAGS returned a non-zero result ($?)" 68*63d4e48fSSadaf Ebrahimi fi 69*63d4e48fSSadaf Ebrahimi th_showOutput 70*63d4e48fSSadaf Ebrahimi 71*63d4e48fSSadaf Ebrahimi desc='bool2_defined' 72*63d4e48fSSadaf Ebrahimi DEFINE_boolean bool2 true '2nd boolean' B 73*63d4e48fSSadaf Ebrahimi if FLAGS >"${stdoutF}" 2>"${stderrF}"; then 74*63d4e48fSSadaf Ebrahimi assertTrue "${desc}: expected true value" "${FLAGS_bool2:-}" 75*63d4e48fSSadaf Ebrahimi else 76*63d4e48fSSadaf Ebrahimi fail "${desc}: FLAGS returned a non-zero result ($?)" 77*63d4e48fSSadaf Ebrahimi fi 78*63d4e48fSSadaf Ebrahimi th_showOutput 79*63d4e48fSSadaf Ebrahimi 80*63d4e48fSSadaf Ebrahimi desc='bool_false_arg' 81*63d4e48fSSadaf Ebrahimi if FLAGS -B >"${stdoutF}" 2>"${stderrF}"; then 82*63d4e48fSSadaf Ebrahimi assertFalse "${desc}: expected false value" "${FLAGS_bool2:-}" 83*63d4e48fSSadaf Ebrahimi else 84*63d4e48fSSadaf Ebrahimi fail "${desc}: FLAGS returned a non-zero result ($?)" 85*63d4e48fSSadaf Ebrahimi fi 86*63d4e48fSSadaf Ebrahimi th_showOutput 87*63d4e48fSSadaf Ebrahimi} 88*63d4e48fSSadaf Ebrahimi 89*63d4e48fSSadaf Ebrahimi# TODO(kate): separate into multiple functions to reflect correct usage 90*63d4e48fSSadaf EbrahimitestValidBoolsLong() { 91*63d4e48fSSadaf Ebrahimi flags_getoptIsEnh 92*63d4e48fSSadaf Ebrahimi [ $? -eq "${FLAGS_FALSE}" ] && return 93*63d4e48fSSadaf Ebrahimi 94*63d4e48fSSadaf Ebrahimi # Note: the default value of bool is 'false'. 95*63d4e48fSSadaf Ebrahimi 96*63d4e48fSSadaf Ebrahimi # Leave flag false. 97*63d4e48fSSadaf Ebrahimi FLAGS --nobool >"${stdoutF}" 2>"${stderrF}" 98*63d4e48fSSadaf Ebrahimi r3turn=$? 99*63d4e48fSSadaf Ebrahimi assertTrue "FLAGS returned a non-zero result (${r3turn})" ${r3turn} 100*63d4e48fSSadaf Ebrahimi assertFalse '--noXX flag resulted in true value.' "${FLAGS_bool:-}" 101*63d4e48fSSadaf Ebrahimi assertFalse 'expected no output to STDERR' "[ -s '${stderrF}' ]" 102*63d4e48fSSadaf Ebrahimi th_showOutput ${r3turn} "${stdoutF}" "${stderrF}" 103*63d4e48fSSadaf Ebrahimi 104*63d4e48fSSadaf Ebrahimi # Flip flag true. 105*63d4e48fSSadaf Ebrahimi FLAGS --bool >"${stdoutF}" 2>"${stderrF}" 106*63d4e48fSSadaf Ebrahimi r3turn=$? 107*63d4e48fSSadaf Ebrahimi assertTrue "FLAGS returned a non-zero result (${r3turn})" ${r3turn} 108*63d4e48fSSadaf Ebrahimi assertTrue '--XX flag resulted in false value.' "${FLAGS_bool:-}" 109*63d4e48fSSadaf Ebrahimi assertFalse 'expected no output to STDERR' "[ -s '${stderrF}' ]" 110*63d4e48fSSadaf Ebrahimi th_showOutput ${r3turn} "${stdoutF}" "${stderrF}" 111*63d4e48fSSadaf Ebrahimi 112*63d4e48fSSadaf Ebrahimi # Flip flag back false. 113*63d4e48fSSadaf Ebrahimi FLAGS --nobool >"${stdoutF}" 2>"${stderrF}" 114*63d4e48fSSadaf Ebrahimi r3turn=$? 115*63d4e48fSSadaf Ebrahimi assertTrue "FLAGS returned a non-zero result (${r3turn})" ${r3turn} 116*63d4e48fSSadaf Ebrahimi assertFalse '--noXX flag resulted in true value.' "${FLAGS_bool:-}" 117*63d4e48fSSadaf Ebrahimi assertFalse 'expected no output to STDERR' "[ -s '${stderrF}' ]" 118*63d4e48fSSadaf Ebrahimi th_showOutput ${r3turn} "${stdoutF}" "${stderrF}" 119*63d4e48fSSadaf Ebrahimi} 120*63d4e48fSSadaf Ebrahimi 121*63d4e48fSSadaf EbrahimitestFloats() { 122*63d4e48fSSadaf Ebrahimi _testFloats '-f' 123*63d4e48fSSadaf Ebrahimi if flags_getoptIsEnh; then 124*63d4e48fSSadaf Ebrahimi _testFloats '--float' 125*63d4e48fSSadaf Ebrahimi fi 126*63d4e48fSSadaf Ebrahimi} 127*63d4e48fSSadaf Ebrahimi 128*63d4e48fSSadaf Ebrahimi_testFloats() { 129*63d4e48fSSadaf Ebrahimi flag=$1 130*63d4e48fSSadaf Ebrahimi 131*63d4e48fSSadaf Ebrahimi for value in ${TH_FLOAT_VALID}; do 132*63d4e48fSSadaf Ebrahimi if FLAGS "${flag}" "${value}" >"${stdoutF}" 2>"${stderrF}"; then 133*63d4e48fSSadaf Ebrahimi # shellcheck disable=SC2154 134*63d4e48fSSadaf Ebrahimi assertEquals "${flag}: incorrect value" "${value}" "${FLAGS_float}" 135*63d4e48fSSadaf Ebrahimi else 136*63d4e48fSSadaf Ebrahimi fail "${flag}: unexpected non-zero result ($?)" 137*63d4e48fSSadaf Ebrahimi th_showOutput 138*63d4e48fSSadaf Ebrahimi fi 139*63d4e48fSSadaf Ebrahimi done 140*63d4e48fSSadaf Ebrahimi 141*63d4e48fSSadaf Ebrahimi for value in ${TH_FLOAT_INVALID}; do 142*63d4e48fSSadaf Ebrahimi # Wrap FLAGS in () to catch errors. 143*63d4e48fSSadaf Ebrahimi if (FLAGS "${flag}" "${value}" >"${stdoutF}" 2>"${stderrF}"); then 144*63d4e48fSSadaf Ebrahimi fail "${flag}: expected a non-zero result" 145*63d4e48fSSadaf Ebrahimi th_showOutput 146*63d4e48fSSadaf Ebrahimi else 147*63d4e48fSSadaf Ebrahimi assertEquals "${flag}: expected an error" $? "${FLAGS_ERROR}" 148*63d4e48fSSadaf Ebrahimi fi 149*63d4e48fSSadaf Ebrahimi done 150*63d4e48fSSadaf Ebrahimi} 151*63d4e48fSSadaf Ebrahimi 152*63d4e48fSSadaf EbrahimitestIntegers() { 153*63d4e48fSSadaf Ebrahimi _testIntegers '-i' 154*63d4e48fSSadaf Ebrahimi if flags_getoptIsEnh; then 155*63d4e48fSSadaf Ebrahimi _testIntegers '--int' 156*63d4e48fSSadaf Ebrahimi fi 157*63d4e48fSSadaf Ebrahimi} 158*63d4e48fSSadaf Ebrahimi 159*63d4e48fSSadaf Ebrahimi_testIntegers() { 160*63d4e48fSSadaf Ebrahimi flag=$1 161*63d4e48fSSadaf Ebrahimi 162*63d4e48fSSadaf Ebrahimi for value in ${TH_INT_VALID}; do 163*63d4e48fSSadaf Ebrahimi if FLAGS "${flag}" "${value}" >"${stdoutF}" 2>"${stderrF}"; then 164*63d4e48fSSadaf Ebrahimi # shellcheck disable=SC2154 165*63d4e48fSSadaf Ebrahimi assertEquals "${flag}: incorrect value" "${value}" "${FLAGS_int}" 166*63d4e48fSSadaf Ebrahimi else 167*63d4e48fSSadaf Ebrahimi fail "${flag}: unexpected non-zero result ($?)" 168*63d4e48fSSadaf Ebrahimi th_showOutput 169*63d4e48fSSadaf Ebrahimi fi 170*63d4e48fSSadaf Ebrahimi done 171*63d4e48fSSadaf Ebrahimi 172*63d4e48fSSadaf Ebrahimi for value in ${TH_INT_INVALID}; do 173*63d4e48fSSadaf Ebrahimi # Wrap FLAGS in () to catch errors. 174*63d4e48fSSadaf Ebrahimi if (FLAGS "${flag}" "${value}" >"${stdoutF}" 2>"${stderrF}"); then 175*63d4e48fSSadaf Ebrahimi fail "${flag}: expected a non-zero result" 176*63d4e48fSSadaf Ebrahimi th_showOutput 177*63d4e48fSSadaf Ebrahimi else 178*63d4e48fSSadaf Ebrahimi assertEquals "${flag}: expected an error" $? "${FLAGS_ERROR}" 179*63d4e48fSSadaf Ebrahimi fi 180*63d4e48fSSadaf Ebrahimi done 181*63d4e48fSSadaf Ebrahimi} 182*63d4e48fSSadaf Ebrahimi 183*63d4e48fSSadaf EbrahimitestStrings() { 184*63d4e48fSSadaf Ebrahimi _testStrings 'std_single_word' -s single_word 185*63d4e48fSSadaf Ebrahimi if flags_getoptIsEnh; then 186*63d4e48fSSadaf Ebrahimi _testStrings 'enh_single_word' --str single_word 187*63d4e48fSSadaf Ebrahimi _testStrings 'enh_multi_word' --str 'string with spaces' 188*63d4e48fSSadaf Ebrahimi fi 189*63d4e48fSSadaf Ebrahimi} 190*63d4e48fSSadaf Ebrahimi 191*63d4e48fSSadaf Ebrahimi_testStrings() { 192*63d4e48fSSadaf Ebrahimi desc=$1 193*63d4e48fSSadaf Ebrahimi flag=$2 194*63d4e48fSSadaf Ebrahimi value=$3 195*63d4e48fSSadaf Ebrahimi 196*63d4e48fSSadaf Ebrahimi if FLAGS "${flag}" "${value}" >"${stdoutF}" 2>"${stderrF}"; then 197*63d4e48fSSadaf Ebrahimi # shellcheck disable=SC2154 198*63d4e48fSSadaf Ebrahimi assertEquals "${desc}: incorrect value" "${value}" "${FLAGS_str}" 199*63d4e48fSSadaf Ebrahimi else 200*63d4e48fSSadaf Ebrahimi fail "${desc}: unexpected non-zero result ($?)" 201*63d4e48fSSadaf Ebrahimi # Validate that an error is thrown for unsupported getopt uses. 202*63d4e48fSSadaf Ebrahimi assertFatalMsg '.* spaces in options' 203*63d4e48fSSadaf Ebrahimi th_showOutput 204*63d4e48fSSadaf Ebrahimi fi 205*63d4e48fSSadaf Ebrahimi} 206*63d4e48fSSadaf Ebrahimi 207*63d4e48fSSadaf EbrahimitestMultipleFlags() { 208*63d4e48fSSadaf Ebrahimi _testMultipleFlags '-b' '-i' '-f' '-s' 209*63d4e48fSSadaf Ebrahimi flags_getoptIsEnh 210*63d4e48fSSadaf Ebrahimi [ $? -eq "${FLAGS_FALSE}" ] && return 211*63d4e48fSSadaf Ebrahimi _testMultipleFlags '--bool' '--int' '--float' '--str' 212*63d4e48fSSadaf Ebrahimi} 213*63d4e48fSSadaf Ebrahimi 214*63d4e48fSSadaf Ebrahimi_testMultipleFlags() { 215*63d4e48fSSadaf Ebrahimi boolFlag=$1 216*63d4e48fSSadaf Ebrahimi intFlag=$2 217*63d4e48fSSadaf Ebrahimi floatFlag=$3 218*63d4e48fSSadaf Ebrahimi strFlag=$4 219*63d4e48fSSadaf Ebrahimi 220*63d4e48fSSadaf Ebrahimi FLAGS \ 221*63d4e48fSSadaf Ebrahimi "${boolFlag}" \ 222*63d4e48fSSadaf Ebrahimi "${intFlag}" 567 \ 223*63d4e48fSSadaf Ebrahimi "${floatFlag}" 123.45678 \ 224*63d4e48fSSadaf Ebrahimi "${strFlag}" 'some_string' \ 225*63d4e48fSSadaf Ebrahimi >"${stdoutF}" 2>"${stderrF}" 226*63d4e48fSSadaf Ebrahimi r3turn=$? 227*63d4e48fSSadaf Ebrahimi assertTrue "use of multiple flags returned a non-zero result" ${r3turn} 228*63d4e48fSSadaf Ebrahimi assertTrue 'boolean test failed.' "${FLAGS_bool}" 229*63d4e48fSSadaf Ebrahimi assertNotSame 'float test failed.' 0 "${FLAGS_float}" 230*63d4e48fSSadaf Ebrahimi assertNotSame 'integer test failed.' 0 "${FLAGS_int}" 231*63d4e48fSSadaf Ebrahimi assertNotSame 'string test failed.' '' "${FLAGS_str}" 232*63d4e48fSSadaf Ebrahimi assertFalse 'expected no output to STDERR' "[ -s '${stderrF}' ]" 233*63d4e48fSSadaf Ebrahimi th_showOutput ${r3turn} "${stdoutF}" "${stderrF}" 234*63d4e48fSSadaf Ebrahimi} 235*63d4e48fSSadaf Ebrahimi 236*63d4e48fSSadaf Ebrahimi_testNonFlagArgs() { 237*63d4e48fSSadaf Ebrahimi argc=$1 238*63d4e48fSSadaf Ebrahimi shift 239*63d4e48fSSadaf Ebrahimi 240*63d4e48fSSadaf Ebrahimi FLAGS "$@" >"${stdoutF}" 2>"${stderrF}" 241*63d4e48fSSadaf Ebrahimi r3turn=$? 242*63d4e48fSSadaf Ebrahimi assertTrue 'parse returned non-zero value.' ${r3turn} 243*63d4e48fSSadaf Ebrahimi th_showOutput ${r3turn} "${stdoutF}" "${stderrF}" 244*63d4e48fSSadaf Ebrahimi 245*63d4e48fSSadaf Ebrahimi eval set -- "${FLAGS_ARGV}" 246*63d4e48fSSadaf Ebrahimi assertEquals 'wrong count of argv arguments returned.' "${argc}" $# 247*63d4e48fSSadaf Ebrahimi} 248*63d4e48fSSadaf Ebrahimi 249*63d4e48fSSadaf EbrahimitestSingleNonFlagArg() { _testNonFlagArgs 1 argOne; } 250*63d4e48fSSadaf EbrahimitestMultipleNonFlagArgs() { _testNonFlagArgs 3 argOne argTwo arg3; } 251*63d4e48fSSadaf Ebrahimi 252*63d4e48fSSadaf EbrahimitestMultipleNonFlagStringArgsWithSpaces() { 253*63d4e48fSSadaf Ebrahimi if flags_getoptIsEnh; then 254*63d4e48fSSadaf Ebrahimi _testNonFlagArgs 3 argOne 'arg two' arg3 255*63d4e48fSSadaf Ebrahimi fi 256*63d4e48fSSadaf Ebrahimi} 257*63d4e48fSSadaf Ebrahimi 258*63d4e48fSSadaf EbrahimitestFlagsWithEquals() { 259*63d4e48fSSadaf Ebrahimi if ! flags_getoptIsEnh; then 260*63d4e48fSSadaf Ebrahimi return 261*63d4e48fSSadaf Ebrahimi fi 262*63d4e48fSSadaf Ebrahimi 263*63d4e48fSSadaf Ebrahimi FLAGS --str='str_flag' 'non_flag' >"${stdoutF}" 2>"${stderrF}" 264*63d4e48fSSadaf Ebrahimi assertTrue 'FLAGS returned a non-zero result' $? 265*63d4e48fSSadaf Ebrahimi assertEquals 'string flag not set properly' 'str_flag' "${FLAGS_str}" 266*63d4e48fSSadaf Ebrahimi th_showOutput ${r3turn} "${stdoutF}" "${stderrF}" 267*63d4e48fSSadaf Ebrahimi 268*63d4e48fSSadaf Ebrahimi eval set -- "${FLAGS_ARGV}" 269*63d4e48fSSadaf Ebrahimi assertEquals 'wrong count of argv arguments returned.' 1 $# 270*63d4e48fSSadaf Ebrahimi} 271*63d4e48fSSadaf Ebrahimi 272*63d4e48fSSadaf EbrahimitestComplicatedCommandLineStandard() { 273*63d4e48fSSadaf Ebrahimi flags_getoptIsEnh 274*63d4e48fSSadaf Ebrahimi [ $? -eq "${FLAGS_TRUE}" ] && return 275*63d4e48fSSadaf Ebrahimi 276*63d4e48fSSadaf Ebrahimi # Note: standard getopt stops parsing after first non-flag argument, which 277*63d4e48fSSadaf Ebrahimi # results in the remaining flags being treated as arguments instead. 278*63d4e48fSSadaf Ebrahimi FLAGS -i 1 non_flag_1 -s 'two' non_flag_2 -f 3 non_flag_3 \ 279*63d4e48fSSadaf Ebrahimi >"${stdoutF}" 2>"${stderrF}" 280*63d4e48fSSadaf Ebrahimi r3turn=$? 281*63d4e48fSSadaf Ebrahimi assertTrue 'FLAGS returned a non-zero result' ${r3turn} 282*63d4e48fSSadaf Ebrahimi assertEquals 'failed int test' 1 "${FLAGS_int}" 283*63d4e48fSSadaf Ebrahimi th_showOutput ${r3turn} "${stdoutF}" "${stderrF}" 284*63d4e48fSSadaf Ebrahimi 285*63d4e48fSSadaf Ebrahimi eval set -- "${FLAGS_ARGV}" 286*63d4e48fSSadaf Ebrahimi assertEquals 'incorrect number of argv values' 7 $# 287*63d4e48fSSadaf Ebrahimi} 288*63d4e48fSSadaf Ebrahimi 289*63d4e48fSSadaf EbrahimitestComplicatedCommandLineEnhanced() { 290*63d4e48fSSadaf Ebrahimi flags_getoptIsEnh 291*63d4e48fSSadaf Ebrahimi [ $? -eq "${FLAGS_FALSE}" ] && return 292*63d4e48fSSadaf Ebrahimi 293*63d4e48fSSadaf Ebrahimi FLAGS -i 1 non_flag_1 --str='two' non_flag_2 --float 3 'non flag 3' \ 294*63d4e48fSSadaf Ebrahimi >"${stdoutF}" 2>"${stderrF}" 295*63d4e48fSSadaf Ebrahimi r3turn=$? 296*63d4e48fSSadaf Ebrahimi assertTrue 'FLAGS returned a non-zero result' ${r3turn} 297*63d4e48fSSadaf Ebrahimi assertEquals 'failed int test' 1 "${FLAGS_int}" 298*63d4e48fSSadaf Ebrahimi assertEquals 'failed str test' 'two' "${FLAGS_str}" 299*63d4e48fSSadaf Ebrahimi assertEquals 'failed float test' 3 "${FLAGS_float}" 300*63d4e48fSSadaf Ebrahimi th_showOutput ${r3turn} "${stdoutF}" "${stderrF}" 301*63d4e48fSSadaf Ebrahimi 302*63d4e48fSSadaf Ebrahimi eval set -- "${FLAGS_ARGV}" 303*63d4e48fSSadaf Ebrahimi assertEquals 'incorrect number of argv values' 3 $# 304*63d4e48fSSadaf Ebrahimi} 305*63d4e48fSSadaf Ebrahimi 306*63d4e48fSSadaf EbrahimioneTimeSetUp() { 307*63d4e48fSSadaf Ebrahimi th_oneTimeSetUp 308*63d4e48fSSadaf Ebrahimi 309*63d4e48fSSadaf Ebrahimi if flags_getoptIsStd; then 310*63d4e48fSSadaf Ebrahimi th_warn 'Standard version of getopt found. Enhanced tests will be skipped.' 311*63d4e48fSSadaf Ebrahimi else 312*63d4e48fSSadaf Ebrahimi th_warn 'Enhanced version of getopt found. Standard tests will be skipped.' 313*63d4e48fSSadaf Ebrahimi fi 314*63d4e48fSSadaf Ebrahimi} 315*63d4e48fSSadaf Ebrahimi 316*63d4e48fSSadaf EbrahimisetUp() { 317*63d4e48fSSadaf Ebrahimi DEFINE_boolean bool false 'boolean test' 'b' 318*63d4e48fSSadaf Ebrahimi DEFINE_float float 0.0 'float test' 'f' 319*63d4e48fSSadaf Ebrahimi DEFINE_integer int 0 'integer test' 'i' 320*63d4e48fSSadaf Ebrahimi DEFINE_string str '' 'string test' 's' 321*63d4e48fSSadaf Ebrahimi} 322*63d4e48fSSadaf Ebrahimi 323*63d4e48fSSadaf EbrahimitearDown() { 324*63d4e48fSSadaf Ebrahimi flags_reset 325*63d4e48fSSadaf Ebrahimi} 326*63d4e48fSSadaf Ebrahimi 327*63d4e48fSSadaf Ebrahimi# showTestOutput for the most recently run test. 328*63d4e48fSSadaf Ebrahimi_showTestOutput() { th_showOutput "${SHUNIT_FALSE}" "${stdoutF}" "${stderrF}"; } 329*63d4e48fSSadaf Ebrahimi 330*63d4e48fSSadaf Ebrahimi# Load and run shUnit2. 331*63d4e48fSSadaf Ebrahimi# shellcheck disable=SC2034 332*63d4e48fSSadaf Ebrahimi[ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0 333*63d4e48fSSadaf Ebrahimi. "${TH_SHUNIT}" 334