wayland/tests/scanner-test.sh
Manuel Stoeckl 6db761d162 tests: Verify that wayland_scanner can catch bad identifiers
The test runs wayland_scanner on a set of XML protocol files which
have malformed element names, and confirms that an error is produced
and indicates the correct line.

Copyright notifications are not included in the test files, as
they are not code; of course, the project license still applies.

Signed-off-by: Manuel Stoeckl <code@mstoeckl.com>
2019-05-02 17:42:59 +00:00

79 lines
2.5 KiB
Bash
Executable File

#!/bin/sh
echo "srcdir: $srcdir"
echo "scanner: $WAYLAND_SCANNER"
echo "test_data_dir: $TEST_DATA_DIR"
echo "test_output_dir: $TEST_OUTPUT_DIR"
echo "pwd: $PWD"
echo "sed: $SED"
RETCODE=0
hard_fail() {
echo "$@" "ERROR"
exit 99
}
fail() {
echo "$@" "FAIL"
RETCODE=1
}
mkdir -p "$TEST_OUTPUT_DIR" || hard_fail "setup"
generate_and_compare() {
echo
echo "Testing $1 generation: $2 -> $3"
"$WAYLAND_SCANNER" $1 < "$TEST_DATA_DIR/$2" > "$TEST_OUTPUT_DIR/$3" || \
hard_fail "$2 -> $3"
"$SED" -i -e 's/Generated by wayland-scanner [0-9.]*/SCANNER TEST/' \
"$TEST_OUTPUT_DIR/$3" || hard_fail "$2 -> $3"
diff -q "$TEST_DATA_DIR/$3" "$TEST_OUTPUT_DIR/$3" && \
echo "$2 -> $3 PASS" || \
fail "$2 -> $3"
}
verify_error() {
echo
echo "Checking that reading $1 gives an error on line $3"
[ -f "$TEST_DATA_DIR/$1" ] || hard_fail "$1 not present"
# Confirm failure error code
"$WAYLAND_SCANNER" server-header < "$TEST_DATA_DIR/$1" >/dev/null 2>"$TEST_OUTPUT_DIR/$2" && \
fail "$1 return code check"
# Verify that an error is produced at the correct line
grep -q "<stdin>:$3: error:" "$TEST_OUTPUT_DIR/$2" && echo "$1 PASS" || fail "$1 line number check"
}
generate_and_compare "code" "example.xml" "example-code.c"
generate_and_compare "client-header" "example.xml" "example-client.h"
generate_and_compare "server-header" "example.xml" "example-server.h"
generate_and_compare "code" "small.xml" "small-code.c"
generate_and_compare "client-header" "small.xml" "small-client.h"
generate_and_compare "server-header" "small.xml" "small-server.h"
generate_and_compare "-c code" "small.xml" "small-code-core.c"
generate_and_compare "-c client-header" "small.xml" "small-client-core.h"
generate_and_compare "-c server-header" "small.xml" "small-server-core.h"
# The existing "code" must produce result identical to "public-code"
generate_and_compare "code" "small.xml" "small-code.c"
generate_and_compare "public-code" "small.xml" "small-code.c"
generate_and_compare "private-code" "small.xml" "small-private-code.c"
verify_error "bad-identifier-arg.xml" "bad-identifier-arg.log" 7
verify_error "bad-identifier-entry.xml" "bad-identifier-entry.log" 8
verify_error "bad-identifier-enum.xml" "bad-identifier-enum.log" 6
verify_error "bad-identifier-event.xml" "bad-identifier-event.log" 6
verify_error "bad-identifier-interface.xml" "bad-identifier-interface.log" 3
verify_error "bad-identifier-protocol.xml" "bad-identifier-protocol.log" 2
verify_error "bad-identifier-request.xml" "bad-identifier-request.log" 6
exit $RETCODE