#! /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/{js,fast/regex} tests using jsc jscCmd="/System/Library/Frameworks/JavaScriptCore.framework/Helpers/jsc" testRoot=/tmp/LayoutTests resultsRoot=`date \+/tmp/results-%Y-%m-%d-%H-%M-%S` cmdName=`basename $0` usage() { echo "usage: $cmdName [[--jsc | -j] ] [[--results-dir | -r] ]" echo " [[--test-root | -t] ]" exit 1 } while [ $# -gt 1 ] do case $1 in --jsc|-j) jscCmd=$2 ;; --results-dir|-r) resultsRoot=$2 ;; --test-root|-t) testRoot=$2 ;; *) echo "Unrecognized option \"$1\"" usage ;; esac shift 2 done if [ $# -gt 0 ] then echo "Extra argument \"$1\"" usage fi preScript=$testRoot/resources/standalone-pre.js postScript=$testRoot/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 testHTMLFile in `(cd $testRoot && ls -1 js/*.html fast/regex/*.html)` do testPassed=0 testCrashed=0 testName=`basename $testHTMLFile .html` dirName=`dirname $testHTMLFile` test=$dirName/$testName 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 $jsTest ] then if [ `uname` = 'Darwin' ]; then echo "Testing $test ... \c" else echo -n "Testing $test ..." fi 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 numPassed=$(($numPassed+1)) else echo "$test" >> $failList numFailed=$(($numFailed+1)) if [ $testCrashed -eq 1 ] then echo "$test" >> $crashList 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"