#!/bin/env bash ############################################################################### # Internal test engine functions ############################################################################### RED='\033[0;31m' GREEN='\033[0;32m' NO_COLOR='\033[0m' function _shellmath_assert_returnCode() { _shellmath_assert_functionReturn -c "$@" return $? } function _shellmath_assert_returnString() { _shellmath_assert_functionReturn "$@" return $? } function _shellmath_assert_functionReturn() { if [[ $# -lt 2 ]]; then echo "USAGE: ${FUNCNAME[0]} [-c] returnStringOrCode functionName [ functionArgs ... ]" echo " By default, asserts against the string output by the function." echo " Use -c to assert against the numeric return code instead." return "${__shellmath_returnCodes[FAIL]}" fi if [[ "${1,,}" == '-c' ]]; then mode=RETURN_CODE shift else mode=RETURN_STRING fi expectedReturn="$1" func="$2" shift 2 args=("$@") # Exercise the function in optimized mode; it will run faster by avoiding # subshelling. This also suppresses dumping of function output to stdout. __shellmath_isOptimized=${__shellmath_true} "$func" "${args[@]}" returnCode=$? __shellmath_isOptimized=${__shellmath_false} # Fetch the return value(s) local numReturnValues declare -a actualReturn _shellmath_getReturnValueCount numReturnValues if ((numReturnValues == 1)); then _shellmath_getReturnValue actualReturn[0] else # Multiple returns? Join them into one string local _i evalString="_shellmath_getReturnValues" for ((_i=0; _i