145 lines
4.2 KiB
Bash
145 lines
4.2 KiB
Bash
#!/bin/bash
|
|
|
|
# /*
|
|
# Assert logic
|
|
#
|
|
# run_assert
|
|
# @param -> prefix applied to output file name
|
|
# @param -> output that is tested (STDOUT, STDERR or MISC)
|
|
# function that:
|
|
# - sets the variable RESPONSE with the path of the file that stores the actual output
|
|
# - iterates over the current test configuration file ('stdout', 'stderr' or 'misc')
|
|
# - calls the expected type of assertion ('expected', 'might' or their opposite)
|
|
#
|
|
# run_expected_to
|
|
# run_expected_to_not
|
|
# run_might
|
|
# run_might_to
|
|
# @param -> current test (e.g. 'expected_to be_empty')
|
|
# functions that calls the verbs and treats their exit status
|
|
# */
|
|
|
|
run_assert()
|
|
{
|
|
local LINE
|
|
local PREFIX_STD="${1}"
|
|
local EXPECTED_STD="RESPONSE_${PREFIX_STD}${2}"
|
|
local RESPONSE="${!EXPECTED_STD}"
|
|
local EXPECTED_STD_NAME="${2}"
|
|
local RESPONSE_EXIT_STATUS_VAR="${PREFIX_STD}EXIT_STATUS"
|
|
local RESPONSE_EXIT_STATUS="${!RESPONSE_EXIT_STATUS_VAR}"
|
|
local TEST_CMD
|
|
local OLD_IFS="${IFS}"
|
|
local ASSERT_STATUS="0"
|
|
local CURRENT_ASSERT_STATUS
|
|
local DISPLAY_LINE
|
|
|
|
IFS=$'\n'
|
|
for LINE in $(awk '{gsub(/\\\\/, "\\\\\\\\\\\\\\\\"); print}' "${TEST}/$(echo "${EXPECTED_STD_NAME}" | awk '{print tolower($0)}')")
|
|
do
|
|
TEST_CMD="$(echo "${LINE}" | awk '{ print $1 }')"
|
|
DISPLAY_LINE="$(printf "${LINE}" | awk -v GLOBAL_TOKEN="${GLOBAL_TOKEN}" -v GLOBAL_INSTALLDIR="${GLOBAL_INSTALLDIR}" -v GLOBAL_TMP_DIRECTORY="${GLOBAL_TMP_DIRECTORY}" -v PATH="${PATH}" -v HOME="${HOME}" '{i=1; while(i <= NF) {gsub(/^"/, "`", $i); gsub(/"$/, "`", $i); i++}; gsub(/\\\\\\\\/, "\\"); gsub(/\$\{GLOBAL_TOKEN\}/, GLOBAL_TOKEN); gsub(/\$\{GLOBAL_INSTALLDIR\}/, GLOBAL_INSTALLDIR); gsub(/\$\{GLOBAL_TMP_DIRECTORY\}/, GLOBAL_TMP_DIRECTORY); gsub(/\$\{PATH\}/, PATH); gsub(/\$\{HOME\}/, HOME); print}')"
|
|
eval "run_${TEST_CMD}" ${LINE}
|
|
CURRENT_ASSERT_STATUS="${?}"
|
|
if [ "${CURRENT_ASSERT_STATUS}" != "0" ]
|
|
then
|
|
[ "${ASSERT_STATUS}" == "0" -o "${ASSERT_STATUS}" == "2" ] && ASSERT_STATUS="${CURRENT_ASSERT_STATUS}"
|
|
fi
|
|
done
|
|
IFS="${OLD_IFS}"
|
|
|
|
return "${ASSERT_STATUS}"
|
|
}
|
|
|
|
run_expected_to()
|
|
{
|
|
shift 1
|
|
local EXPECTED_TO_CMD="${1}"
|
|
shift 1
|
|
local -a EXPECTED_TO_ARGS='(${@})'
|
|
local ASSERT_STATUS
|
|
|
|
eval "run_verb_${EXPECTED_TO_CMD}"
|
|
ASSERT_STATUS="${?}"
|
|
case "${ASSERT_STATUS}" in
|
|
0)
|
|
printf "${C_GREEN} %-10s %s${C_CLEAR}\n" "SUCCESS" "${DISPLAY_LINE}" ;;
|
|
1)
|
|
printf "${C_RED} %-10s %s${C_CLEAR}\n" "FAILURE" "${DISPLAY_LINE}" ;;
|
|
255)
|
|
printf "${C_RED} [!] INVALID TEST COMMAND: %s${C_CLEAR}\n" "${DISPLAY_LINE}" ;;
|
|
esac
|
|
|
|
return "${ASSERT_STATUS}"
|
|
}
|
|
|
|
run_expected_to_not()
|
|
{
|
|
shift 1
|
|
local EXPECTED_TO_CMD="${1}"
|
|
shift 1
|
|
local -a EXPECTED_TO_ARGS='(${@})'
|
|
local ASSERT_STATUS
|
|
|
|
eval "run_verb_${EXPECTED_TO_CMD}"
|
|
ASSERT_STATUS="${?}"
|
|
case "${ASSERT_STATUS}" in
|
|
1)
|
|
ASSERT_STATUS="0"
|
|
printf "${C_GREEN} %-10s %s${C_CLEAR}\n" "SUCCESS" "${DISPLAY_LINE}" ;;
|
|
0)
|
|
ASSERT_STATUS="1"
|
|
printf "${C_RED} %-10s %s${C_CLEAR}\n" "FAILURE" "${DISPLAY_LINE}" ;;
|
|
255)
|
|
printf "${C_RED} [!] INVALID TEST COMMAND: %s${C_CLEAR}\n" "${DISPLAY_LINE}" ;;
|
|
esac
|
|
|
|
return "${ASSERT_STATUS}"
|
|
}
|
|
|
|
run_might()
|
|
{
|
|
shift 1
|
|
local EXPECTED_TO_CMD="${1}"
|
|
shift 1
|
|
local -a EXPECTED_TO_ARGS='(${@})'
|
|
local ASSERT_STATUS
|
|
|
|
eval "run_verb_${EXPECTED_TO_CMD}"
|
|
ASSERT_STATUS="${?}"
|
|
case "${ASSERT_STATUS}" in
|
|
0)
|
|
printf "${C_GREEN} %-10s %s${C_CLEAR}\n" "SUCCESS" "${DISPLAY_LINE}" ;;
|
|
1)
|
|
ASSERT_STATUS="2"
|
|
printf "${C_YELLOW} %-10s %s${C_CLEAR}\n" "WARNING" "${DISPLAY_LINE}" ;;
|
|
255)
|
|
printf "${C_RED} [!] INVALID TEST COMMAND: %s${C_CLEAR}\n" "${DISPLAY_LINE}" ;;
|
|
esac
|
|
|
|
return "${ASSERT_STATUS}"
|
|
}
|
|
|
|
run_might_not()
|
|
{
|
|
shift 1
|
|
local EXPECTED_TO_CMD="${1}"
|
|
shift 1
|
|
local -a EXPECTED_TO_ARGS='(${@})'
|
|
local ASSERT_STATUS
|
|
|
|
eval "run_verb_${EXPECTED_TO_CMD}"
|
|
ASSERT_STATUS="${?}"
|
|
case "${ASSERT_STATUS}" in
|
|
1)
|
|
ASSERT_STATUS="0"
|
|
printf "${C_GREEN} %-10s %s${C_CLEAR}\n" "SUCCESS" "${DISPLAY_LINE}" ;;
|
|
0)
|
|
ASSERT_STATUS="2"
|
|
printf "${C_YELLOW} %-10s %s${C_CLEAR}\n" "WARNING" "${DISPLAY_LINE}" ;;
|
|
255)
|
|
printf "${C_RED} [!] INVALID TEST COMMAND: ${EXPECTED_STD_NAME} %s${C_CLEAR}\n" "${DISPLAY_LINE}" ;;
|
|
esac
|
|
|
|
return "${ASSERT_STATUS}"
|
|
}
|