Files
aliasme/test/assert.sh
2018-05-01 12:54:58 +08:00

195 lines
3.2 KiB
Bash
Executable File

#!/usr/bin/env bash
#####################################################################
##
## title: Assert Extension
##
## description:
## Assert extension of shell (bash, ...)
## with the common assert functions
## Function list based on:
## http://junit.sourceforge.net/javadoc/org/junit/Assert.html
## Log methods : inspired by
## - https://natelandau.com/bash-scripting-utilities/
## author: Mark Torok
##
## date: 07. Dec. 2016
##
## license: MIT
##
#####################################################################
RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
MAGENTA=$(tput setaf 5)
NORMAL=$(tput sgr0)
BOLD=$(tput bold)
log_header() {
printf "\n${BOLD}${MAGENTA}========== %s ==========${NORMAL}\n" "$@" >&2
}
log_success() {
printf "${GREEN}✔ %s${NORMAL}\n" "$@" >&2
}
log_failure() {
printf "${RED}✖ %s${NORMAL}\n" "$@" >&2
}
assert_eq() {
local expected="$1"
local actual="$2"
local msg
if [ "$#" -ge 3 ]; then
msg="$3"
fi
if [ "$expected" == "$actual" ]; then
return 0
else
[ "${#msg}" -gt 0 ] && log_failure "$expected == $actual :: $msg" || true
return 1
fi
}
assert_not_eq() {
local expected="$1"
local actual="$2"
local msg
if [ "$#" -ge 3 ]; then
msg="$3"
fi
if [ ! "$expected" == "$actual" ]; then
return 0
else
[ "${#msg}" -gt 0 ] && log_failure "$expected != $actual :: $msg" || true
return 1
fi
}
assert_true() {
local actual
local msg
actual="$1"
if [ "$#" -ge 3 ]; then
msg="$3"
fi
assert_eq true "$actual" "$msg"
return "$?"
}
assert_false() {
local actual
local msg
actual="$1"
if [ "$#" -ge 3 ]; then
msg="$3"
fi
assert_eq false "$actual" "$msg"
return "$?"
}
assert_array_eq() {
declare -a expected=("${!1}")
# echo "AAE ${expected[@]}"
declare -a actual=("${!2}")
# echo "AAE ${actual[@]}"
local msg
if [ "$#" -ge 3 ]; then
msg="$3"
fi
local return_code
return_code=0
if [ ! "${#expected[@]}" == "${#actual[@]}" ]; then
return_code=1
fi
local i
for (( i=1; i < ${#expected[@]} + 1; i+=1 )); do
if [ ! "${expected[$i-1]}" == "${actual[$i-1]}" ]; then
return_code=1
break
fi
done
if [ "$return_code" == 1 ]; then
[ "${#msg}" -gt 0 ] && log_failure "(${expected[*]}) != (${actual[*]}) :: $msg" || true
fi
return "$return_code"
}
assert_array_not_eq() {
declare -a expected=("${!1}")
declare -a actual=("${!2}")
local msg
if [ "$#" -ge 3 ]; then
msg="$3"
fi
local return_code
return_code=1
if [ ! "${#expected[@]}" == "${#actual[@]}" ]; then
return_code=0
fi
local i
for (( i=1; i < ${#expected[@]} + 1; i+=1 )); do
if [ ! "${expected[$i-1]}" == "${actual[$i-1]}" ]; then
return_code=0
break
fi
done
if [ "$return_code" == 1 ]; then
[ "${#msg}" -gt 0 ] && log_failure "(${expected[*]}) == (${actual[*]}) :: $msg" || true
fi
return "$return_code"
}
assert_empty() {
local actual
local msg
actual="$1"
if [ "$#" -ge 2 ]; then
msg="$2"
fi
assert_eq "" "$actual" "$msg"
return "$?"
}
assert_not_empty() {
local actual
local msg
actual="$1"
if [ "$#" -ge 2 ]; then
msg="$2"
fi
assert_not_eq "" "$actual" "$msg"
return "$?"
}