1
0
Fork 0
mirror of https://git.sr.ht/~rjarry/aerc synced 2025-02-22 14:53:57 +01:00
aerc/filters/test.sh
Timon Reinold eeacf0ca2f filters: test calendar filter also with POSIX-Awk
The builtin "calendar" filter is written in the Awk language, for which
multiple interpreters exist.  The most common is probably GNU Awk (aka
"gawk"), which also implements some features that other interpreters do
not support.  That means that the calendar filter could run fine in
gawk, but fail in another interpreter (compare e.g. commit a604acceac
"calendar: fix error with non-gnu awk").
Using the "-W posix" option, gawk can be put into a POSIX-compatibility
mode, which attempts to stay as close as possible to the POSIX-specified
version of Awk, which should then hopefully also be supported by other
Awk interpreters.  Running the filter's tests using "gawk -W posix"
should help identify potential incompatibilities with other
interpreters.
Other interpreters also support "-W posix" (e.g. mawk, or ignore it like
busybox awk).  Using "awk -W posix" allows these to be used as well.  If
"-W posix" causes the interpreter to fail, skip this test.

This new test in POSIX-compatibility mode runs in addition the existing
test, which directly executes the filter, using the Awk interpreter's
default mode ("-W posix" cannot just be added to the filter's shebang
line, as only a single argument may be supported, and "-f" is also
needed).  The later is the mode most users will actually be using, so I
don't want to remove that test.

I'm not doing this for the other Awk-filters (hldiff and plaintext), as
they have ben obsoleted by the colorize filter.  Besides, they don't
have any test vectors.

Signed-off-by: Timon Reinold <tirei+aerc@agon.one>
Acked-by: Robin Jarry <robin@jarry.cc>
2024-08-04 17:48:46 +02:00

79 lines
1.6 KiB
Bash
Executable file

#!/bin/sh
set -e
here=$(dirname $0)
fail=0
style=$(mktemp)
trap "rm -f $style" EXIT
cat >$style <<EOF
# stuff
url.fg = red
[viewer]
*.normal=true
*.default=true
url.underline = true # cxwlkj
header.bold= true # comment
signature.dim=true
diff_meta.bold =true
diff_chunk.dim= true
invalid . xxx = lkjfdslkjfdsqqqqqlkjdsq
diff_add.fg= #00ff00 # comment
# comment
diff_del.fg= 1 # comment2
quote_*.fg =6
quote_*.dim=true
quote_1.dim=false
[user]
foo = bar
EOF
export AERC_STYLESET=$style
export AERC_OSC8_URLS=1
do_test() {
prefix="$1"
tool_bin="$2"
tool="$3"
vec="$4"
expected="$5"
tmp=$(mktemp)
status=0
$prefix $tool_bin < $vec > $tmp || status=$?
if [ $status -eq 0 ] && diff -u "$expected" "$tmp"; then
echo "ok $tool < $vec > $tmp"
else
echo "error $tool < $vec > $tmp [status=$status]"
fail=1
fi
rm -f -- "$tmp"
}
for vec in $here/vectors/*.in; do
expected=${vec%%.in}.expected
tool=$(basename $vec | sed 's/-.*//')
tool_bin=$here/../$tool
prefix="$FILTERS_TEST_PREFIX $FILTERS_TEST_BIN_PREFIX"
# execute source directly (and omit $...BIN_PREFIX) for interpreted filters
if ! [ -f "$tool_bin" ]; then
tool_bin=$here/$tool
prefix="$FILTERS_TEST_PREFIX"
fi
do_test "$prefix" "$tool_bin" "$tool" "$vec" "$expected"
case $tool in # additional test runs
calendar) # Awk
if awk -W posix -- '' >/dev/null 2>&1; then
# test POSIX-compatibility
do_test "$prefix" "awk -W posix -f $tool_bin" \
"$tool (posix)" "$vec" "$expected"
else # "-W posix" is not supported and not ignored, skip test
echo "? $tool < $vec > $tmp [no '-W posix' support]"
fi
;;
esac
done
exit $fail