test262 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. #!/bin/sh
  2. usage() {
  3. [ "${1-}" ] && { to=2; >&$to printf "Error: %s\n" "$1"; } || to=1
  4. >&$to echo "Usage: ${0##*/} [OPTIONS] test-file | test-dir"
  5. >&$to echo "Run test-262 ES5 test file or directory (at the test262 dir)."
  6. >&$to echo " -s Print source code of failed tests."
  7. >&$to echo " -p Print every test name before running it"
  8. >&$to echo " -f Display full paths and full stack trace when possible"
  9. >&$to echo " -l file.js Load file.js after the harness and before the test (up to one)"
  10. >&$to echo " -m MUJS MUJS is [path/to/]mujs binary to test"
  11. >&$to echo " Default is $(dirname "$0")/../build/release/mujs or mujs at \$PATH"
  12. >&$to echo " -b Don't skip known bad (crashing/hanging) tests"
  13. >&$to echo " -B Run only known bad tests"
  14. exit $((to-1))
  15. }
  16. KNOWN_BAD="
  17. --hang-with-sta.js:
  18. S15.1.3.2_A2.5_T1.js
  19. S15.1.3.1_A2.5_T1.js
  20. --Hang-(or-taking-more-than-few-seconds):
  21. 15.4.4.18-3-14.js
  22. 15.4.4.20-3-14.js
  23. S15.4.4.10_A3_T2.js
  24. S15.4.4.10_A3_T1.js
  25. 15.4.4.19-3-29.js
  26. 15.4.4.19-3-28.js
  27. 15.4.4.19-3-8.js
  28. 15.4.4.19-3-14.js
  29. S15.4.4.8_A3_T3.js
  30. 15.4.4.22-3-9.js
  31. 15.4.4.22-3-7.js
  32. 15.4.4.22-3-25.js
  33. 15.4.4.22-3-14.js
  34. 15.4.4.21-3-14.js
  35. 15.4.4.15-3-28.js
  36. 15.4.4.15-3-14.js
  37. 15.4.4.15-3-7.js
  38. 15.4.4.15-3-25.js
  39. 15.4.4.15-3-9.js
  40. "
  41. SKIP_KNOWN=yes # "yes": skip bad "no": don't skip "neg": run only bad
  42. PRINT_ALL=
  43. EXTRA_ARGS=
  44. mujs= lopt=
  45. while getopts bBfhl:ps o; do
  46. case $o in
  47. h) usage ;;
  48. b) SKIP_KNOWN=no ;;
  49. B) SKIP_KNOWN=neg ;;
  50. p) PRINT_ALL=yes ;;
  51. s) EXTRA_ARGS="$EXTRA_ARGS -s" ;;
  52. f) EXTRA_ARGS="$EXTRA_ARGS -f" ;;
  53. l) [ "$OPTARG" ] && lopt=$OPTARG || usage "empty file for -l" ;;
  54. m) mujs=$OPTARG;;
  55. *) usage "unknown option -$o" ;;
  56. esac
  57. done
  58. shift $((OPTIND-1))
  59. [ $# = 1 ] || usage "expecting one file/dir"
  60. BAD=
  61. if [ "$SKIP_KNOWN" != no ]; then
  62. for b in $KNOWN_BAD; do
  63. BAD="$BAD $b "
  64. done
  65. fi
  66. find_root() {
  67. ROOT=$1
  68. n=0
  69. while ! [ -e "$ROOT"/test/harness/sta.js ]; do
  70. ROOT=$ROOT/..
  71. n=$((n+1))
  72. [ $n -lt 10 ] || usage "can't find test-suite root"
  73. done
  74. }
  75. if [ -d "$1" ]; then
  76. find_root "$1"
  77. if [ "$ROOT" = "$1" ]; then
  78. FILES_CMD='find "$1/test/suite" -name "*.js" | sort -V'
  79. else
  80. FILES_CMD='find "$1" -name "*.js" | sort -V'
  81. fi
  82. else
  83. find_root "$(dirname "$1")"
  84. FILES_CMD='printf "%s\n" "$1"'
  85. fi
  86. if ! [ "$mujs" ]; then
  87. # try to use a recently built mujs rather than a global one
  88. mujs=$(dirname "$0")/../build/release/mujs
  89. [ -e "$mujs" ] || mujs=mujs
  90. fi
  91. jsharness=$(dirname "$0")/test262-harness.js
  92. total=0
  93. skipped=0
  94. failed=0
  95. eval "$FILES_CMD" | (
  96. while IFS= read -r f && [ "$f" ]; do
  97. total=$((total+1))
  98. base=${f##*/}
  99. case $BAD in *" $base "*) bad=yes;; *) bad=no;; esac
  100. case $bad-$SKIP_KNOWN in
  101. yes-yes)
  102. skipped=$((skipped+1))
  103. printf "[Skipping: $base]\n\n"
  104. ;;
  105. no-neg) # not known bad and running only bad - don't print anything
  106. skipped=$((skipped+1))
  107. ;;
  108. *)
  109. [ "$PRINT_ALL" ] && echo "Testing: $f"
  110. if ! "$mujs" -- "$jsharness" $EXTRA_ARGS ${lopt:+-l "$lopt"} "$ROOT" "$f" 2>&1; then
  111. failed=$((failed+1))
  112. echo
  113. fi
  114. esac
  115. done
  116. if [ $total -gt 1 ]; then
  117. printf "Total: $total\n"
  118. printf "Pass: %${#total}s\n" $((total - skipped - failed))
  119. printf "Skip: %${#total}s\n" $skipped
  120. printf "Fail: %${#total}s\n" $failed
  121. fi
  122. [ "$failed" = 0 ]
  123. )