| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- #!/bin/sh
- usage() {
- [ "${1-}" ] && { to=2; >&$to printf "Error: %s\n" "$1"; } || to=1
- >&$to echo "Usage: ${0##*/} [OPTIONS] test-file | test-dir"
- >&$to echo "Run test-262 ES5 test file or directory (at the test262 dir)."
- >&$to echo " -s Print source code of failed tests."
- >&$to echo " -p Print every test name before running it"
- >&$to echo " -f Display full paths and full stack trace when possible"
- >&$to echo " -l file.js Load file.js after the harness and before the test (up to one)"
- >&$to echo " -m MUJS MUJS is [path/to/]mujs binary to test"
- >&$to echo " Default is $(dirname "$0")/../build/release/mujs or mujs at \$PATH"
- >&$to echo " -b Don't skip known bad (crashing/hanging) tests"
- >&$to echo " -B Run only known bad tests"
- exit $((to-1))
- }
- KNOWN_BAD="
- --hang-with-sta.js:
- S15.1.3.2_A2.5_T1.js
- S15.1.3.1_A2.5_T1.js
- --Hang-(or-taking-more-than-few-seconds):
- 15.4.4.18-3-14.js
- 15.4.4.20-3-14.js
- S15.4.4.10_A3_T2.js
- S15.4.4.10_A3_T1.js
- 15.4.4.19-3-29.js
- 15.4.4.19-3-28.js
- 15.4.4.19-3-8.js
- 15.4.4.19-3-14.js
- S15.4.4.8_A3_T3.js
- 15.4.4.22-3-9.js
- 15.4.4.22-3-7.js
- 15.4.4.22-3-25.js
- 15.4.4.22-3-14.js
- 15.4.4.21-3-14.js
- 15.4.4.15-3-28.js
- 15.4.4.15-3-14.js
- 15.4.4.15-3-7.js
- 15.4.4.15-3-25.js
- 15.4.4.15-3-9.js
- "
- SKIP_KNOWN=yes # "yes": skip bad "no": don't skip "neg": run only bad
- PRINT_ALL=
- EXTRA_ARGS=
- mujs= lopt=
- while getopts bBfhl:ps o; do
- case $o in
- h) usage ;;
- b) SKIP_KNOWN=no ;;
- B) SKIP_KNOWN=neg ;;
- p) PRINT_ALL=yes ;;
- s) EXTRA_ARGS="$EXTRA_ARGS -s" ;;
- f) EXTRA_ARGS="$EXTRA_ARGS -f" ;;
- l) [ "$OPTARG" ] && lopt=$OPTARG || usage "empty file for -l" ;;
- m) mujs=$OPTARG;;
- *) usage "unknown option -$o" ;;
- esac
- done
- shift $((OPTIND-1))
- [ $# = 1 ] || usage "expecting one file/dir"
- BAD=
- if [ "$SKIP_KNOWN" != no ]; then
- for b in $KNOWN_BAD; do
- BAD="$BAD $b "
- done
- fi
- find_root() {
- ROOT=$1
- n=0
- while ! [ -e "$ROOT"/test/harness/sta.js ]; do
- ROOT=$ROOT/..
- n=$((n+1))
- [ $n -lt 10 ] || usage "can't find test-suite root"
- done
- }
- if [ -d "$1" ]; then
- find_root "$1"
- if [ "$ROOT" = "$1" ]; then
- FILES_CMD='find "$1/test/suite" -name "*.js" | sort -V'
- else
- FILES_CMD='find "$1" -name "*.js" | sort -V'
- fi
- else
- find_root "$(dirname "$1")"
- FILES_CMD='printf "%s\n" "$1"'
- fi
- if ! [ "$mujs" ]; then
- # try to use a recently built mujs rather than a global one
- mujs=$(dirname "$0")/../build/release/mujs
- [ -e "$mujs" ] || mujs=mujs
- fi
- jsharness=$(dirname "$0")/test262-harness.js
- total=0
- skipped=0
- failed=0
- eval "$FILES_CMD" | (
- while IFS= read -r f && [ "$f" ]; do
- total=$((total+1))
- base=${f##*/}
- case $BAD in *" $base "*) bad=yes;; *) bad=no;; esac
- case $bad-$SKIP_KNOWN in
- yes-yes)
- skipped=$((skipped+1))
- printf "[Skipping: $base]\n\n"
- ;;
- no-neg) # not known bad and running only bad - don't print anything
- skipped=$((skipped+1))
- ;;
- *)
- [ "$PRINT_ALL" ] && echo "Testing: $f"
- if ! "$mujs" -- "$jsharness" $EXTRA_ARGS ${lopt:+-l "$lopt"} "$ROOT" "$f" 2>&1; then
- failed=$((failed+1))
- echo
- fi
- esac
- done
- if [ $total -gt 1 ]; then
- printf "Total: $total\n"
- printf "Pass: %${#total}s\n" $((total - skipped - failed))
- printf "Skip: %${#total}s\n" $skipped
- printf "Fail: %${#total}s\n" $failed
- fi
- [ "$failed" = 0 ]
- )
|