run_tests.sh 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #!/bin/sh
  2. #
  3. # Phase-0 test runner for M2c.
  4. # Usage: ./run_tests.sh (from the m2c directory, after ./build.sh)
  5. #
  6. pass=0
  7. fail=0
  8. expect_ok() {
  9. # $1 = test file (no dir)
  10. name="$1"
  11. out=$(./M2c "tests/$name" 2>&1)
  12. case "$out" in
  13. *"Parsed correctly"*)
  14. echo "ok $name accepted"
  15. pass=$((pass+1)) ;;
  16. *)
  17. echo "FAIL $name: expected accept, got: $out"
  18. fail=$((fail+1)) ;;
  19. esac
  20. }
  21. expect_fail() {
  22. # $1 = test file, $2 = message text expected in the .LST
  23. name="$1"
  24. want="$2"
  25. out=$(./M2c "tests/$name" 2>&1)
  26. case "$out" in
  27. *"Incorrect source"*) ;;
  28. *)
  29. echo "FAIL $name: expected rejection, got: $out"
  30. fail=$((fail+1)); return ;;
  31. esac
  32. lst="tests/$(basename "$name" .mod).LST"
  33. if grep -q "$want" "$lst" 2>/dev/null; then
  34. echo "ok $name rejected with [$want]"
  35. pass=$((pass+1))
  36. else
  37. echo "FAIL $name: [$want] not found in $lst"
  38. fail=$((fail+1))
  39. fi
  40. }
  41. echo "=== Phase-0 tests ==="
  42. expect_ok ok_minimal.mod
  43. expect_ok ok_nobegin.mod
  44. expect_fail bad_mismatch.mod "module name mismatch"
  45. expect_fail bad_syntax.mod "expected"
  46. echo "=== $pass passed, $fail failed ==="
  47. test "$fail" = 0