outline main
This commit is contained in:
parent
cc2c60cac0
commit
af0a80d1bd
193
urchin
193
urchin
@ -421,15 +421,6 @@ format_urchin() {
|
||||
fi
|
||||
}
|
||||
|
||||
# ---------- Temporary directory global variable ----------
|
||||
urchin_tmp=$(mktemp_dir)
|
||||
> "${urchin_tmp}/log"
|
||||
|
||||
urchin_exit() {
|
||||
rm -Rf "${urchin_tmp}"
|
||||
exit "$@"
|
||||
}
|
||||
|
||||
# -------------------- Main stuff --------------------
|
||||
recurse() {
|
||||
requested_path="${1}"
|
||||
@ -584,90 +575,91 @@ report_outcome() {
|
||||
|
||||
|
||||
main() {
|
||||
# Defaults
|
||||
format=urchin
|
||||
|
||||
while [ "${#}" -gt 0 ]
|
||||
do
|
||||
case "${1}" in
|
||||
-b|--run-in-series) run_in_series=true;;
|
||||
-e|--exit-on-fail) exit_on_not_ok=true;;
|
||||
-f|--force) force=true;;
|
||||
-s|--shell)
|
||||
shift
|
||||
shell_for_sh_tests="${1}"
|
||||
|
||||
if ! command -v "${shell_for_sh_tests}" > /dev/null; then
|
||||
echo "Cannot find specified shell: '${shell_for_sh_tests}'" >&2
|
||||
urchin_help >&2
|
||||
urchin_exit 13
|
||||
fi
|
||||
|
||||
if contains "${potential_test}" "${HT}" "${LF}"; then
|
||||
echo 'Shell paths may contain all characters other than' >&2
|
||||
echo 'horizontal tab (\t) and line feed (\n).' >&2
|
||||
urchin_exit 11
|
||||
fi
|
||||
|
||||
if contains "${shell_for_sh_tests}" "[${IFS}]"; then
|
||||
echo "Warning: It is best if field-separator characters
|
||||
(usually spaces) are absent from shell paths so that
|
||||
you don't need to quote the TEST_SHELL variable." >&2
|
||||
fi
|
||||
|
||||
shell_list="${shell_for_sh_tests}${LF}${shell_list}"
|
||||
;;
|
||||
-F|--format) shift ; format="${1}";;
|
||||
-T|--timeout)
|
||||
shift
|
||||
urchin_timeout="${1}"
|
||||
if ! contains "${urchin_timeout}" \
|
||||
'[0-9][0-9.]*\(s\|m\|h\|d\|\)' ; then
|
||||
echo Bad timeout argument: "${urchin_timeout}" >&2
|
||||
urchin_exit 11
|
||||
fi ;;
|
||||
-p|--pretty) print_in_color=true;;
|
||||
|
||||
-q|--quiet) verbosity=0 ;;
|
||||
-v) verbosity=2 ;;
|
||||
-vv) verbosity=3 ;;
|
||||
-vvv|--verbose) verbosity=4 ;;
|
||||
-vvvv|--debug) verbosity=5 ;;
|
||||
|
||||
-h|--help) urchin_help
|
||||
urchin_exit 0;;
|
||||
|
||||
--version) echo "${VERSION}"
|
||||
urchin_exit;;
|
||||
-*) urchin_help >&2
|
||||
urchin_exit 11;;
|
||||
*) if contains "${1}" "${HT}" "${LF}"; then
|
||||
echo 'Test file names may contain all characters other than' >&2
|
||||
echo 'horizontal tab (\t) and line feed (\n).' >&2
|
||||
urchin_exit 11
|
||||
elif [ ! -e "${1}" ]; then
|
||||
echo "No such file or directory: '${1}'" >&2
|
||||
echo "${USAGE}" >&2
|
||||
urchin_exit 11
|
||||
elif ! {
|
||||
# Molly guard
|
||||
root="$(test_suite_root "${1}")"
|
||||
basename "$(fullpath "${root}")" |
|
||||
grep -i 'test' > /dev/null || "${force}"
|
||||
}; then
|
||||
echo 'The root directory of the tests that you are running urchin on
|
||||
does not contain the word "test", so I am not running,
|
||||
in case that was an accident. Use the -f flag if you really
|
||||
want to run urchin on that directory.' >&2
|
||||
urchin_exit 12
|
||||
fi
|
||||
test_seeds="${1}${LF}${test_seeds}" ;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
if "${RUN_IN_SERIES}" 2> /dev/null; then
|
||||
run_in_series=true
|
||||
fi
|
||||
|
||||
# Shift if possible; error otherwise.
|
||||
flag_arg() {
|
||||
flag="${1}"
|
||||
if shift; then
|
||||
echo "${1}"
|
||||
else
|
||||
echo Missing argument for "${flag}" >&2
|
||||
exit 11
|
||||
fi
|
||||
}
|
||||
|
||||
# Receive input
|
||||
while [ "${#}" -gt 0 ]; do
|
||||
case "${1}" in
|
||||
-b|--run-in-series) run_in_series=true;;
|
||||
-e|--exit-on-fail) exit_on_not_ok=true;;
|
||||
-f|--force) force=true;;
|
||||
|
||||
-F|--format) format="$(flag_arg)" ;;
|
||||
-p|--pretty) print_in_color=true;;
|
||||
|
||||
-q|--quiet) verbosity=0 ;;
|
||||
-v) verbosity=2 ;;
|
||||
-vv) verbosity=3 ;;
|
||||
-vvv|--verbose) verbosity=4 ;;
|
||||
-vvvv|--debug) verbosity=5 ;;
|
||||
|
||||
--version) echo "${VERSION}" && exit;;
|
||||
-h|--help) urchin_help && exit 0;;
|
||||
|
||||
-s|--shell) sh="$(flag_arg)"
|
||||
if ! command -v "${sh}" > /dev/null; then
|
||||
echo "Cannot find specified shell: '${sh}'" >&2
|
||||
urchin_help >&2
|
||||
exit 13
|
||||
elif contains "${potential_test}" "${HT}" "${LF}"; then
|
||||
echo 'Shell paths may contain all characters other than' >&2
|
||||
echo 'horizontal tab (\t) and line feed (\n).' >&2
|
||||
exit 11
|
||||
elif contains "${sh}" "[${IFS}]"; then
|
||||
echo "Warning: It is best if field-separator characters
|
||||
(usually spaces) are absent from shell paths so that
|
||||
you don't need to quote the TEST_SHELL variable." >&2
|
||||
fi
|
||||
shell_list="${sh}${LF}${shell_list}" ;;
|
||||
|
||||
-T|--timeout) urchin_timeout="$(flag_arg)"
|
||||
if ! contains "${urchin_timeout}" \
|
||||
'[0-9][0-9.]*\(s\|m\|h\|d\|\)' ; then
|
||||
echo Bad timeout argument: "${urchin_timeout}" >&2
|
||||
exit 11
|
||||
fi ;;
|
||||
|
||||
-*) urchin_help >&2 && exit 11;;
|
||||
*) if contains "${1}" "${HT}" "${LF}"; then
|
||||
echo 'Test file names may contain all characters other than' >&2
|
||||
echo 'horizontal tab (\t) and line feed (\n).' >&2
|
||||
exit 11
|
||||
elif [ ! -e "${1}" ]; then
|
||||
echo "No such file or directory: '${1}'" >&2
|
||||
echo "${USAGE}" >&2
|
||||
exit 11
|
||||
elif ! {
|
||||
# Molly guard
|
||||
root="$(test_suite_root "${1}")"
|
||||
basename "$(fullpath "${root}")" |
|
||||
grep -i 'test' > /dev/null || "${force}"
|
||||
}; then
|
||||
echo 'The root directory of the tests that you are running urchin on
|
||||
doesnot contain the word "test", so I am not running,
|
||||
in case that was an accident. Use the -f flag if you really
|
||||
wantto run urchin on that directory.' >&2
|
||||
exit 12
|
||||
fi
|
||||
test_seeds="${1}${LF}${test_seeds}" ;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
# If -s was not passed, use the available default shells.
|
||||
if ! is_set "${shell_list}"; then
|
||||
if $cycle_shell; then
|
||||
@ -687,17 +679,20 @@ want to run urchin on that directory.' >&2
|
||||
TIMEOUT="timeout ${urchin_timeout}"
|
||||
else
|
||||
echo I couldn\'t figure out how to use your version of timeout >&2
|
||||
urchin_exit 10
|
||||
exit 10
|
||||
fi
|
||||
fi
|
||||
|
||||
if "${exit_on_not_ok}" && ! "${run_in_series}"; then
|
||||
echo 'You must also pass -b/--series in order to use -e/--exit-on-fail.' >&2
|
||||
urchin_exit 11
|
||||
exit 11
|
||||
fi
|
||||
|
||||
# -------------------- REALLY RUN -------------------- #
|
||||
|
||||
# Temporary files
|
||||
urchin_tmp=$(mktemp_dir)
|
||||
|
||||
# Write header information
|
||||
echo Running tests at $(date +%Y-%m-%dT%H:%M:%S) >> "${urchin_tmp}"/head
|
||||
printf 'Cycling with the following shells: ' >> "${urchin_tmp}"/head
|
||||
@ -710,16 +705,18 @@ want to run urchin on that directory.' >&2
|
||||
done
|
||||
finish=$("${epoch}")
|
||||
|
||||
if test $(cat "${urchin_tmp}"/log | wc -l) -eq 0; then
|
||||
if ! test -f "${urchin_tmp}"/log ; then
|
||||
echo 'No tests found' >&2
|
||||
urchin_exit 2
|
||||
exit_code=2
|
||||
else
|
||||
cat "${urchin_tmp}"/head
|
||||
report_outcome "${root}" "${format}" "${urchin_tmp}"/log "${start}" \
|
||||
"${finish}"
|
||||
# cat "${urchin_tmp}"/foot
|
||||
fi
|
||||
|
||||
cat "${urchin_tmp}"/head
|
||||
report_outcome "${root}" "${format}" "${urchin_tmp}"/log "${start}" \
|
||||
"${finish}"
|
||||
# cat "${urchin_tmp}"/foot
|
||||
urchin_exit "${?}"
|
||||
|
||||
rm -Rf "${urchin_tmp}"
|
||||
exit "${exit_code}"
|
||||
}
|
||||
|
||||
is_set TESTING_URCHIN_INTERNALS || main "$@"
|
||||
|
Loading…
Reference in New Issue
Block a user