137 lines
2.5 KiB
Bash
137 lines
2.5 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
preserve-suite-bookend-functions() {
|
|
if type setUp &>/dev/null; then
|
|
# shellcheck disable=SC2034
|
|
eval "_suite_$(typeset -f setUp)"
|
|
else
|
|
_suite_setUp() { :; }
|
|
fi
|
|
if type tearDown &>/dev/null; then
|
|
# shellcheck disable=SC2034
|
|
eval "_suite_$(typeset -f tearDown)"
|
|
else
|
|
_suite_tearDown() { :; }
|
|
fi
|
|
}
|
|
|
|
preserve-suite-bookend-functions
|
|
|
|
try() {
|
|
output=$(mktemp -d)
|
|
PATH="$fake_path:$PATH" "$@" > "$output/stdout" 2> "$output/stderr"
|
|
EXIT_CODE=$?
|
|
STDOUT=$(<"$output/stdout")
|
|
STDERR=$(<"$output/stderr")
|
|
export EXIT_CODE STDOUT STDERR
|
|
rm -rf "$output"
|
|
}
|
|
|
|
setUp() {
|
|
export TMPDIR="$PWD/.generated"
|
|
export-repo-root
|
|
move-to-working-directory
|
|
create-fake-path
|
|
_suite_setUp
|
|
}
|
|
|
|
tearDown() {
|
|
_suite_tearDown
|
|
[ "${_shunit_test_:=}" = '' ] && return 0
|
|
|
|
clean-up-working-directory
|
|
clean-up-fake-path
|
|
|
|
if [ "${__shunit_testSuccess:?}" != 0 ]; then
|
|
output-outputs
|
|
fi
|
|
}
|
|
|
|
export-repo-root() {
|
|
export REPO_ROOT="$PWD"
|
|
while ! [[ -d $REPO_ROOT/.git ]]; do
|
|
export REPO_ROOT=$(dirname $REPO_ROOT)
|
|
done
|
|
}
|
|
|
|
move-to-working-directory() {
|
|
original_dir="$PWD"
|
|
working_dir=$(mktemp -d)
|
|
cd $working_dir
|
|
}
|
|
|
|
create-fake-path() {
|
|
fake_path=$(mktemp -d)
|
|
invokations=$(mktemp -d)
|
|
}
|
|
|
|
clean-up-working-directory() {
|
|
cd $original_dir
|
|
rm -rf $working_dir
|
|
}
|
|
|
|
clean-up-fake-path() {
|
|
rm -rf $fake_path $invokations
|
|
}
|
|
|
|
output-outputs() {
|
|
(
|
|
bold '*******Test failed********'
|
|
echo "$(bold EXIT_CODE =) $EXIT_CODE"
|
|
bold STDOUT :
|
|
echo "$STDOUT"
|
|
bold STDERR :
|
|
echo "$STDERR"
|
|
) >&2
|
|
}
|
|
|
|
bold() {
|
|
echo -ne "\033[1m"
|
|
echo -ne "$@"
|
|
echo -e "\033[0m"
|
|
}
|
|
|
|
mock() {
|
|
command="$1"; shift
|
|
[[ -n "$1" ]] && output="$1"; shift
|
|
|
|
if ! [[ -f $fake_path/$command ]]; then
|
|
echo 'echo "$@" >> '$invokations/$command > $fake_path/$command
|
|
chmod +x $fake_path/$command
|
|
fi
|
|
|
|
if [[ -n "$output" ]]; then
|
|
echo "echo '$output'" >> $fake_path/$command
|
|
fi
|
|
}
|
|
|
|
assertCalledWithArguments() {
|
|
if ! [[ -f $invokations/$1 ]]; then
|
|
fail "$1 never invoked"
|
|
return 1
|
|
fi
|
|
if ! assertContains "$1 not invoked with expected arguments:" "$(<$invokations/$1)" "$2"; then
|
|
bold Actual invokations:
|
|
cat "$invokations/$1"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
assertNotCalled() {
|
|
if [[ -f $invokations/$1 ]]; then
|
|
fail "$1 has been invoked"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
SHUNIT_PATH=./.generated/shunit2-2.1.8/shunit2
|
|
if [ ! -f $SHUNIT_PATH ]; then (
|
|
mkdir -p .generated
|
|
cd .generated
|
|
curl -LO https://github.com/kward/shunit2/archive/v2.1.8.zip
|
|
unzip v2.1.8.zip
|
|
)
|
|
fi
|
|
|
|
source $SHUNIT_PATH
|