blob: 6c697d79255e29dc5b6a5e83fbf9017530b716c7 [file] [log] [blame]
Sean Dague53753292014-12-04 19:38:15 -05001#!/usr/bin/env bash
2
3# Licensed under the Apache License, Version 2.0 (the "License"); you may
4# not use this file except in compliance with the License. You may obtain
5# a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12# License for the specific language governing permissions and limitations
13# under the License.
14
15# we always start with no errors
16ERROR=0
Ian Wienand1cb809d2015-04-17 12:55:38 +100017PASS=0
Sean Dague53753292014-12-04 19:38:15 -050018FAILED_FUNCS=""
19
Ian Wienand165afa22015-05-25 11:29:48 +100020# pass a test, printing out MSG
21# usage: passed message
Ian Wienand1cb809d2015-04-17 12:55:38 +100022function passed {
Ian Wienandada886d2015-10-07 14:06:26 +110023 local lineno
24 lineno=$(caller 0 | awk '{print $1}')
25 local function
26 function=$(caller 0 | awk '{print $2}')
Ian Wienand1cb809d2015-04-17 12:55:38 +100027 local msg="$1"
28 if [ -z "$msg" ]; then
29 msg="OK"
30 fi
31 PASS=$((PASS+1))
Ian Wienandb997db62015-07-22 10:05:32 +100032 echo "PASS: $function:L$lineno - $msg"
Ian Wienand1cb809d2015-04-17 12:55:38 +100033}
34
Ian Wienand165afa22015-05-25 11:29:48 +100035# fail a test, printing out MSG
36# usage: failed message
Ian Wienand1cb809d2015-04-17 12:55:38 +100037function failed {
Ian Wienandada886d2015-10-07 14:06:26 +110038 local lineno
39 lineno=$(caller 0 | awk '{print $1}')
40 local function
41 function=$(caller 0 | awk '{print $2}')
Ian Wienand1cb809d2015-04-17 12:55:38 +100042 local msg="$1"
43 FAILED_FUNCS+="$function:L$lineno\n"
44 echo "ERROR: $function:L$lineno!"
45 echo " $msg"
46 ERROR=$((ERROR+1))
47}
48
Ian Wienand165afa22015-05-25 11:29:48 +100049# assert string comparision of val1 equal val2, printing out msg
50# usage: assert_equal val1 val2 msg
Sean Dague53753292014-12-04 19:38:15 -050051function assert_equal {
Ian Wienandada886d2015-10-07 14:06:26 +110052 local lineno
53 lineno=`caller 0 | awk '{print $1}'`
54 local function
55 function=`caller 0 | awk '{print $2}'`
Sean Dague53753292014-12-04 19:38:15 -050056 local msg=$3
Ian Wienand165afa22015-05-25 11:29:48 +100057
58 if [ -z "$msg" ]; then
59 msg="OK"
60 fi
Sean Dague53753292014-12-04 19:38:15 -050061 if [[ "$1" != "$2" ]]; then
62 FAILED_FUNCS+="$function:L$lineno\n"
63 echo "ERROR: $1 != $2 in $function:L$lineno!"
64 echo " $msg"
Ian Wienand1cb809d2015-04-17 12:55:38 +100065 ERROR=$((ERROR+1))
Sean Dague53753292014-12-04 19:38:15 -050066 else
Ian Wienand1cb809d2015-04-17 12:55:38 +100067 PASS=$((PASS+1))
Ian Wienand165afa22015-05-25 11:29:48 +100068 echo "PASS: $function:L$lineno - $msg"
Sean Dague53753292014-12-04 19:38:15 -050069 fi
70}
71
Ian Wienandb997db62015-07-22 10:05:32 +100072# assert variable is empty/blank, printing out msg
73# usage: assert_empty VAR msg
74function assert_empty {
Ian Wienandada886d2015-10-07 14:06:26 +110075 local lineno
76 lineno=`caller 0 | awk '{print $1}'`
77 local function
78 function=`caller 0 | awk '{print $2}'`
Ian Wienandb997db62015-07-22 10:05:32 +100079 local msg=$2
80
81 if [ -z "$msg" ]; then
82 msg="OK"
83 fi
84 if [[ ! -z ${!1} ]]; then
85 FAILED_FUNCS+="$function:L$lineno\n"
86 echo "ERROR: $1 not empty in $function:L$lineno!"
87 echo " $msg"
88 ERROR=$((ERROR+1))
89 else
90 PASS=$((PASS+1))
91 echo "PASS: $function:L$lineno - $msg"
92 fi
93}
94
Ian Wienand2ba36cd2015-11-12 13:52:36 +110095# assert the arguments evaluate to true
96# assert_true "message" arg1 arg2
97function assert_true {
98 local lineno
99 lineno=`caller 0 | awk '{print $1}'`
100 local function
101 function=`caller 0 | awk '{print $2}'`
102 local msg=$1
103 shift
104
105 $@
106 if [ $? -eq 0 ]; then
107 PASS=$((PASS+1))
108 echo "PASS: $function:L$lineno - $msg"
109 else
110 FAILED_FUNCS+="$function:L$lineno\n"
111 echo "ERROR: test failed in $function:L$lineno!"
112 echo " $msg"
113 ERROR=$((ERROR+1))
114 fi
115}
116
117# assert the arguments evaluate to false
118# assert_false "message" arg1 arg2
119function assert_false {
120 local lineno
121 lineno=`caller 0 | awk '{print $1}'`
122 local function
123 function=`caller 0 | awk '{print $2}'`
124 local msg=$1
125 shift
126
127 $@
128 if [ $? -eq 0 ]; then
129 FAILED_FUNCS+="$function:L$lineno\n"
130 echo "ERROR: test failed in $function:L$lineno!"
131 echo " $msg"
132 ERROR=$((ERROR+1))
133 else
134 PASS=$((PASS+1))
135 echo "PASS: $function:L$lineno - $msg"
136 fi
137}
138
139
Ian Wienandca7e4f22015-11-13 11:15:15 +1100140# Print a summary of passing and failing tests and exit
141# (with an error if we have failed tests)
Ian Wienand165afa22015-05-25 11:29:48 +1000142# usage: report_results
Sean Dague53753292014-12-04 19:38:15 -0500143function report_results {
Ian Wienand1cb809d2015-04-17 12:55:38 +1000144 echo "$PASS Tests PASSED"
Ian Wienandca7e4f22015-11-13 11:15:15 +1100145 if [[ $ERROR -gt 0 ]]; then
Ian Wienand1cb809d2015-04-17 12:55:38 +1000146 echo
147 echo "The following $ERROR tests FAILED"
148 echo -e "$FAILED_FUNCS"
149 echo "---"
Sean Dague53753292014-12-04 19:38:15 -0500150 exit 1
151 fi
Ian Wienandca7e4f22015-11-13 11:15:15 +1100152 exit 0
Sean Dague53753292014-12-04 19:38:15 -0500153}