2022-02-18 11:33:05 +01:00
|
|
|
#! /usr/bin/env bash
|
|
|
|
|
2022-02-18 13:16:53 +01:00
|
|
|
set -EuCo pipefail
|
|
|
|
|
|
|
|
if [[ "${BASH_VERSINFO[0]}" -ge 4 ]]; then
|
|
|
|
set -e
|
|
|
|
fi
|
2022-02-18 11:33:05 +01:00
|
|
|
|
|
|
|
declare RED=$'\033[31m'
|
|
|
|
declare GREEN=$'\033[32m'
|
|
|
|
declare RESET=$'\033[39m'
|
|
|
|
|
|
|
|
declare -i ERRORS=0 TESTS=0
|
|
|
|
|
|
|
|
function colorls() {
|
|
|
|
command bundle exec colorls "$@"
|
|
|
|
}
|
|
|
|
|
|
|
|
# check that the given command returns exit code 0
|
|
|
|
#
|
|
|
|
# SYNOPSIS: OK COMMAND [ARGS]
|
|
|
|
#
|
|
|
|
function OK() {
|
|
|
|
local ret
|
|
|
|
|
|
|
|
((++TESTS))
|
|
|
|
|
|
|
|
if "$@"; then
|
|
|
|
echo "$GREEN" "OK $RESET - $*" >&2
|
|
|
|
else
|
|
|
|
ret=$?
|
|
|
|
|
|
|
|
((++ERRORS))
|
|
|
|
|
|
|
|
echo "$RED" "FAIL$RESET - $* (exit code: $ret, ${BASH_SOURCE[1]}:${BASH_LINENO[0]})" >&2
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
# check that the given command returns a non-zero exit code
|
|
|
|
#
|
|
|
|
# SYNOPSIS: XFAIL [exit-code] COMMAND [ARGS]
|
|
|
|
#
|
|
|
|
function XFAIL() {
|
|
|
|
local expected ret
|
|
|
|
|
|
|
|
if [[ "$1" == [1-9] ]]; then
|
|
|
|
# expect a specific non-zero exit code
|
|
|
|
expected="$1"
|
|
|
|
shift
|
|
|
|
fi
|
|
|
|
|
|
|
|
((++TESTS))
|
|
|
|
|
|
|
|
if "$@"; then
|
|
|
|
((++ERRORS))
|
|
|
|
|
|
|
|
echo "$RED" "FAIL$RESET - $* (unexpected success, ${BASH_SOURCE[1]}:${BASH_LINENO[0]})" >&2
|
|
|
|
else
|
|
|
|
ret=$?
|
2022-02-18 13:16:53 +01:00
|
|
|
if [[ -n "$expected" && $expected -ne $ret ]]; then
|
2022-02-18 11:33:05 +01:00
|
|
|
((++ERRORS))
|
|
|
|
|
|
|
|
echo "$RED" "FAIL$RESET - $* (expected: $expected got $ret, ${BASH_SOURCE[1]}:${BASH_LINENO[0]})" >&2
|
|
|
|
else
|
|
|
|
echo "$GREEN" "OK $RESET - $*" >&2
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
# check that the given command returns with exit code 0 and its stdout contains a text
|
|
|
|
#
|
|
|
|
# SYNOPSIS: OUT TEXT COMMAND [ARGS]
|
|
|
|
#
|
|
|
|
function OUT() {
|
|
|
|
local STR="$1" ret
|
|
|
|
shift
|
|
|
|
|
|
|
|
((++TESTS))
|
|
|
|
|
|
|
|
if "$@" | grep -F "$STR"; then
|
|
|
|
echo "$GREEN" "OK $RESET - $*" >&2
|
|
|
|
else
|
|
|
|
ret=${PIPESTATUS[0]}
|
|
|
|
|
|
|
|
((++ERRORS))
|
|
|
|
|
|
|
|
if [[ $ret -ne 0 ]]; then
|
|
|
|
echo "$RED" "FAIL$RESET - $* (exit code: $ret, ${BASH_SOURCE[1]}:${BASH_LINENO[0]})" >&2
|
|
|
|
else
|
|
|
|
echo "$RED" "FAIL$RESET - $* ('$STR' not found in output, ${BASH_SOURCE[1]}:${BASH_LINENO[0]})" >&2
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
function summary() {
|
|
|
|
if [[ $ERRORS -gt 0 ]]; then
|
2022-03-27 19:09:26 +02:00
|
|
|
printf '\n\n %d of %d tests failed.\n\n' "$ERRORS" "$TESTS" >&2
|
2022-02-18 11:33:05 +01:00
|
|
|
exit 1
|
|
|
|
else
|
2022-03-27 19:09:26 +02:00
|
|
|
printf '\n\n %d tests passed.\n\n' "$TESTS" >&2
|
2022-02-18 11:33:05 +01:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
trap summary EXIT
|
|
|
|
|
2022-02-18 14:38:51 +01:00
|
|
|
# shellcheck source=test/checks
|
2022-02-18 11:33:05 +01:00
|
|
|
source "$(dirname "${BASH_SOURCE[0]}")/checks"
|