⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shunit2

📁 unified configuration interface. small configuration library for programs written in c, can be used
💻
📖 第 1 页 / 共 2 页
字号:
# $Id: shunit2 189 2008-07-11 11:46:54Z kate.ward@forestent.com $# vim:et:ft=sh:sts=2:sw=2# vim:foldmethod=marker:foldmarker=/**,*/##/**# <?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# Shell Unit Test Framework## http://shunit2.sourceforge.net/## written by Kate Ward &lt;kate.ward@forestent.com&gt;# released under the LGPL## 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_TRUE=0SHUNIT_FALSE=1SHUNIT_ERROR=2# specific shell checksif [ -n "${ZSH_VERSION:-}" ]; then  setopt |grep "^shwordsplit$" >/dev/null  if [ $? -ne ${SHUNIT_TRUE} ]; then    _shunit_fatal 'zsh shwordsplit option is required for proper operation'    exit ${SHUNIT_ERROR}  fi  if [ -z "${SHUNIT_PARENT:-}" ]; then    _shunit_fatal "zsh does not pass \$0 through properly. please declare \\"SHUNIT_PARENT=\$0\" before calling shUnit2"    exit ${SHUNIT_ERROR}  fifi# 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 ourselfshunit_shellFlags_="$-"for shunit_shellFlag_ in `echo "${__SHUNIT_SHELL_FLAGS}" |sed 's/\(.\)/\1 /g'`do  set -${shunit_shellFlag_}done## constants#__SHUNIT_ASSERT_MSG_PREFIX='ASSERT:'__SHUNIT_PARENT=${SHUNIT_PARENT:-$0}# set the constants readonlyshunit_constants_=`set |grep "^__SHUNIT_" |cut -d= -f1`echo "${shunit_constants_}" |grep "^Binary file" >/dev/nullif [ $? -eq 0 ]; then  # deal with binary junk in 'set' output  shunit_constants_=`set |grep -a "^__SHUNIT_" |cut -d= -f1`fifor shunit_const_ 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_}doneunset shunit_const_ shunit_constants_ shunit_ro_opts_# variables__shunit_skip=${SHUNIT_FALSE}__shunit_suite=''__shunit_testsPassed=0__shunit_testsFailed=0__shunit_testsSkipped=0__shunit_testsTotal=0# macros_SHUNIT_LINENO_='eval if [ "${1:-}" = "--lineno" ]; then [ -n "$2" ] && shunit_message_="[$2]"; shift 2; fi'#-----------------------------------------------------------------------------# assert functions##/**# <s:function group="asserts"># <entry align="right">#   <emphasis>void</emphasis># </entry># <entry>#   <funcsynopsis>#     <funcprototype>#       <funcdef><function>assertEquals</function></funcdef>#       <paramdef>string <parameter>[message]</parameter></paramdef>#       <paramdef>string <parameter>expected</parameter></paramdef>#       <paramdef>string <parameter>actual</parameter></paramdef>#     </funcprototype>#   </funcsynopsis>#   <para>Asserts that <emphasis>expected</emphasis> and#   <emphasis>actual</emphasis> are equal to one another. The message is#   optional.</para># </entry># </s:function>#*/assertEquals(){  ${_SHUNIT_LINENO_}  if [ $# -lt 2 -o $# -gt 3 ]; then    _shunit_error 'assertEquals() requires one or two arguments'    return ${SHUNIT_ERROR}  fi  _shunit_shouldSkip && return ${SHUNIT_TRUE}  [ -z "${shunit_message_:-}" ] && shunit_message_=''  if [ $# -eq 3 ]; then    shunit_message_="${shunit_message_}$1"    shift  fi  shunit_expected_=$1  shunit_actual_=$2  shunit_return=${SHUNIT_TRUE}  if [ "${shunit_expected_}" = "${shunit_actual_}" ]; then    _shunit_testPassed  else    failNotEquals "${shunit_message_}" "${shunit_expected_}" "${shunit_actual_}"    shunit_return=${SHUNIT_FALSE}  fi  unset shunit_message_ shunit_expected_ shunit_actual_ __shunit_lineno  return ${shunit_return}}_ASSERT_EQUALS_='eval assertEquals --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>#     </funcprototype>#   </funcsynopsis>#   <para>Asserts that <emphasis>value</emphasis> is <literal>null</literal>,#   or in shell terms a zero-length string. The message is optional.</para># </entry># </s:function>#*/assertNull(){  ${_SHUNIT_LINENO_}  if [ $# -lt 1 -o $# -gt 2 ]; then    _shunit_error 'assertNull() requires one or two arguments'    return ${SHUNIT_ERROR}  fi  _shunit_shouldSkip && return ${SHUNIT_TRUE}  [ -z "${shunit_message_:-}" ] && shunit_message_=''  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}_ASSERT_NULL_='eval assertNull --lineno "${LINENO:-}"'#/**# <s:function group="asserts"># <entry align="right">#   <emphasis>void</emphasis># </entry># <entry>#   <funcsynopsis>#     <funcprototype>#       <funcdef><function>assertNotNull</function></funcdef>#       <paramdef>string <parameter>[message]</parameter></paramdef>#       <paramdef>string <parameter>value</parameter></paramdef>#     </funcprototype>#   </funcsynopsis>#   <para>Asserts that <emphasis>value</emphasis> is <emphasis#   role="strong">not</emphasis> <literal>null</literal>, or in shell terms not#   a zero-length string. The message is optional.</para># </entry># </s:function>#*/assertNotNull(){  ${_SHUNIT_LINENO_}  if [ $# -gt 2 ]; then  # allowing 0 arguments as $1 might actually be null    _shunit_error 'assertNotNull() requires one or two arguments'    return ${SHUNIT_ERROR}  fi  _shunit_shouldSkip && return ${SHUNIT_TRUE}  if [ $# -eq 2 ]; then    assertTrue "$1" "[ -n '$2' ]"  else    assertTrue "[ -n '${1:-}' ]"  fi}_ASSERT_NOT_NULL_='eval assertNotNull --lineno "${LINENO:-}"'#/**# <s:function group="asserts"># <entry align="right">#   <emphasis>void</emphasis># </entry># <entry>#   <funcsynopsis>#     <funcprototype>#       <funcdef><function>assertSame</function></funcdef>#       <paramdef>string <parameter>[message]</parameter></paramdef>#       <paramdef>string <parameter>expected</parameter></paramdef>#       <paramdef>string <parameter>actual</parameter></paramdef>#     </funcprototype>#   </funcsynopsis>#   <para>This function is functionally equivalent to#   <function>assertEquals</function>.</para># </entry># </s:function>#*/assertSame(){  ${_SHUNIT_LINENO_}  if [ $# -lt 2 -o $# -gt 3 ]; then    _shunit_error 'assertSame() requires one or two arguments'    return ${SHUNIT_ERROR}  fi  _shunit_shouldSkip && return ${SHUNIT_TRUE}  if [ $# -eq 2 ]; then    assertEquals "$1" "$2"  else    assertEquals "$1" "$2" "$3"  fi}_ASSERT_SAME_='eval assertSame --lineno "${LINENO:-}"'#/**# <s:function group="asserts"># <entry align="right">#   <emphasis>void</emphasis># </entry># <entry>#   <funcsynopsis>#     <funcprototype>#       <funcdef><function>assertNotSame</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>#*/assertNotSame(){  ${_SHUNIT_LINENO_}  if [ $# -lt 2 -o $# -gt 3 ]; then    _shunit_error 'assertNotSame() requires two or three arguments'    return ${SHUNIT_ERROR}  fi  _shunit_shouldSkip && return ${SHUNIT_TRUE}  [ -z "${shunit_message_:-}" ] && shunit_message_=''  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_testPassed  else    failSame "${shunit_message_}" "$@"    shunit_return=${SHUNIT_FALSE}  fi  unset shunit_message_ shunit_unexpected_ shunit_actual_  return ${shunit_return}}_ASSERT_NOT_SAME_='eval assertNotSame --lineno "${LINENO:-}"'#/**# <s:function group="asserts"># <entry align="right">#   <emphasis>void</emphasis># </entry># <entry>#   <funcsynopsis>#     <funcprototype>#       <funcdef><function>assertTrue</function></funcdef>#       <paramdef>string <parameter>[message]</parameter></paramdef>#       <paramdef>string <parameter>condition</parameter></paramdef>#     </funcprototype>#   </funcsynopsis>#   <para>Asserts that a given shell test condition is true. The message is#   optional.</para>#   <para>Testing whether something is true or false is easy enough by using#   the assertEquals/assertNotSame functions. Shell supports much more#   complicated tests though, and a means to support them was needed. As such,#   this function tests that conditions are true or false through evaluation#   rather than just looking for a true or false.</para>#   <funcsynopsis>#     The following test will succeed: <funcsynopsisinfo>assertTrue "[ 34 -gt 23 ]"</funcsynopsisinfo>#     The folloing test will fail with a message: <funcsynopsisinfo>assertTrue "test failed" "[ -r '/non/existant/file' ]"</funcsynopsisinfo>#   </funcsynopsis># </entry># </s:function>#*/assertTrue(){  ${_SHUNIT_LINENO_}  if [ $# -gt 2 ]; then    _shunit_error 'assertTrue() takes one two arguments'    return ${SHUNIT_ERROR}  fi  _shunit_shouldSkip && return ${SHUNIT_TRUE}  [ -z "${shunit_message_:-}" ] && shunit_message_=''  if [ $# -eq 2 ]; then    shunit_message_="${shunit_message_}$1"    shift  fi  shunit_condition_=$1  # see if condition is an integer, i.e. a return value  shunit_match_=`expr "${shunit_condition_}" : '\([0-9]*\)'`  shunit_return=${SHUNIT_TRUE}  if [ -z "${shunit_condition_}" ]; then    # null condition    shunit_return=${SHUNIT_FALSE}  elif [ "${shunit_condition_}" = "${shunit_match_}" ]; then    # possible return value. treating 0 as true, and non-zero as false.    [ ${shunit_condition_} -ne 0 ] && shunit_return=${SHUNIT_FALSE}  else    # (hopefully) a condition    ( eval ${shunit_condition_} ) >/dev/null 2>&1    [ $? -ne 0 ] && shunit_return=${SHUNIT_FALSE}  fi  # record the test  if [ ${shunit_return} -eq ${SHUNIT_TRUE} ]; then    _shunit_testPassed  else    _shunit_testFailed "${shunit_message_}"  fi  unset shunit_message_ shunit_condition_ shunit_match_  return ${shunit_return}}_ASSERT_TRUE_='eval assertTrue --lineno "${LINENO:-}"'#/**# <s:function group="asserts"># <entry align="right">#   <emphasis>void</emphasis># </entry># <entry>#   <funcsynopsis>#     <funcprototype>#       <funcdef><function>assertFalse</function></funcdef>#       <paramdef>string <parameter>[message]</parameter></paramdef>#       <paramdef>string <parameter>condition</parameter></paramdef>#     </funcprototype>#   </funcsynopsis>#   <para>Asserts that a given shell test condition is false. The message is#   optional.</para>#   <para>Testing whether something is true or false is easy enough by using#   the assertEquals/assertNotSame functions. Shell supports much more#   complicated tests though, and a means to support them was needed. As such,#   this function tests that conditions are true or false through evaluation#   rather than just looking for a true or false.</para>#   <funcsynopsis>#     The following test will succeed: <funcsynopsisinfo>assertFalse "[ 'apples' = 'oranges' ]"</funcsynopsisinfo>#     The folloing test will fail with a message: <funcsynopsisinfo>assertFalse "test failed" "[ 1 -eq 1 -a 2 -eq 2 ]"</funcsynopsisinfo>#   </funcsynopsis># </entry># </s:function>#*/assertFalse(){  ${_SHUNIT_LINENO_}  if [ $# -lt 1 -o $# -gt 2 ]; then    _shunit_error 'assertFalse() quires one or two arguments'    return ${SHUNIT_ERROR}  fi  _shunit_shouldSkip && return ${SHUNIT_TRUE}  [ -z "${shunit_message_:-}" ] && shunit_message_=''  if [ $# -eq 2 ]; then    shunit_message_="${shunit_message_}$1"    shift  fi  shunit_condition_=$1  # see if condition is an integer, i.e. a return value  shunit_match_=`expr "${shunit_condition_}" : '\([0-9]*\)'`  shunit_return=${SHUNIT_TRUE}  if [ -z "${shunit_condition_}" ]; then    # null condition    shunit_return=${SHUNIT_FALSE}  elif [ "${shunit_condition_}" = "${shunit_match_}" ]; then    # possible return value. treating 0 as true, and non-zero as false.    [ ${shunit_condition_} -eq 0 ] && shunit_return=${SHUNIT_FALSE}  else    # (hopefully) a condition    ( eval ${shunit_condition_} ) >/dev/null 2>&1    [ $? -eq 0 ] && shunit_return=${SHUNIT_FALSE}  fi  # record the test  if [ ${shunit_return} -eq ${SHUNIT_TRUE} ]; then    _shunit_testPassed  else    _shunit_testFailed "${shunit_message_}"  fi  unset shunit_message_ shunit_condition_ shunit_match_  return ${shunit_return}}_ASSERT_FALSE_='eval assertFalse --lineno "${LINENO:-}"'#-----------------------------------------------------------------------------# failure functions##/**# <s:function group="failures"># <entry align="right">#   <emphasis>void</emphasis># </entry># <entry>#   <funcsynopsis>#     <funcprototype>#       <funcdef><function>fail</function></funcdef>#       <paramdef>string <parameter>[message]</parameter></paramdef>#     </funcprototype>#   </funcsynopsis>#   <para>Fails the test immediately, with the optional message.</para># </entry># </s:function>#*/fail(){  ${_SHUNIT_LINENO_}  if [ $# -gt 1 ]; then    _shunit_error 'fail() requires one or two arguments'    return ${SHUNIT_ERROR}  fi  _shunit_shouldSkip && return ${SHUNIT_TRUE}  [ -z "${shunit_message_:-}" ] && shunit_message_=''  if [ $# -eq 1 ]; then    shunit_message_="${shunit_message_}$1"    shift  fi  _shunit_testFailed "${shunit_message_}"  unset shunit_message_  return ${SHUNIT_FALSE}}_FAIL_='eval fail --lineno "${LINENO:-}"'#/**# <s:function group="failures"># <entry align="right">#   <emphasis>void</emphasis># </entry># <entry>#   <funcsynopsis>#     <funcprototype>#       <funcdef><function>failNotEquals</function></funcdef>#       <paramdef>string <parameter>[message]</parameter></paramdef>#       <paramdef>string <parameter>unexpected</parameter></paramdef>#       <paramdef>string <parameter>actual</parameter></paramdef>#     </funcprototype>#   </funcsynopsis>#   <para>Fails the test if <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>#*/failNotEquals(){  ${_SHUNIT_LINENO_}  if [ $# -lt 2 -o $# -gt 3 ]; then    _shunit_error 'failNotEquals() requires one or two arguments'    return ${SHUNIT_ERROR}  fi  _shunit_shouldSkip && return ${SHUNIT_TRUE}  [ -z "${shunit_message_:-}" ] && shunit_message_=''

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -