# $Id$ # vim:et:ft=sh:sts=2:sw=2 # # Copyright 2008 Kate Ward. All Rights Reserved. # Released under the LGPL (GNU Lesser General Public License) # # Author: kate.ward@forestent.com (Kate Ward) # # 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 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:-}"; }