#! /bin/sh # Copyright (C) 2012 Apple Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY # OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # Script to run selected LayoutTests/fast/{js,regex} tests using jsc jscCmd="/System/Library/Frameworks/JavaScriptCore.framework/Resources/jsc" testRoot=/tmp/LayoutTests resultsRoot=`date \+/tmp/results-%Y-%m-%d-%H-%M-%S` testList="unset" cmdName=`basename $0` function usage() { echo "usage: $cmdName [[--jsc | -j] ] [[--results-dir | -r] ]" echo " [[--test-root | -t] ] [[--test-list | -l] ]" exit 1 } while [ $# -gt 1 ] do case $1 in --jsc|-j) jscCmd=$2 ;; --results-dir|-r) resultsRoot=$2 ;; --test-root|-t) testRoot=$2 ;; --test-list|-l) testList=$2 ;; *) echo "Unrecognized option \"$1\"" usage ;; esac shift 2 done if [ $# -gt 0 ] then echo "Extra argument \"$1\"" usage fi if [ $testList = "unset" ] then testList=$testRoot/fast/js/jsc-test-list fi preScript=$testRoot/fast/js/resources/standalone-pre.js postScript=$testRoot/fast/js/resources/standalone-post.js passList=$resultsRoot/passed failList=$resultsRoot/failed crashList=$resultsRoot/crashed numTestsRun=0 numPassed=0 numFailed=0 numCrashed=0 rm -rf $resultsRoot rm -f jsc-tests-passed jsc-tests-failed for test in `cat $testList` do testPassed=0 testCrashed=0 testName=`basename $test` dirName=`dirname $test` expectedOut="$testRoot/$dirName/${testName}-expected.txt" actualOut="$resultsRoot/$dirName/${testName}-out.txt" actualErr="$resultsRoot/$dirName/${testName}-err.txt" diffOut="$resultsRoot/$dirName/${testName}-diff.txt" jsTest="$testRoot/$dirName/script-tests/${testName}.js" if [ ! -d "$resultsRoot/$dirName" ] then mkdir -p "$resultsRoot/$dirName" fi if [ -f $expectedOut -a -f $jsTest ] then echo "Testing $test ... \c" let numTestsRun=$numTestsRun+1 $jscCmd $preScript $jsTest $postScript 2>$actualErr > $actualOut JSC_RES=$? if [ $JSC_RES -eq 0 ] then diff $actualOut $expectedOut > $diffOut if [ $? -eq 0 ] then testPassed=1 echo "PASSED" else testPassed=0 echo "FAILED" fi else testPassed=0 if [ $JSC_RES -gt 128 ] then testCrashed=1 echo "CRASHED" else echo "ERROR: $JSC_RES" fi fi if [ $testPassed -eq 1 ] then echo "$test" >> $passList let numPassed=$numPassed+1 else echo "$test" >> $failList let numFailed=$numFailed+1 if [ $testCrashed -eq 1 ] then echo "$test" >> $crashList let numCrashed=$numCrashed+1 fi fi fi done if [ $numPassed -eq $numTestsRun ] then echo "All $numTestsRun tests passed!" | tee $resultsRoot/summary else echo "$numPassed tests passed, $numFailed tests failed, $numCrashed tests crashed." | tee $resultsRoot/summary fi echo "Test results in $resultsRoot"