| # vim:et:ft=sh:sts=2:sw=2 |
| # |
| # shFlags unit test common functions |
| |
| __th_skipping=0 |
| |
| # treat unset variables as an error |
| set -u |
| |
| # set shwordsplit for zsh |
| [ -n "${ZSH_VERSION:-}" ] && setopt shwordsplit |
| |
| # my name |
| TH_MY_NAME=`basename "$0"` |
| |
| # path to shFlags library. can be overridden by setting SHFLAGS_INC |
| TH_SHFLAGS=${SHFLAGS_INC:-./shflags} |
| |
| # Path to shUnit2 library. Can be overridden by setting SHUNIT_INC. |
| export TH_SHUNIT=${SHUNIT_INC:-lib/shunit2} |
| |
| TH_BOOL_VALID='true t 0 false f 1' |
| TH_BOOL_INVALID='123 123.0 invalid' |
| TH_FLOAT_VALID='-1234.0 -1.0 -.123 0.0 0. .123 1.0 1234.0' |
| TH_FLOAT_INVALID='true false 1.2.3 -1.2.3 ""' |
| TH_INT_VALID='-1234 -1 0 1 1234' |
| TH_INT_INVALID='true false -1.0 -.123 0.0 .123 1.0 ""' |
| |
| # |
| # test helper functions |
| # |
| |
| # message functions |
| th_trace() { echo "test:TRACE $@" >&2; } |
| th_debug() { echo "test:DEBUG $@" >&2; } |
| th_info() { echo "test:INFO $@" >&2; } |
| th_warn() { echo "test:WARN $@" >&2; } |
| th_error() { echo "test:ERROR $@" >&2; } |
| th_fatal() { echo "test:FATAL $@" >&2; } |
| |
| th_oneTimeSetUp() |
| { |
| # load shFlags |
| [ -n "${ZSH_VERSION:-}" ] && FLAGS_PARENT=$0 |
| . ${TH_SHFLAGS} |
| |
| # these files will be cleaned up automatically by shUnit2 |
| tmpDir=${SHUNIT_TMPDIR} |
| stdoutF="${tmpDir}/stdout" |
| stderrF="${tmpDir}/stderr" |
| returnF="${tmpDir}/return" |
| expectedF="${tmpDir}/expected" |
| } |
| |
| th_showOutput() |
| { |
| _th_rtrn=$1 |
| _th_stdout=$2 |
| _th_stderr=$3 |
| |
| isSkipping |
| if [ $? -eq ${SHUNIT_FALSE} -a ${_th_rtrn} != ${FLAGS_TRUE} ]; then |
| if [ -n "${_th_stdout}" -a -s "${_th_stdout}" ]; then |
| echo '>>> STDOUT' >&2 |
| cat "${_th_stdout}" >&2 |
| fi |
| if [ -n "${_th_stderr}" -a -s "${_th_stderr}" ]; then |
| echo '>>> STDERR' >&2 |
| cat "${_th_stderr}" >&2 |
| fi |
| if [ -n "${_th_stdout}" -o -n "${_th_stderr}" ]; then |
| echo '<<< end output' >&2 |
| fi |
| fi |
| |
| unset _th_rtrn _th_stdout _th_stderr |
| } |
| |
| # Some shells, zsh on Solaris in particular, return immediately from a sub-shell |
| # when a non-zero return value is encountered. To properly catch these values, |
| # they are either written to disk, or recognized as an error the file is empty. |
| th_clearReturn() { cp /dev/null "${returnF}"; } |
| th_queryReturn() |
| { |
| if [ -s "${returnF}" ]; then |
| th_return=`cat "${returnF}"` |
| else |
| th_return=${SHUNIT_ERROR} |
| fi |
| } |
| |
| _th_assertMsg() |
| { |
| _th_alert_type_=$1 |
| _th_alert_msg_=$2 |
| _th_msg_=$3 |
| |
| case ${_th_alert_type_} in |
| WARN) _th_alert_str_='a warning' ;; |
| ERROR) _th_alert_str_='an error' ;; |
| FATAL) _th_alert_str_='a fatal' ;; |
| esac |
| [ -z "${_th_alert_msg_}" ] && _th_alert_msg_='.*' |
| [ -n "${_th_msg_}" ] && _th_msg_="(${_th_msg_}) " |
| |
| grep -- "^flags:${_th_alert_type_} ${_th_alert_msg_}" "${stderrF}" \ |
| >/dev/null |
| assertTrue \ |
| "FLAGS ${_th_msg_}failure did not generate ${_th_alert_str_} message" $? |
| |
| unset _th_alert_type_ _th_alert_msg_ _th_alert_str_ _th_msg_ |
| } |
| |
| assertWarnMsg() { _th_assertMsg 'WARN' "${1:-}" "${2:-}"; } |
| assertErrorMsg() { _th_assertMsg 'ERROR' "${1:-}" "${2:-}"; } |
| assertFatalMsg() { _th_assertMsg 'FATAL' "${1:-}" "${2:-}"; } |