Files
rgbds/test/asm/test.sh
ISSOtm 5a06fad31e Separate stdout and stderr in tests
POSIX leaves undefined the order of output if stderr is injected into stdout,
and in practice it differs on Windows (Linux buffers both streams separately,
Windows interleaves them as they arrive without buffering).
This should help testing on other platforms
2020-01-09 01:10:51 +01:00

59 lines
1.6 KiB
Bash
Executable File

#!/bin/sh
export LC_ALL=C
o=$(mktemp)
gb=$(mktemp)
input=$(mktemp)
output=$(mktemp)
errput=$(mktemp)
rc=0
for i in *.asm; do
for variant in '' '.pipe'; do
if [ -z "$variant" ]; then
../../rgbasm -Weverything -o $o $i > $output 2> $errput
desired_output=${i%.asm}.out
desired_errput=${i%.asm}.err
else
# `include-recursion.asm` refers to its own name inside the test code.
# Skip testing with stdin input for that file.
if [ "$i" = "include-recursion.asm" ]; then
continue
fi
# Stop! This is not a Useless Use Of Cat. Using cat instead of
# stdin redirection makes the input an unseekable pipe - a scenario
# that's harder to deal with and was broken when the feature was
# first implemented.
cat $i | ../../rgbasm -Weverything -o $o - > $output 2> $errput
# Use two otherwise unused files for temp storage
desired_output=$input
desired_errput=$gb
# Escape regex metacharacters
subst="$(printf '%s\n' "$i" | sed 's:[][\/.^$*]:\\&:g')"
# Replace the file name with a dash to match changed output
sed "s/$subst/-/g" ${i%.asm}.out > $desired_output
sed "s/$subst/-/g" ${i%.asm}.err > $desired_errput
fi
diff -u $desired_output $output
rc=$(($? || $rc))
diff -u $desired_errput $errput
rc=$(($? || $rc))
bin=${i%.asm}.out.bin
if [ -f $bin ]; then
../../rgblink -o $gb $o > $output 2>&1
dd if=$gb count=1 bs=$(printf %s $(wc -c < $bin)) > $output 2>/dev/null
hexdump -C $output > $input && mv $input $output
hexdump -C $bin > $input
diff -u $input $output
rc=$(($? || $rc))
fi
done
done
rm -f $o $gb $input $output
exit $rc