blob: 6d380447133e4e0f55f2637d72febba3a2aa4984 [file] [log] [blame]
#! /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/Resources/jsc"
testRoot=/tmp/LayoutTests
resultsRoot=`date \+/tmp/results-%Y-%m-%d-%H-%M-%S`
testList="unset"
cmdName=`basename $0`
usage()
{
echo "usage: $cmdName [[--jsc | -j] <path-to-jsc>] [[--results-dir | -r] <results-path>]"
echo " [[--test-root | -t] <test-root-path>] [[--test-list | -l] <test-list-file>]"
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/js/jsc-test-list
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 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
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"