| #!/bin/sh -eu |
| |
| my_cleanup() { |
| [ -n "${workdir:-}" ] && rm -rf "${workdir}" |
| } |
| |
| trap "my_cleanup" EXIT |
| for sig in INT TERM ; do |
| # We want sig to expand right here and now, as it's |
| # a loop variable, not when signalled. For $$ it |
| # doesn't matter. |
| # shellcheck disable=SC2064 |
| trap "my_cleanup ; trap - EXIT ; trap - ${sig} ; kill -s ${sig} $$" ${sig} |
| done |
| |
| workdir=$(mktemp -d -t onig.ptest.XXXXXX) |
| status="${workdir}/failed" |
| touch "${status}" |
| |
| find tests/ -perm -111 -type f -exec sh -c ' |
| workdir="${1}" |
| status="${2}" |
| t="${3}" |
| t_log="${workdir}/$(basename ${t}).log" |
| |
| res=0 |
| ./${t} > "${t_log}" 2>&1 \ |
| || res=$? |
| if [ $res -eq 0 ] ; then |
| echo "PASS: ${t}" |
| else |
| echo "FAIL: ${t}" |
| echo "$(basename ${t}): ${t_log}" >> "${status}" |
| fi |
| ' _ "${workdir}" "${status}" {} \; |
| |
| if [ $(stat -c '%s' "${status}") -ne 0 ] ; then |
| exec >&2 |
| while IFS=': ' read -r t t_log ; do |
| printf "\n=========================\n" |
| printf "ERROR: %s:\n" "${t}" |
| printf -- "-------------------------\n" |
| cat "${t_log}" |
| done < "${status}" |
| fi |
| |
| [ $(stat -c '%s' "${status}") -eq 0 ] |