Add test script

This commit is contained in:
JeremyStar™ 2024-10-27 13:26:44 +01:00
parent ecc668938d
commit 511397c955
Signed by: JeremyStarTM
GPG key ID: E366BAEF67E4704D

129
test.sh Executable file
View file

@ -0,0 +1,129 @@
#!/usr/bin/env bash
set -uo pipefail
IFS=$'\n'
TESTS="
# Logging
logger_diag
logger_verb
logger_sarn
logger_info
logger_warn
logger_error
logger_crash
# Checks
check_command_alias
check_command_keyword
check_command_function
check_command_builtin
check_command_file
check_command_defined
"
# Utility methods
function invalid() { echo ":: Error: Invalid test ${TEST}, skipping"; }
function fail() {
echo -e ":: Test ${TEST} failed\n ${*//\\n/\\n }"
[ -n "${FAILFAST}" ] && exit 1
}
## Assertions
function assert_equals() {
EXPECTED="${1}"
shift
ACTUAL="${*}"
[[ "${ACTUAL}" != "${EXPECTED}" ]] && fail "${1}" "String does not match expected string\nExpected: ${EXPECTED}\nActual: ${ACTUAL}"
}
function assert_contains() {
EXPECTED="${1}"
shift
ACTUAL="${*}"
[[ "${ACTUAL}" != *"${EXPECTED}"* ]] && fail "${1}" "String does not contain expected string\nExpected: ${EXPECTED}\nActual: ${ACTUAL}"
}
# Test loop
for TEST in ${TESTS}; do
[ -z "${TEST}" ] || [[ "${TEST}" == "#"* ]] && continue
echo ":: Running test ${TEST}"
export TEST
# Logging
if [[ "${TEST}" == "logger_"* ]]; then
if [ "${TEST}" == "logger_crash" ]; then
assert_contains "It crashed!" "$( (
source "bashutils.sh"
crash "true" "It crashed!"
) &> /dev/stdout)"
else
assert_contains "This is a test message" "$( (
source "bashutils.sh"
# shellcheck disable=SC2034
BASHUTILS_LOGLEVEL=0
${TEST//logger_/} "This is a test message"
) &> /dev/stdout)"
fi
# Checks
elif [[ "${TEST}" == "check_"* ]]; then
# Command checks
if [[ "${TEST}" == "check_command_"* ]]; then
case "${TEST//check_command/}" in
"alias")
assert_equals "0" "$(
source "bashutils.sh"
alias "verynicealias=ls"
is_command_alias "verynicealias"
echo "${?}"
)"
;;
"keyword")
assert_equals "0" "$(
source "bashutils.sh"
is_command_keyword "continue"
echo "${?}"
)"
;;
"function")
assert_equals "0" "$(
source "bashutils.sh"
is_command_function "is_command_function"
echo "${?}"
)"
;;
"builtin")
assert_equals "0" "$(
source "bashutils.sh"
is_command_builtin "set"
echo "${?}"
)"
;;
"file")
assert_equals "0" "$(
source "bashutils.sh"
is_command_file "clear"
echo "${?}"
)"
;;
"defined")
assert_equals "0" "$(
source "bashutils.sh"
is_command_defined "echo"
echo "${?}"
)"
;;
esac
# Invalid command
else
invalid
fi
# Invalid command
else
invalid
fi
done