xref: /aosp_15_r20/external/shflags/shflags_test_helpers (revision 63d4e48fb639f6414be0db9d718e3be2667e4fed)
1*63d4e48fSSadaf Ebrahimi# vim:et:ft=sh:sts=2:sw=2
2*63d4e48fSSadaf Ebrahimi#
3*63d4e48fSSadaf Ebrahimi# shFlags unit test common functions
4*63d4e48fSSadaf Ebrahimi#
5*63d4e48fSSadaf Ebrahimi# Copyright 2008-2018 Kate Ward. All Rights Reserved.
6*63d4e48fSSadaf Ebrahimi# Released under the Apache 2.0 license.
7*63d4e48fSSadaf Ebrahimi#
8*63d4e48fSSadaf Ebrahimi# Author: [email protected] (Kate Ward)
9*63d4e48fSSadaf Ebrahimi# https://github.com/kward/shflags
10*63d4e48fSSadaf Ebrahimi#
11*63d4e48fSSadaf Ebrahimi### ShellCheck (http://www.shellcheck.net/)
12*63d4e48fSSadaf Ebrahimi# Disable source following.
13*63d4e48fSSadaf Ebrahimi#   shellcheck disable=SC1090,SC1091
14*63d4e48fSSadaf Ebrahimi# $() are not fully portable (POSIX != portable).
15*63d4e48fSSadaf Ebrahimi#   shellcheck disable=SC2006
16*63d4e48fSSadaf Ebrahimi# Arrays are not available in all shells.
17*63d4e48fSSadaf Ebrahimi#   shellcheck disable=SC2089
18*63d4e48fSSadaf Ebrahimi# Exporting variables shouldn't impact their contents.
19*63d4e48fSSadaf Ebrahimi#   shellcheck disable=SC2090
20*63d4e48fSSadaf Ebrahimi# Disagree with [ p ] && [ q ] vs [ p -a -q ] recommendation.
21*63d4e48fSSadaf Ebrahimi#   shellcheck disable=SC2166
22*63d4e48fSSadaf Ebrahimi
23*63d4e48fSSadaf Ebrahimi# Exit immediately if a simple command exits with a non-zero status.
24*63d4e48fSSadaf Ebrahimiset -e
25*63d4e48fSSadaf Ebrahimi
26*63d4e48fSSadaf Ebrahimi# Treat unset variables as an error when performing parameter expansion.
27*63d4e48fSSadaf Ebrahimiset -u
28*63d4e48fSSadaf Ebrahimi
29*63d4e48fSSadaf Ebrahimi# Set shwordsplit for zsh.
30*63d4e48fSSadaf Ebrahimi[ -n "${ZSH_VERSION:-}" ] && setopt shwordsplit
31*63d4e48fSSadaf Ebrahimi
32*63d4e48fSSadaf Ebrahimi# Message functions.
33*63d4e48fSSadaf Ebrahimith_trace() { echo "test:TRACE $*" >&2; }
34*63d4e48fSSadaf Ebrahimith_debug() { echo "test:DEBUG $*" >&2; }
35*63d4e48fSSadaf Ebrahimith_info() { echo "test:INFO $*" >&2; }
36*63d4e48fSSadaf Ebrahimith_warn() { echo "test:WARN $*" >&2; }
37*63d4e48fSSadaf Ebrahimith_error() { echo "test:ERROR $*" >&2; }
38*63d4e48fSSadaf Ebrahimith_fatal() { echo "test:FATAL $*" >&2; exit 1; }
39*63d4e48fSSadaf Ebrahimi
40*63d4e48fSSadaf Ebrahimi# Path to shFlags library. Can be overridden by setting SHFLAGS_INC.
41*63d4e48fSSadaf EbrahimiTH_SHFLAGS=${SHFLAGS_INC:-./shflags}; export TH_SHFLAGS
42*63d4e48fSSadaf Ebrahimi
43*63d4e48fSSadaf Ebrahimi# Path to shUnit2 library. Can be overridden by setting SHUNIT_INC.
44*63d4e48fSSadaf EbrahimiTH_SHUNIT=${SHUNIT_INC:-lib/shunit2}; export TH_SHUNIT
45*63d4e48fSSadaf Ebrahimi
46*63d4e48fSSadaf EbrahimiTH_BOOL_VALID='true t 0 false f 1'; export TH_BOOL_VALID
47*63d4e48fSSadaf EbrahimiTH_BOOL_INVALID='123 123.0 invalid'; export TH_BOOL_INVALID
48*63d4e48fSSadaf EbrahimiTH_FLOAT_VALID='-1234.0 -1.0 -.123 0.0 0. .123 1.0 1234.0'
49*63d4e48fSSadaf Ebrahimiexport TH_FLOAT_VALID
50*63d4e48fSSadaf EbrahimiTH_FLOAT_INVALID='true false 1.2.3 -1.2.3 ""'; export TH_FLOAT_INVALID
51*63d4e48fSSadaf EbrahimiTH_INT_VALID='-1234 -1 0 1 1234'; export TH_INT_VALID
52*63d4e48fSSadaf EbrahimiTH_INT_INVALID='true false -1.0 -.123 0.0 .123 1.0 ""'; export TH_INT_INVALID
53*63d4e48fSSadaf Ebrahimi
54*63d4e48fSSadaf Ebrahimi#
55*63d4e48fSSadaf Ebrahimi# Test helper functions.
56*63d4e48fSSadaf Ebrahimi#
57*63d4e48fSSadaf Ebrahimi
58*63d4e48fSSadaf Ebrahimith_oneTimeSetUp() {
59*63d4e48fSSadaf Ebrahimi  # Load shFlags.
60*63d4e48fSSadaf Ebrahimi  # shellcheck disable=SC2034
61*63d4e48fSSadaf Ebrahimi  [ -n "${ZSH_VERSION:-}" ] && FLAGS_PARENT=$0
62*63d4e48fSSadaf Ebrahimi  . "${TH_SHFLAGS}"
63*63d4e48fSSadaf Ebrahimi
64*63d4e48fSSadaf Ebrahimi  # These files will be cleaned up automatically by shUnit2.
65*63d4e48fSSadaf Ebrahimi  tmpDir=${SHUNIT_TMPDIR}; export tmpDir
66*63d4e48fSSadaf Ebrahimi  stdoutF="${tmpDir}/stdout" && touch "${stdoutF}"
67*63d4e48fSSadaf Ebrahimi  stderrF="${tmpDir}/stderr" && touch "${stderrF}"
68*63d4e48fSSadaf Ebrahimi  returnF="${tmpDir}/return" && touch "${returnF}"
69*63d4e48fSSadaf Ebrahimi  expectedF="${tmpDir}/expected" && touch "${expectedF}"
70*63d4e48fSSadaf Ebrahimi}
71*63d4e48fSSadaf Ebrahimi
72*63d4e48fSSadaf Ebrahimith_showOutput() {
73*63d4e48fSSadaf Ebrahimi  if isSkipping; then
74*63d4e48fSSadaf Ebrahimi    return
75*63d4e48fSSadaf Ebrahimi  fi
76*63d4e48fSSadaf Ebrahimi
77*63d4e48fSSadaf Ebrahimi  _th_return="${1:-${returnF}}"
78*63d4e48fSSadaf Ebrahimi  _th_stdout="${2:-${stdoutF}}"
79*63d4e48fSSadaf Ebrahimi  _th_stderr="${3:-${stderrF}}"
80*63d4e48fSSadaf Ebrahimi
81*63d4e48fSSadaf Ebrahimi  if [ "${_th_return}" != "${FLAGS_TRUE}" ]; then
82*63d4e48fSSadaf Ebrahimi    # shellcheck disable=SC2166
83*63d4e48fSSadaf Ebrahimi    if [ -n "${_th_stdout}" -a -s "${_th_stdout}" ]; then
84*63d4e48fSSadaf Ebrahimi      echo '>>> STDOUT' >&2
85*63d4e48fSSadaf Ebrahimi      cat "${_th_stdout}" >&2
86*63d4e48fSSadaf Ebrahimi      echo '<<< STDOUT' >&2
87*63d4e48fSSadaf Ebrahimi    fi
88*63d4e48fSSadaf Ebrahimi    # shellcheck disable=SC2166
89*63d4e48fSSadaf Ebrahimi    if [ -n "${_th_stderr}" -a -s "${_th_stderr}" ]; then
90*63d4e48fSSadaf Ebrahimi      echo '>>> STDERR' >&2
91*63d4e48fSSadaf Ebrahimi      cat "${_th_stderr}" >&2
92*63d4e48fSSadaf Ebrahimi      echo '<<< STDERR' >&2
93*63d4e48fSSadaf Ebrahimi    fi
94*63d4e48fSSadaf Ebrahimi  fi
95*63d4e48fSSadaf Ebrahimi
96*63d4e48fSSadaf Ebrahimi  unset _th_rtrn _th_stdout _th_stderr
97*63d4e48fSSadaf Ebrahimi}
98*63d4e48fSSadaf Ebrahimi
99*63d4e48fSSadaf Ebrahimi# Some shells, zsh on Solaris in particular, return immediately from a sub-shell
100*63d4e48fSSadaf Ebrahimi# when a non-zero return value is encountered. To properly catch these values,
101*63d4e48fSSadaf Ebrahimi# they are either written to disk, or recognized as an error the file is empty.
102*63d4e48fSSadaf Ebrahimith_clearReturn() { cp /dev/null "${returnF}"; }
103*63d4e48fSSadaf Ebrahimith_queryReturn() {
104*63d4e48fSSadaf Ebrahimi  if [ -s "${returnF}" ]; then
105*63d4e48fSSadaf Ebrahimi    cat "${returnF}"
106*63d4e48fSSadaf Ebrahimi    return $?
107*63d4e48fSSadaf Ebrahimi  fi
108*63d4e48fSSadaf Ebrahimi  echo "${SHUNIT_ERROR}"
109*63d4e48fSSadaf Ebrahimi  return "${SHUNIT_ERROR}"
110*63d4e48fSSadaf Ebrahimi}
111*63d4e48fSSadaf Ebrahimi
112*63d4e48fSSadaf EbrahimiassertWarnMsg()  { _th_assertMsg 'WARN' "${1:-}" "${2:-}"; }
113*63d4e48fSSadaf EbrahimiassertErrorMsg() { _th_assertMsg 'ERROR' "${1:-}" "${2:-}"; }
114*63d4e48fSSadaf EbrahimiassertFatalMsg() { _th_assertMsg 'FATAL' "${1:-}" "${2:-}"; }
115*63d4e48fSSadaf Ebrahimi
116*63d4e48fSSadaf Ebrahimi_th_assertMsg() {
117*63d4e48fSSadaf Ebrahimi  _th_alert_type_=$1
118*63d4e48fSSadaf Ebrahimi  _th_alert_msg_=$2
119*63d4e48fSSadaf Ebrahimi  _th_msg_=$3
120*63d4e48fSSadaf Ebrahimi
121*63d4e48fSSadaf Ebrahimi  case ${_th_alert_type_} in
122*63d4e48fSSadaf Ebrahimi    WARN)  _th_alert_str_='a warning' ;;
123*63d4e48fSSadaf Ebrahimi    ERROR) _th_alert_str_='an error' ;;
124*63d4e48fSSadaf Ebrahimi    FATAL) _th_alert_str_='a fatal' ;;
125*63d4e48fSSadaf Ebrahimi  esac
126*63d4e48fSSadaf Ebrahimi  if [ -z "${_th_alert_msg_}" ]; then
127*63d4e48fSSadaf Ebrahimi   _th_alert_msg_='.*'
128*63d4e48fSSadaf Ebrahimi  fi
129*63d4e48fSSadaf Ebrahimi  if [ -n "${_th_msg_}" ]; then
130*63d4e48fSSadaf Ebrahimi    _th_msg_="(${_th_msg_}) "
131*63d4e48fSSadaf Ebrahimi  fi
132*63d4e48fSSadaf Ebrahimi
133*63d4e48fSSadaf Ebrahimi  (grep -- "^flags:${_th_alert_type_} ${_th_alert_msg_}" "${stderrF}" >/dev/null)
134*63d4e48fSSadaf Ebrahimi  assertEquals "FLAGS ${_th_msg_}failure did not generate ${_th_alert_str_} message" "${FLAGS_TRUE}" $?
135*63d4e48fSSadaf Ebrahimi
136*63d4e48fSSadaf Ebrahimi  unset _th_alert_type_ _th_alert_msg_ _th_alert_str_ _th_msg_
137*63d4e48fSSadaf Ebrahimi}
138