tests/unittest.sh
53753293
 #!/usr/bin/env bash
 
 # Licensed under the Apache License, Version 2.0 (the "License"); you may
 # not use this file except in compliance with the License. You may obtain
 # a copy of the License at
 #
 #      http://www.apache.org/licenses/LICENSE-2.0
 #
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 # License for the specific language governing permissions and limitations
 # under the License.
 
 # we always start with no errors
 ERROR=0
1cb809d8
 PASS=0
53753293
 FAILED_FUNCS=""
 
165afa23
 # pass a test, printing out MSG
 #  usage: passed message
1cb809d8
 function passed {
ada886dd
     local lineno
     lineno=$(caller 0 | awk '{print $1}')
     local function
     function=$(caller 0 | awk '{print $2}')
1cb809d8
     local msg="$1"
     if [ -z "$msg" ]; then
         msg="OK"
     fi
     PASS=$((PASS+1))
b997db60
     echo "PASS: $function:L$lineno - $msg"
1cb809d8
 }
 
165afa23
 # fail a test, printing out MSG
 #  usage: failed message
1cb809d8
 function failed {
ada886dd
     local lineno
     lineno=$(caller 0 | awk '{print $1}')
     local function
     function=$(caller 0 | awk '{print $2}')
1cb809d8
     local msg="$1"
     FAILED_FUNCS+="$function:L$lineno\n"
     echo "ERROR: $function:L$lineno!"
     echo "   $msg"
     ERROR=$((ERROR+1))
 }
 
7f0be4fc
 # assert string comparison of val1 equal val2, printing out msg
165afa23
 #  usage: assert_equal val1 val2 msg
53753293
 function assert_equal {
ada886dd
     local lineno
     lineno=`caller 0 | awk '{print $1}'`
     local function
     function=`caller 0 | awk '{print $2}'`
53753293
     local msg=$3
165afa23
 
     if [ -z "$msg" ]; then
         msg="OK"
     fi
53753293
     if [[ "$1" != "$2" ]]; then
         FAILED_FUNCS+="$function:L$lineno\n"
         echo "ERROR: $1 != $2 in $function:L$lineno!"
         echo "  $msg"
1cb809d8
         ERROR=$((ERROR+1))
53753293
     else
1cb809d8
         PASS=$((PASS+1))
165afa23
         echo "PASS: $function:L$lineno - $msg"
53753293
     fi
 }
 
b997db60
 # assert variable is empty/blank, printing out msg
 #  usage: assert_empty VAR msg
 function assert_empty {
ada886dd
     local lineno
     lineno=`caller 0 | awk '{print $1}'`
     local function
     function=`caller 0 | awk '{print $2}'`
b997db60
     local msg=$2
 
     if [ -z "$msg" ]; then
         msg="OK"
     fi
     if [[ ! -z ${!1} ]]; then
         FAILED_FUNCS+="$function:L$lineno\n"
         echo "ERROR: $1 not empty in $function:L$lineno!"
         echo "  $msg"
         ERROR=$((ERROR+1))
     else
         PASS=$((PASS+1))
         echo "PASS: $function:L$lineno - $msg"
     fi
 }
 
2ba36cda
 # assert the arguments evaluate to true
 #  assert_true "message" arg1 arg2
 function assert_true {
     local lineno
     lineno=`caller 0 | awk '{print $1}'`
     local function
     function=`caller 0 | awk '{print $2}'`
     local msg=$1
     shift
 
     $@
     if [ $? -eq 0 ]; then
         PASS=$((PASS+1))
         echo "PASS: $function:L$lineno - $msg"
     else
         FAILED_FUNCS+="$function:L$lineno\n"
         echo "ERROR: test failed in $function:L$lineno!"
         echo "  $msg"
         ERROR=$((ERROR+1))
     fi
 }
 
 # assert the arguments evaluate to false
 #  assert_false "message" arg1 arg2
 function assert_false {
     local lineno
     lineno=`caller 0 | awk '{print $1}'`
     local function
     function=`caller 0 | awk '{print $2}'`
     local msg=$1
     shift
 
     $@
     if [ $? -eq 0 ]; then
         FAILED_FUNCS+="$function:L$lineno\n"
         echo "ERROR: test failed in $function:L$lineno!"
         echo "  $msg"
         ERROR=$((ERROR+1))
     else
         PASS=$((PASS+1))
         echo "PASS: $function:L$lineno - $msg"
     fi
 }
 
 
ca7e4f28
 # Print a summary of passing and failing tests and exit
 # (with an error if we have failed tests)
165afa23
 #  usage: report_results
53753293
 function report_results {
1cb809d8
     echo "$PASS Tests PASSED"
ca7e4f28
     if [[ $ERROR -gt 0 ]]; then
1cb809d8
         echo
         echo "The following $ERROR tests FAILED"
         echo -e "$FAILED_FUNCS"
         echo "---"
53753293
         exit 1
     fi
ca7e4f28
     exit 0
53753293
 }