lightning-runner/test/runner
2021-12-21 02:35:10 -08:00

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