31 lines
680 B
Bash
31 lines
680 B
Bash
#!/bin/sh
|
|
set -e
|
|
|
|
tmpdir="$(mktemp -d)"
|
|
trap 'rm -r "$tmpdir"' EXIT
|
|
|
|
usage="usage: $0 transcript_file command [args ...]"
|
|
|
|
transcript_file="${1:?$usage}"
|
|
shift
|
|
: "${1:?$usage}"
|
|
|
|
if "$@" > "$tmpdir/stdout" 2> "$tmpdir/stderr"
|
|
then
|
|
exit_code="$?"
|
|
else
|
|
exit_code="$?"
|
|
fi
|
|
|
|
sed -nE 's/^#stdout: //p' "$transcript_file" | diff -u /dev/stdin "$tmpdir/stdout"
|
|
sed -nE 's/^#stderr: //p' "$transcript_file" | diff -u /dev/stdin "$tmpdir/stderr"
|
|
|
|
expected_exit_code="$(sed -nE 's/^#exit-code: //p' "$transcript_file")"
|
|
|
|
: "${expected_exit_code:=0}"
|
|
|
|
if [ "$exit_code" != "$expected_exit_code" ]
|
|
then
|
|
printf 'Expected exit code %i, got %i.\n' "$expected_exit_code" "$exit_code"
|
|
exit 1
|
|
fi
|