scanner-test.sh 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #!/bin/sh
  2. echo "srcdir: $srcdir"
  3. echo "scanner: $WAYLAND_SCANNER"
  4. echo "test_data_dir: $TEST_DATA_DIR"
  5. echo "test_output_dir: $TEST_OUTPUT_DIR"
  6. echo "pwd: $PWD"
  7. echo "sed: $SED"
  8. RETCODE=0
  9. hard_fail() {
  10. echo "$@" "ERROR"
  11. exit 99
  12. }
  13. fail() {
  14. echo "$@" "FAIL"
  15. RETCODE=1
  16. }
  17. mkdir -p "$TEST_OUTPUT_DIR" || hard_fail "setup"
  18. generate_and_compare() {
  19. echo
  20. echo "Testing $1 generation: $2 -> $3"
  21. "$WAYLAND_SCANNER" $1 < "$TEST_DATA_DIR/$2" > "$TEST_OUTPUT_DIR/$3" || \
  22. hard_fail "$2 -> $3"
  23. "$SED" -i -e 's/Generated by wayland-scanner [0-9.]*/SCANNER TEST/' \
  24. "$TEST_OUTPUT_DIR/$3" || hard_fail "$2 -> $3"
  25. diff -q "$TEST_DATA_DIR/$3" "$TEST_OUTPUT_DIR/$3" && \
  26. echo "$2 -> $3 PASS" || \
  27. fail "$2 -> $3"
  28. }
  29. verify_error() {
  30. echo
  31. echo "Checking that reading $1 gives an error on line $3"
  32. [ -f "$TEST_DATA_DIR/$1" ] || hard_fail "$1 not present"
  33. # Confirm failure error code
  34. "$WAYLAND_SCANNER" server-header < "$TEST_DATA_DIR/$1" >/dev/null 2>"$TEST_OUTPUT_DIR/$2" && \
  35. fail "$1 return code check"
  36. # Verify that an error is produced at the correct line
  37. grep -q "<stdin>:$3: error:" "$TEST_OUTPUT_DIR/$2" && echo "$1 PASS" || fail "$1 line number check"
  38. }
  39. generate_and_compare "code" "example.xml" "example-code.c"
  40. generate_and_compare "client-header" "example.xml" "example-client.h"
  41. generate_and_compare "server-header" "example.xml" "example-server.h"
  42. generate_and_compare "enum-header" "example.xml" "example-enum.h"
  43. generate_and_compare "code" "small.xml" "small-code.c"
  44. generate_and_compare "client-header" "small.xml" "small-client.h"
  45. generate_and_compare "server-header" "small.xml" "small-server.h"
  46. generate_and_compare "-c code" "small.xml" "small-code-core.c"
  47. generate_and_compare "-c client-header" "small.xml" "small-client-core.h"
  48. generate_and_compare "-c server-header" "small.xml" "small-server-core.h"
  49. # The existing "code" must produce result identical to "public-code"
  50. generate_and_compare "code" "small.xml" "small-code.c"
  51. generate_and_compare "public-code" "small.xml" "small-code.c"
  52. generate_and_compare "private-code" "small.xml" "small-private-code.c"
  53. generate_and_compare "code" "empty.xml" "empty-code.c"
  54. generate_and_compare "client-header" "empty.xml" "empty-client.h"
  55. generate_and_compare "server-header" "empty.xml" "empty-server.h"
  56. verify_error "bad-identifier-arg.xml" "bad-identifier-arg.log" 7
  57. verify_error "bad-identifier-entry.xml" "bad-identifier-entry.log" 8
  58. verify_error "bad-identifier-enum.xml" "bad-identifier-enum.log" 6
  59. verify_error "bad-identifier-event.xml" "bad-identifier-event.log" 6
  60. verify_error "bad-identifier-interface.xml" "bad-identifier-interface.log" 3
  61. verify_error "bad-identifier-protocol.xml" "bad-identifier-protocol.log" 2
  62. verify_error "bad-identifier-request.xml" "bad-identifier-request.log" 6
  63. exit $RETCODE