xref: /aosp_15_r20/external/shflags/shflags_parsing_test.sh (revision 63d4e48fb639f6414be0db9d718e3be2667e4fed)
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