#!/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 badPRINT_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" ;; esacdoneshift $((OPTIND-1))[ $# = 1 ] || usage "expecting one file/dir" BAD=if [ "$SKIP_KNOWN" != no ]; then for b in $KNOWN_BAD; do BAD="$BAD $b " donefi 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' fielse 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=mujsfijsharness=$(dirname "$0")/test262-harness.js total=0skipped=0failed=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 ])
#!/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 ]
)