diff options
author | kate.ward <kate.ward@forestent.com> | 2008-11-03 20:58:42 +0000 |
---|---|---|
committer | kate.ward <kate.ward@forestent.com> | 2008-11-03 20:58:42 +0000 |
commit | 38097679248e37eb907ce0c8b3e09f47d729d857 (patch) | |
tree | 2c4c5e8e2f1b6f07e99ae2d6ff7d8a2096a6a9e1 /source/1.0/lib | |
parent | 713fd9e903e751b181f3e59990a04bdabf405bbe (diff) | |
download | shflags-38097679248e37eb907ce0c8b3e09f47d729d857.tar.gz |
upgraded shunit2 from 2.1.4 to 2.1.5
Diffstat (limited to 'source/1.0/lib')
-rw-r--r-- | source/1.0/lib/shunit2 | 492 |
1 files changed, 284 insertions, 208 deletions
diff --git a/source/1.0/lib/shunit2 b/source/1.0/lib/shunit2 index eef19d4..d900a70 100644 --- a/source/1.0/lib/shunit2 +++ b/source/1.0/lib/shunit2 @@ -1,4 +1,4 @@ -# $Id: shunit2 189 2008-07-11 11:46:54Z kate.ward@forestent.com $ +# $Id: shunit2 277 2008-10-29 21:20:22Z kate.ward@forestent.com $ # vim:et:ft=sh:sts=2:sw=2 # vim:foldmethod=marker:foldmarker=/**,*/ # @@ -6,28 +6,28 @@ # <?xml version="1.0" encoding="UTF-8"?> # <s:shelldoc xmlns:s="http://www.forestent.com/projects/shelldoc/xsl/2005.0"> # <s:header> -# shUnit 2.1.4 +# shUnit 2.1.5 # Shell Unit Test Framework # -# http://shunit2.sourceforge.net/ +# http://shunit2.googlecode.com/ # # written by Kate Ward <kate.ward@forestent.com> # released under the LGPL # -# this module implements a xUnit based unit test framework similar to JUnit +# This module implements a xUnit based unit test framework similar to JUnit. # </s:header> #*/ -SHUNIT_VERSION='2.1.4' - -_shunit_warn() { echo "shunit2:WARN $@" >&2; } -_shunit_error() { echo "shunit2:ERROR $@" >&2; } -_shunit_fatal() { echo "shunit2:FATAL $@" >&2; } +SHUNIT_VERSION='2.1.5' SHUNIT_TRUE=0 SHUNIT_FALSE=1 SHUNIT_ERROR=2 +_shunit_warn() { echo "shunit2:WARN $@" >&2; } +_shunit_error() { echo "shunit2:ERROR $@" >&2; } +_shunit_fatal() { echo "shunit2:FATAL $@" >&2; } + # specific shell checks if [ -n "${ZSH_VERSION:-}" ]; then setopt |grep "^shwordsplit$" >/dev/null @@ -42,17 +42,6 @@ if [ -n "${ZSH_VERSION:-}" ]; then fi fi -# shell flags for shunit2: -# u - treat unset variables as an error when performing parameter expansion -__SHUNIT_SHELL_FLAGS='u' - -# save the current set of shell flags, and then set some for ourself -shunit_shellFlags_="$-" -for shunit_shellFlag_ in `echo "${__SHUNIT_SHELL_FLAGS}" |sed 's/\(.\)/\1 /g'` -do - set -${shunit_shellFlag_} -done - # # constants # @@ -61,35 +50,41 @@ __SHUNIT_ASSERT_MSG_PREFIX='ASSERT:' __SHUNIT_PARENT=${SHUNIT_PARENT:-$0} # set the constants readonly -shunit_constants_=`set |grep "^__SHUNIT_" |cut -d= -f1` -echo "${shunit_constants_}" |grep "^Binary file" >/dev/null -if [ $? -eq 0 ]; then - # deal with binary junk in 'set' output - shunit_constants_=`set |grep -a "^__SHUNIT_" |cut -d= -f1` -fi -for shunit_const_ in ${shunit_constants_}; do +shunit_constants_=`set |grep '^__SHUNIT_' |cut -d= -f1` +echo "${shunit_constants_}" |grep '^Binary file' >/dev/null \ + && shunit_constants_=`set |grep -a '^__SHUNIT_' |cut -d= -f1` +for shunit_constant_ in ${shunit_constants_}; do shunit_ro_opts_='' - if [ -n "${ZSH_VERSION:-}" ]; then - case ${ZSH_VERSION} in - [123].*) ;; - *) shunit_ro_opts_='-g' ;; # declare readonly constants globally - esac - fi - readonly ${shunit_ro_opts_} ${shunit_const_} + case ${ZSH_VERSION:-} in + '') ;; # this isn't zsh + [123].*) ;; # early versions (1.x, 2.x, 3.x) + *) shunit_ro_opts_='-g' ;; # all later versions. declare readonly globally + esac + readonly ${shunit_ro_opts_} ${shunit_constant_} done -unset shunit_const_ shunit_constants_ shunit_ro_opts_ +unset shunit_constant_ shunit_constants_ shunit_ro_opts_ # variables __shunit_skip=${SHUNIT_FALSE} __shunit_suite='' +# counts of tests +__shunit_testSuccess=${SHUNIT_TRUE} +__shunit_testsTotal=0 __shunit_testsPassed=0 __shunit_testsFailed=0 -__shunit_testsSkipped=0 -__shunit_testsTotal=0 + +# counts of asserts +__shunit_assertsTotal=0 +__shunit_assertsPassed=0 +__shunit_assertsFailed=0 +__shunit_assertsSkipped=0 + +__shunit_lineno='' +__shunit_reportGenerated=${SHUNIT_FALSE} # macros -_SHUNIT_LINENO_='eval if [ "${1:-}" = "--lineno" ]; then [ -n "$2" ] && shunit_message_="[$2]"; shift 2; fi' +_SHUNIT_LINENO_='eval __shunit_lineno=""; if [ "${1:-}" = "--lineno" ]; then [ -n "$2" ] && __shunit_lineno="[$2] "; shift 2; fi' #----------------------------------------------------------------------------- # assert functions @@ -119,12 +114,13 @@ assertEquals() { ${_SHUNIT_LINENO_} if [ $# -lt 2 -o $# -gt 3 ]; then - _shunit_error 'assertEquals() requires one or two arguments' + _shunit_error "assertEquals() requires two or three arguments; $# given" + _shunit_error "1: ${1:+$1} 2: ${2:+$2} 3: ${3:+$3}" return ${SHUNIT_ERROR} fi _shunit_shouldSkip && return ${SHUNIT_TRUE} - [ -z "${shunit_message_:-}" ] && shunit_message_='' + shunit_message_=${__shunit_lineno} if [ $# -eq 3 ]; then shunit_message_="${shunit_message_}$1" shift @@ -134,13 +130,13 @@ assertEquals() shunit_return=${SHUNIT_TRUE} if [ "${shunit_expected_}" = "${shunit_actual_}" ]; then - _shunit_testPassed + _shunit_assertPass else failNotEquals "${shunit_message_}" "${shunit_expected_}" "${shunit_actual_}" shunit_return=${SHUNIT_FALSE} fi - unset shunit_message_ shunit_expected_ shunit_actual_ __shunit_lineno + unset shunit_message_ shunit_expected_ shunit_actual_ return ${shunit_return} } _ASSERT_EQUALS_='eval assertEquals --lineno "${LINENO:-}"' @@ -153,6 +149,56 @@ _ASSERT_EQUALS_='eval assertEquals --lineno "${LINENO:-}"' # <entry> # <funcsynopsis> # <funcprototype> +# <funcdef><function>assertNotEquals</function></funcdef> +# <paramdef>string <parameter>[message]</parameter></paramdef> +# <paramdef>string <parameter>unexpected</parameter></paramdef> +# <paramdef>string <parameter>actual</parameter></paramdef> +# </funcprototype> +# </funcsynopsis> +# <para>Asserts that <emphasis>unexpected</emphasis> and +# <emphasis>actual</emphasis> are <emphasis role="strong">not</emphasis> +# equal to one another. The message is optional.</para> +# </entry> +# </s:function> +#*/ +assertNotEquals() +{ + ${_SHUNIT_LINENO_} + if [ $# -lt 2 -o $# -gt 3 ]; then + _shunit_error "assertNotEquals() requires two or three arguments; $# given" + return ${SHUNIT_ERROR} + fi + _shunit_shouldSkip && return ${SHUNIT_TRUE} + + shunit_message_=${__shunit_lineno} + if [ $# -eq 3 ]; then + shunit_message_="${shunit_message_}$1" + shift + fi + shunit_unexpected_=$1 + shunit_actual_=$2 + + shunit_return=${SHUNIT_TRUE} + if [ "${shunit_unexpected_}" != "${shunit_actual_}" ]; then + _shunit_assertPass + else + failSame "${shunit_message_}" "$@" + shunit_return=${SHUNIT_FALSE} + fi + + unset shunit_message_ shunit_unexpected_ shunit_actual_ + return ${shunit_return} +} +_ASSERT_NOT_EQUALS_='eval assertNotEquals --lineno "${LINENO:-}"' + +#/** +# <s:function group="asserts"> +# <entry align="right"> +# <emphasis>void</emphasis> +# </entry> +# <entry> +# <funcsynopsis> +# <funcprototype> # <funcdef><function>assertNull</function></funcdef> # <paramdef>string <parameter>[message]</parameter></paramdef> # <paramdef>string <parameter>value</parameter></paramdef> @@ -167,21 +213,21 @@ assertNull() { ${_SHUNIT_LINENO_} if [ $# -lt 1 -o $# -gt 2 ]; then - _shunit_error 'assertNull() requires one or two arguments' + _shunit_error "assertNull() requires one or two arguments; $# given" return ${SHUNIT_ERROR} fi _shunit_shouldSkip && return ${SHUNIT_TRUE} - [ -z "${shunit_message_:-}" ] && shunit_message_='' + shunit_message_=${__shunit_lineno} if [ $# -eq 2 ]; then shunit_message_="${shunit_message_}$1" shift fi - if [ $# -eq 2 ]; then - assertTrue "${shunit_message_}$1" "[ -z '$2' ]" - else - assertTrue "[ -z '$1' ]" - fi + assertTrue "${shunit_message_}" "[ -z '$1' ]" + shunit_return=$? + + unset shunit_message_ + return ${shunit_return} } _ASSERT_NULL_='eval assertNull --lineno "${LINENO:-}"' @@ -208,16 +254,21 @@ assertNotNull() { ${_SHUNIT_LINENO_} if [ $# -gt 2 ]; then # allowing 0 arguments as $1 might actually be null - _shunit_error 'assertNotNull() requires one or two arguments' + _shunit_error "assertNotNull() requires one or two arguments; $# given" return ${SHUNIT_ERROR} fi _shunit_shouldSkip && return ${SHUNIT_TRUE} + shunit_message_=${__shunit_lineno} if [ $# -eq 2 ]; then - assertTrue "$1" "[ -n '$2' ]" - else - assertTrue "[ -n '${1:-}' ]" + shunit_message_="${shunit_message_}$1" + shift fi + assertTrue "${shunit_message_}" "[ -n '${1:-}' ]" + shunit_return=$? + + unset shunit_message_ + return ${shunit_return} } _ASSERT_NOT_NULL_='eval assertNotNull --lineno "${LINENO:-}"' @@ -244,16 +295,21 @@ assertSame() { ${_SHUNIT_LINENO_} if [ $# -lt 2 -o $# -gt 3 ]; then - _shunit_error 'assertSame() requires one or two arguments' + _shunit_error "assertSame() requires one or two arguments; $# given" return ${SHUNIT_ERROR} fi _shunit_shouldSkip && return ${SHUNIT_TRUE} - if [ $# -eq 2 ]; then - assertEquals "$1" "$2" - else - assertEquals "$1" "$2" "$3" + shunit_message_=${__shunit_lineno} + if [ $# -eq 3 ]; then + shunit_message_="${shunit_message_}$1" + shift fi + assertEquals "${shunit_message_}" "$1" "$2" + shunit_return=$? + + unset shunit_message_ + return ${shunit_return} } _ASSERT_SAME_='eval assertSame --lineno "${LINENO:-}"' @@ -281,28 +337,20 @@ assertNotSame() { ${_SHUNIT_LINENO_} if [ $# -lt 2 -o $# -gt 3 ]; then - _shunit_error 'assertNotSame() requires two or three arguments' + _shunit_error "assertNotSame() requires two or three arguments; $# given" return ${SHUNIT_ERROR} fi _shunit_shouldSkip && return ${SHUNIT_TRUE} - [ -z "${shunit_message_:-}" ] && shunit_message_='' + shunit_message_=${__shunit_lineno} if [ $# -eq 3 ]; then - shunit_message_="${shunit_message_}$1" + shunit_message_="${shunit_message_:-}$1" shift fi - shunit_unexpected_=$1 - shunit_actual_=$2 + assertNotEquals "${shunit_message_}" "$1" "$2" + shunit_return=$? - shunit_return=${SHUNIT_TRUE} - if [ "${shunit_unexpected_}" != "${shunit_actual_}" ]; then - _shunit_testPassed - else - failSame "${shunit_message_}" "$@" - shunit_return=${SHUNIT_FALSE} - fi - - unset shunit_message_ shunit_unexpected_ shunit_actual_ + unset shunit_message_ return ${shunit_return} } _ASSERT_NOT_SAME_='eval assertNotSame --lineno "${LINENO:-}"' @@ -338,12 +386,12 @@ assertTrue() { ${_SHUNIT_LINENO_} if [ $# -gt 2 ]; then - _shunit_error 'assertTrue() takes one two arguments' + _shunit_error "assertTrue() takes one two arguments; $# given" return ${SHUNIT_ERROR} fi _shunit_shouldSkip && return ${SHUNIT_TRUE} - [ -z "${shunit_message_:-}" ] && shunit_message_='' + shunit_message_=${__shunit_lineno} if [ $# -eq 2 ]; then shunit_message_="${shunit_message_}$1" shift @@ -367,9 +415,9 @@ assertTrue() # record the test if [ ${shunit_return} -eq ${SHUNIT_TRUE} ]; then - _shunit_testPassed + _shunit_assertPass else - _shunit_testFailed "${shunit_message_}" + _shunit_assertFail "${shunit_message_}" fi unset shunit_message_ shunit_condition_ shunit_match_ @@ -408,12 +456,12 @@ assertFalse() { ${_SHUNIT_LINENO_} if [ $# -lt 1 -o $# -gt 2 ]; then - _shunit_error 'assertFalse() quires one or two arguments' + _shunit_error "assertFalse() quires one or two arguments; $# given" return ${SHUNIT_ERROR} fi _shunit_shouldSkip && return ${SHUNIT_TRUE} - [ -z "${shunit_message_:-}" ] && shunit_message_='' + shunit_message_=${__shunit_lineno} if [ $# -eq 2 ]; then shunit_message_="${shunit_message_}$1" shift @@ -437,9 +485,9 @@ assertFalse() # record the test if [ ${shunit_return} -eq ${SHUNIT_TRUE} ]; then - _shunit_testPassed + _shunit_assertPass else - _shunit_testFailed "${shunit_message_}" + _shunit_assertFail "${shunit_message_}" fi unset shunit_message_ shunit_condition_ shunit_match_ @@ -471,18 +519,18 @@ fail() { ${_SHUNIT_LINENO_} if [ $# -gt 1 ]; then - _shunit_error 'fail() requires one or two arguments' + _shunit_error "fail() requires one or two arguments; $# given" return ${SHUNIT_ERROR} fi _shunit_shouldSkip && return ${SHUNIT_TRUE} - [ -z "${shunit_message_:-}" ] && shunit_message_='' + shunit_message_=${__shunit_lineno} if [ $# -eq 1 ]; then shunit_message_="${shunit_message_}$1" shift fi - _shunit_testFailed "${shunit_message_}" + _shunit_assertFail "${shunit_message_}" unset shunit_message_ return ${SHUNIT_FALSE} @@ -513,12 +561,12 @@ failNotEquals() { ${_SHUNIT_LINENO_} if [ $# -lt 2 -o $# -gt 3 ]; then - _shunit_error 'failNotEquals() requires one or two arguments' + _shunit_error "failNotEquals() requires one or two arguments; $# given" return ${SHUNIT_ERROR} fi _shunit_shouldSkip && return ${SHUNIT_TRUE} - [ -z "${shunit_message_:-}" ] && shunit_message_='' + shunit_message_=${__shunit_lineno} if [ $# -eq 3 ]; then shunit_message_="${shunit_message_}$1" shift @@ -526,7 +574,7 @@ failNotEquals() shunit_unexpected_=$1 shunit_actual_=$2 - _shunit_testFailed "${shunit_message_:+${shunit_message_} }expected:<${shunit_unexpected_}> but was:<${shunit_actual_}>" + _shunit_assertFail "${shunit_message_:+${shunit_message_} }expected:<${shunit_unexpected_}> but was:<${shunit_actual_}>" unset shunit_message_ shunit_unexpected_ shunit_actual_ return ${SHUNIT_FALSE} @@ -545,8 +593,8 @@ _FAIL_NOT_EQUALS_='eval failNotEquals --lineno "${LINENO:-}"' # <paramdef>string <parameter>[message]</parameter></paramdef> # </funcprototype> # </funcsynopsis> -# <para>Indicate test failure because arguments were not the same. The -# message is optional.</para> +# <para>Indicate test failure because arguments were the same. The message is +# optional.</para> # </entry> # </s:function> #*/ @@ -554,18 +602,18 @@ failSame() { ${_SHUNIT_LINENO_} if [ $# -lt 2 -o $# -gt 3 ]; then - _shunit_error 'failSame() requires two or three arguments' + _shunit_error "failSame() requires two or three arguments; $# given" return ${SHUNIT_ERROR} fi _shunit_shouldSkip && return ${SHUNIT_TRUE} - [ -z "${shunit_message_:-}" ] && shunit_message_='' + shunit_message_=${__shunit_lineno} if [ $# -eq 3 ]; then shunit_message_="${shunit_message_}$1" shift fi - _shunit_testFailed "${shunit_message_:+${shunit_message_} }expected not same" + _shunit_assertFail "${shunit_message_:+${shunit_message_} }expected not same" unset shunit_message_ return ${SHUNIT_FALSE} @@ -586,9 +634,8 @@ _FAIL_SAME_='eval failSame --lineno "${LINENO:-}"' # <paramdef>string <parameter>actual</parameter></paramdef> # </funcprototype> # </funcsynopsis> -# <para>Fails the test if <emphasis>expected</emphasis> and -# <emphasis>actual</emphasis> are equal to one another. The message is -# optional.</para> +# <para>Indicate test failure because arguments were not the same. The +# message is optional.</para> # </entry> # </s:function> #*/ @@ -596,16 +643,21 @@ failNotSame() { ${_SHUNIT_LINENO_} if [ $# -lt 2 -o $# -gt 3 ]; then - _shunit_error 'failNotEquals() requires one or two arguments' + _shunit_error "failNotEquals() requires one or two arguments; $# given" return ${SHUNIT_ERROR} fi _shunit_shouldSkip && return ${SHUNIT_TRUE} - if [ $# -eq 2 ]; then - failNotEquals "$1" "$2" - else - failNotEquals "$1" "$2" "$3" + shunit_message_=${__shunit_lineno} + if [ $# -eq 3 ]; then + shunit_message_="${shunit_message_}$1" + shift fi + failNotEquals "${shunit_message_}" "$1" "$2" + shunit_return=$? + + unset shunit_message_ + return ${shunit_return} } _FAIL_NOT_SAME_='eval failNotSame --lineno "${LINENO:-}"' @@ -728,11 +780,12 @@ isSkipping() #*/ suite_addTest() { - _su_func=${1:-} + shunit_func_=${1:-} - __shunit_suite="${__shunit_suite:+${__shunit_suite} }${_su_func}" + __shunit_suite="${__shunit_suite:+${__shunit_suite} }${shunit_func_}" + __shunit_testsTotal=`expr ${__shunit_testsTotal} + 1` - unset _su_func + unset shunit_func_ } #/** @@ -827,17 +880,61 @@ suite_addTest() # internal shUnit2 functions # +# this function is a cross-platform temporary directory creation tool. not all +# OSes have the mktemp function, so one is included here. +_shunit_mktempDir() +{ + # try the standard mktemp function + ( exec mktemp -dqt shunit.XXXXXX 2>/dev/null ) && return + + # the standard mktemp didn't work. doing our own. + if [ -r '/dev/urandom' ]; then + _shunit_random_=`od -vAn -N4 -tx4 </dev/urandom |sed 's/^[^0-9a-f]*//'` + elif [ -n "${RANDOM:-}" ]; then + # $RANDOM works + _shunit_random_=${RANDOM}${RANDOM}${RANDOM}$$ + else + # $RANDOM doesn't work + _shunit_date_=`date '+%Y%m%d%H%M%S'` + _shunit_random_=`expr ${_shunit_date_} / $$` + fi + + _shunit_tmpDir_="${TMPDIR:-/tmp}/shunit.${_shunit_random_}" + ( umask 077 && mkdir "${_shunit_tmpDir_}" ) || { + _shunit_fatal 'could not create temporary directory! exiting' + exit ${SHUNIT_FALSE} + } + + echo ${_shunit_tmpDir_} + unset _shunit_date_ _shunit_random_ _shunit_tmpDir_ +} + +# this function is here to work around issues in Cygwin +_shunit_mktempFunc() +{ + for _shunit_func_ in oneTimeSetUp oneTimeTearDown setUp tearDown suite; do + _shunit_file_="${__shunit_tmpDir}/${_shunit_func_}" + cat <<EOF >"${_shunit_file_}" +#! /bin/sh +exit ${SHUNIT_TRUE} +EOF + chmod +x "${_shunit_file_}" + done + + unset _shunit_file_ +} + _shunit_cleanup() { - name=$1 + _shunit_name_=$1 - case ${name} in - EXIT) signal=0 ;; - INT) signal=2 ;; - TERM) signal=15 ;; + case ${_shunit_name_} in + EXIT) _shunit_signal_=0 ;; + INT) _shunit_signal_=2 ;; + TERM) _shunit_signal_=15 ;; *) - _shunit_warn "unrecognized trap value (${name})" - signal=0 + _shunit_warn "unrecognized trap value (${_shunit_name_})" + _shunit_signal_=0 ;; esac @@ -845,22 +942,27 @@ _shunit_cleanup() rm -fr "${__shunit_tmpDir}" # exit for all non-EXIT signals - if [ ${name} != 'EXIT' ]; then - _shunit_warn "trapped and now handling the (${name}) signal" - _shunit_generateReport + if [ ${_shunit_name_} != 'EXIT' ]; then + _shunit_warn "trapped and now handling the (${_shunit_name_}) signal" # disable EXIT trap trap 0 # add 128 to signal and exit - exit `expr ${signal} + 128` + exit `expr ${_shunit_signal_} + 128` + elif [ ${__shunit_reportGenerated} -eq ${SHUNIT_FALSE} ] ; then + _shunit_assertFail 'Unknown failure encountered running a test' + _shunit_generateReport + exit ${SHUNIT_ERROR} fi + + unset _shunit_name_ _shunit_signal_ } +# The actual running of the tests happens here. _shunit_execSuite() { - echo '#' - echo '# Performing tests' - echo '#' - for _su_func in ${__shunit_suite}; do + for _shunit_test_ in ${__shunit_suite}; do + __shunit_testSuccess=${SHUNIT_TRUE} + # disable skipping endSkipping @@ -868,120 +970,94 @@ _shunit_execSuite() setUp # execute the test - echo "${_su_func}" - eval ${_su_func} + echo "${_shunit_test_}" + eval ${_shunit_test_} # execute the per-test tear-down function tearDown + + # update stats + if [ ${__shunit_testSuccess} -eq ${SHUNIT_TRUE} ]; then + __shunit_testsPassed=`expr ${__shunit_testsPassed} + 1` + else + __shunit_testsFailed=`expr ${__shunit_testsFailed} + 1` + fi done - unset _su_func + unset _shunit_test_ } +# This function exits shUnit2 with the appropriate error code and OK/FAILED +# message. _shunit_generateReport() { - _su__awkPercent='{printf("%4d %3.0f%%", $1, $1*100/$2)}' - if [ ${__shunit_testsTotal:-0} -gt 0 ]; then - _su__passed=`echo ${__shunit_testsPassed} ${__shunit_testsTotal} |\ - awk "${_su__awkPercent}"` - _su__failed=`echo ${__shunit_testsFailed} ${__shunit_testsTotal} |\ - awk "${_su__awkPercent}"` - _su__skipped=`echo ${__shunit_testsSkipped} ${__shunit_testsTotal} |\ - awk "${_su__awkPercent}"` - _su__total=`echo ${__shunit_testsTotal} 100 |\ - awk '{printf("%4d %3d%%", $1, $2)}'` - else - _su__passed=`echo 0 0 |awk '{printf("%4d %3d%%", $1, $2)}'` - _su__failed=${_su__passed} - _su__skipped=${_su__passed} - _su__total=${_su__passed} - fi - - cat <<EOF + _shunit_ok_=${SHUNIT_TRUE} -# -# Test report -# -tests passed: ${_su__passed} -tests failed: ${_su__failed} -tests skipped: ${_su__skipped} -tests total: ${_su__total} -EOF - - unset _su__awkPercent _su__passed _su__failed _su__skipped _su__total -} - -# this function is a cross-platform temporary directory creation tool. not all -# OSes have the mktemp function, so one is included here. -_shunit_mktempDir() -{ - # try the standard mktemp function - ( exec mktemp -dqt shunit.XXXXXX 2>/dev/null ) && return + # if no exit code was provided one, determine an appropriate one + [ ${__shunit_testsFailed} -gt 0 \ + -o ${__shunit_testSuccess} -eq ${SHUNIT_FALSE} ] \ + && _shunit_ok_=${SHUNIT_FALSE} - # the standard mktemp didn't work. doing our own. - if [ -r '/dev/urandom' ]; then - _su__random=`od -vAn -N4 -tx4 </dev/urandom |sed 's/^[^0-9a-f]*//'` - elif [ -n "${RANDOM:-}" ]; then - # $RANDOM works - _su__random=${RANDOM}${RANDOM}${RANDOM}$$ + echo + if [ ${__shunit_testsTotal} -eq 1 ]; then + echo "Ran ${__shunit_testsTotal} test." else - # $RANDOM doesn't work - _su__date=`date '+%Y%m%d%H%M%S'` - _su__random=`expr ${_su__date} / $$` + echo "Ran ${__shunit_testsTotal} tests." fi - _su__tmpDir="${TMPDIR:-/tmp}/shunit.${_su__random}" - ( umask 077 && mkdir "${_su__tmpDir}" ) || { - echo 'shUnit:FATAL could not create temporary directory! exiting' >&2 - exit 1 - } - - echo ${_su__tmpDir} - unset _su__date _su__random _su__tmpDir -} + _shunit_failures_='' + _shunit_skipped_='' + [ ${__shunit_assertsFailed} -gt 0 ] \ + && _shunit_failures_="failures=${__shunit_assertsFailed}" + [ ${__shunit_assertsSkipped} -gt 0 ] \ + && _shunit_skipped_="skipped=${__shunit_assertsSkipped}" + + if [ ${_shunit_ok_} -eq ${SHUNIT_TRUE} ]; then + _shunit_msg_='OK' + [ -n "${_shunit_skipped_}" ] \ + && _shunit_msg_="${_shunit_msg_} (${_shunit_skipped_})" + else + _shunit_msg_="FAILED (${_shunit_failures_}" + [ -n "${_shunit_skipped_}" ] \ + && _shunit_msg_="${_shunit_msg_},${_shunit_skipped_}" + _shunit_msg_="${_shunit_msg_})" + fi -# this function is here to work around issues in Cygwin -_shunit_mktempFunc() -{ - for _su__func in oneTimeSetUp oneTimeTearDown setUp tearDown suite; do - _su__file="${__shunit_tmpDir}/${_su__func}" - cat <<EOF >"${_su__file}" -#! /bin/sh -exit 0 -EOF - chmod +x "${_su__file}" - done + echo + echo ${_shunit_msg_} + __shunit_reportGenerated=${SHUNIT_TRUE} - unset _su__file + unset _shunit_failures_ _shunit_msg_ _shunit_ok_ _shunit_skipped_ } _shunit_shouldSkip() { [ ${__shunit_skip} -eq ${SHUNIT_FALSE} ] && return ${SHUNIT_FALSE} - _shunit_testSkipped + _shunit_assertSkip } -_shunit_testPassed() +_shunit_assertPass() { - __shunit_testsPassed=`expr ${__shunit_testsPassed} + 1` - __shunit_testsTotal=`expr ${__shunit_testsTotal} + 1` + __shunit_assertsPassed=`expr ${__shunit_assertsPassed} + 1` + __shunit_assertsTotal=`expr ${__shunit_assertsTotal} + 1` } -_shunit_testFailed() +_shunit_assertFail() { - _su__msg=$1 + _shunit_msg_=$1 - __shunit_testsFailed=`expr ${__shunit_testsFailed} + 1` - __shunit_testsTotal=`expr ${__shunit_testsTotal} + 1` - echo "${__SHUNIT_ASSERT_MSG_PREFIX}${_su__msg}" >&2 + __shunit_testSuccess=${SHUNIT_FALSE} + __shunit_assertsFailed=`expr ${__shunit_assertsFailed} + 1` + __shunit_assertsTotal=`expr ${__shunit_assertsTotal} + 1` + echo "${__SHUNIT_ASSERT_MSG_PREFIX}${_shunit_msg_}" - unset _su__msg + unset _shunit_msg_ } -_shunit_testSkipped() +_shunit_assertSkip() { - __shunit_testsSkipped=`expr ${__shunit_testsSkipped} + 1` - __shunit_testsTotal=`expr ${__shunit_testsTotal} + 1` + __shunit_assertsSkipped=`expr ${__shunit_assertsSkipped} + 1` + __shunit_assertsTotal=`expr ${__shunit_assertsTotal} + 1` } #------------------------------------------------------------------------------ @@ -991,6 +1067,11 @@ _shunit_testSkipped() # create a temporary storage location __shunit_tmpDir=`_shunit_mktempDir` +# provide a public temporary directory for unit test scripts +# TODO(kward): document this +shunit_tmpDir="${__shunit_tmpDir}/tmp" +mkdir "${shunit_tmpDir}" + # setup traps to clean up after ourselves trap '_shunit_cleanup EXIT' 0 trap '_shunit_cleanup INT' 2 @@ -1023,17 +1104,12 @@ _shunit_execSuite # execute the oneTimeTearDown function (if it exists) oneTimeTearDown -# generate report +# generate the report _shunit_generateReport -# restore the previous set of shell flags -for shunit_shellFlag_ in ${__SHUNIT_SHELL_FLAGS}; do - echo ${shunit_shellFlags_} |grep ${shunit_shellFlag_} >/dev/null \ - || set +${shunit_shellFlag_} -done -unset shunit_shellFlag_ shunit_shellFlags_ - -[ ${__shunit_testsFailed} -eq 0 ] || exit 1 +# that's it folks +[ ${__shunit_testsFailed} -eq 0 ] +exit $? #/** # </s:shelldoc> |