Migrate blink tests that are not relevant to blink into a new V8 test suite called 'blink'.
This initial CL contains the new test suite code and two tests for demonstration. Other tests will follow in a separate CL. R=jkummerow@chromium.org Review URL: https://codereview.chromium.org/17260002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15339 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
bd0deb9443
commit
f3f14fc7ed
1
.gitignore
vendored
1
.gitignore
vendored
@ -40,6 +40,7 @@ shell_g
|
||||
/test/test262/data
|
||||
/test/test262/test262-*
|
||||
/test/test262/test262.status2
|
||||
/test/webkit/webkit.status2
|
||||
/third_party
|
||||
/tools/jsfunfuzz
|
||||
/tools/jsfunfuzz.zip
|
||||
|
@ -95,7 +95,8 @@ class MessageTestSuite(testsuite.TestSuite):
|
||||
env = { "basename": os.path.basename(testpath + ".js") }
|
||||
if len(expected_lines) != len(actual_lines):
|
||||
return True
|
||||
for (expected, actual) in itertools.izip(expected_lines, actual_lines):
|
||||
for (expected, actual) in itertools.izip_longest(
|
||||
expected_lines, actual_lines, fillvalue=''):
|
||||
pattern = re.escape(expected.rstrip() % env)
|
||||
pattern = pattern.replace("\\*", ".*")
|
||||
pattern = "^%s$" % pattern
|
||||
|
33
test/webkit/concat-while-having-a-bad-time-expected.txt
Normal file
33
test/webkit/concat-while-having-a-bad-time-expected.txt
Normal file
@ -0,0 +1,33 @@
|
||||
# Copyright 2013 the V8 project authors. All rights reserved.
|
||||
# Copyright (C) 2005, 2006, 2007, 2008, 2009 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. AND ITS CONTRIBUTORS ``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 ITS 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.
|
||||
|
||||
Tests the behavior of Array.prototype.concat while the array is having a bad time due to one of the elements we are concatenating.
|
||||
|
||||
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
|
||||
|
||||
|
||||
PASS [42].concat() is [42]
|
||||
PASS successfullyParsed is true
|
||||
|
||||
TEST COMPLETE
|
||||
|
31
test/webkit/concat-while-having-a-bad-time.js
Normal file
31
test/webkit/concat-while-having-a-bad-time.js
Normal file
@ -0,0 +1,31 @@
|
||||
// Copyright 2013 the V8 project authors. All rights reserved.
|
||||
// Copyright (C) 2005, 2006, 2007, 2008, 2009 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. AND ITS CONTRIBUTORS ``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 ITS 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.
|
||||
|
||||
description(
|
||||
"Tests the behavior of Array.prototype.concat while the array is having a bad time due to one of the elements we are concatenating."
|
||||
);
|
||||
|
||||
Object.defineProperty(Array.prototype, 0, { writable: false });
|
||||
shouldBe("[42].concat()", "[42]");
|
||||
|
||||
|
3032
test/webkit/dfg-inlining-reg-alloc-expected.txt
Normal file
3032
test/webkit/dfg-inlining-reg-alloc-expected.txt
Normal file
File diff suppressed because it is too large
Load Diff
166
test/webkit/dfg-inlining-reg-alloc.js
Normal file
166
test/webkit/dfg-inlining-reg-alloc.js
Normal file
@ -0,0 +1,166 @@
|
||||
// Copyright 2013 the V8 project authors. All rights reserved.
|
||||
// Copyright (C) 2005, 2006, 2007, 2008, 2009 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. AND ITS CONTRIBUTORS ``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 ITS 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.
|
||||
|
||||
description(
|
||||
"This tests that register allocation still works under register pressure induced by inlining, out-of-line function calls (i.e. unconditional register flushing), and slow paths for object creation (i.e. conditional register flushing)."
|
||||
);
|
||||
|
||||
// Inlineable constructor.
|
||||
function foo(a, b, c) {
|
||||
this.a = a;
|
||||
this.b = b;
|
||||
this.c = c;
|
||||
}
|
||||
|
||||
// Non-inlineable function. This relies on a size limit for inlining, but still
|
||||
// produces integers. It also relies on the VM not reasoning about Math.log deeply
|
||||
// enough to find some way of optimizing this code to be small enough to inline.
|
||||
function bar(a, b) {
|
||||
a += b;
|
||||
a -= b;
|
||||
b ^= a;
|
||||
a += Math.log(b);
|
||||
b += a;
|
||||
b -= a;
|
||||
a ^= b;
|
||||
a += b;
|
||||
a -= b;
|
||||
b ^= a;
|
||||
a += Math.log(b);
|
||||
b += a;
|
||||
b -= a;
|
||||
a ^= b;
|
||||
a += b;
|
||||
a -= b;
|
||||
b ^= a;
|
||||
a += Math.log(b);
|
||||
b += a;
|
||||
b -= a;
|
||||
a ^= b;
|
||||
a += b;
|
||||
a -= b;
|
||||
b ^= a;
|
||||
a += Math.log(b);
|
||||
b += a;
|
||||
b -= a;
|
||||
a ^= b;
|
||||
a += b;
|
||||
a -= b;
|
||||
b ^= a;
|
||||
a += Math.log(b);
|
||||
b += a;
|
||||
b -= a;
|
||||
a ^= b;
|
||||
a += b;
|
||||
a -= b;
|
||||
b ^= a;
|
||||
a += Math.log(b);
|
||||
b += a;
|
||||
b -= a;
|
||||
a ^= b;
|
||||
a += b;
|
||||
a -= b;
|
||||
b ^= a;
|
||||
a += Math.log(b);
|
||||
b += a;
|
||||
b -= a;
|
||||
a ^= b;
|
||||
a += b;
|
||||
a -= b;
|
||||
b ^= a;
|
||||
a += Math.log(b);
|
||||
b += a;
|
||||
b -= a;
|
||||
a ^= b;
|
||||
a += b;
|
||||
a -= b;
|
||||
b ^= a;
|
||||
a += Math.log(b);
|
||||
b += a;
|
||||
b -= a;
|
||||
a ^= b;
|
||||
a += b;
|
||||
a -= b;
|
||||
b ^= a;
|
||||
a += Math.log(b);
|
||||
b += a;
|
||||
b -= a;
|
||||
a ^= b;
|
||||
a += b;
|
||||
a -= b;
|
||||
b ^= a;
|
||||
a += Math.log(b);
|
||||
b += a;
|
||||
b -= a;
|
||||
a ^= b;
|
||||
a += b;
|
||||
a -= b;
|
||||
b ^= a;
|
||||
a += Math.log(b);
|
||||
b += a;
|
||||
b -= a;
|
||||
a ^= b;
|
||||
a += b;
|
||||
a -= b;
|
||||
b ^= a;
|
||||
a += Math.log(b);
|
||||
b += a;
|
||||
b -= a;
|
||||
a ^= b;
|
||||
a += b;
|
||||
a -= b;
|
||||
b ^= a;
|
||||
a += Math.log(b);
|
||||
b += a;
|
||||
b -= a;
|
||||
a ^= b;
|
||||
a += b;
|
||||
a -= b;
|
||||
b ^= a;
|
||||
a += Math.log(b);
|
||||
b += a;
|
||||
b -= a;
|
||||
a ^= b;
|
||||
a += b;
|
||||
a -= b;
|
||||
b ^= a;
|
||||
a += Math.log(b);
|
||||
b += a;
|
||||
b -= a;
|
||||
a ^= b;
|
||||
return (a - b) | 0;
|
||||
}
|
||||
|
||||
// Function into which we will inline foo but not bar.
|
||||
function baz(a, b) {
|
||||
return new foo(bar(2 * a + 1, b - 1), bar(2 * a, b - 1), a);
|
||||
}
|
||||
|
||||
// Do the test. It's crucial that o.a, o.b, and o.c are checked on each
|
||||
// loop iteration.
|
||||
for (var i = 0; i < 1000; ++i) {
|
||||
var o = baz(i, i + 1);
|
||||
shouldBe("o.a", "bar(2 * i + 1, i)");
|
||||
shouldBe("o.b", "bar(2 * i, i)");
|
||||
shouldBe("o.c", "i");
|
||||
}
|
26
test/webkit/resources/standalone-post.js
Normal file
26
test/webkit/resources/standalone-post.js
Normal file
@ -0,0 +1,26 @@
|
||||
// Copyright 2013 the V8 project authors. All rights reserved.
|
||||
// Copyright (C) 2005, 2006, 2007, 2008, 2009 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. AND ITS CONTRIBUTORS ``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 ITS 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.
|
||||
|
||||
wasPostTestScriptParsed = true;
|
||||
|
||||
finishJSTest();
|
191
test/webkit/resources/standalone-pre.js
Normal file
191
test/webkit/resources/standalone-pre.js
Normal file
@ -0,0 +1,191 @@
|
||||
// Copyright 2013 the V8 project authors. All rights reserved.
|
||||
// Copyright (C) 2005, 2006, 2007, 2008, 2009 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. AND ITS CONTRIBUTORS ``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 ITS 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.
|
||||
|
||||
var wasPostTestScriptParsed = false;
|
||||
var errorMessage;
|
||||
|
||||
function description(msg)
|
||||
{
|
||||
print(msg);
|
||||
print("\nOn success, you will see a series of \"PASS\" messages, followed by \"TEST COMPLETE\".\n");
|
||||
print();
|
||||
}
|
||||
|
||||
function debug(msg)
|
||||
{
|
||||
print(msg);
|
||||
}
|
||||
|
||||
function escapeString(text)
|
||||
{
|
||||
return text.replace(/\0/g, "");
|
||||
}
|
||||
|
||||
function testPassed(msg)
|
||||
{
|
||||
print("PASS", escapeString(msg));
|
||||
}
|
||||
|
||||
function testFailed(msg)
|
||||
{
|
||||
errorMessage = msg;
|
||||
print("FAIL", escapeString(msg));
|
||||
}
|
||||
|
||||
function areArraysEqual(_a, _b)
|
||||
{
|
||||
if (Object.prototype.toString.call(_a) != Object.prototype.toString.call([]))
|
||||
return false;
|
||||
if (_a.length !== _b.length)
|
||||
return false;
|
||||
for (var i = 0; i < _a.length; i++)
|
||||
if (_a[i] !== _b[i])
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
function isMinusZero(n)
|
||||
{
|
||||
// the only way to tell 0 from -0 in JS is the fact that 1/-0 is
|
||||
// -Infinity instead of Infinity
|
||||
return n === 0 && 1/n < 0;
|
||||
}
|
||||
|
||||
function isResultCorrect(_actual, _expected)
|
||||
{
|
||||
if (_expected === 0)
|
||||
return _actual === _expected && (1/_actual) === (1/_expected);
|
||||
if (_actual === _expected)
|
||||
return true;
|
||||
if (typeof(_expected) == "number" && isNaN(_expected))
|
||||
return typeof(_actual) == "number" && isNaN(_actual);
|
||||
if (Object.prototype.toString.call(_expected) == Object.prototype.toString.call([]))
|
||||
return areArraysEqual(_actual, _expected);
|
||||
return false;
|
||||
}
|
||||
|
||||
function stringify(v)
|
||||
{
|
||||
if (v === 0 && 1/v < 0)
|
||||
return "-0";
|
||||
else return "" + v;
|
||||
}
|
||||
|
||||
function shouldBe(_a, _b)
|
||||
{
|
||||
if (typeof _a != "string" || typeof _b != "string")
|
||||
debug("WARN: shouldBe() expects string arguments");
|
||||
var exception;
|
||||
var _av;
|
||||
try {
|
||||
_av = eval(_a);
|
||||
} catch (e) {
|
||||
exception = e;
|
||||
}
|
||||
var _bv = eval(_b);
|
||||
|
||||
if (exception)
|
||||
testFailed(_a + " should be " + _bv + ". Threw exception " + exception);
|
||||
else if (isResultCorrect(_av, _bv))
|
||||
testPassed(_a + " is " + _b);
|
||||
else if (typeof(_av) == typeof(_bv))
|
||||
testFailed(_a + " should be " + _bv + ". Was " + stringify(_av) + ".");
|
||||
else
|
||||
testFailed(_a + " should be " + _bv + " (of type " + typeof _bv + "). Was " + _av + " (of type " + typeof _av + ").");
|
||||
}
|
||||
|
||||
function shouldBeTrue(_a) { shouldBe(_a, "true"); }
|
||||
function shouldBeFalse(_a) { shouldBe(_a, "false"); }
|
||||
function shouldBeNaN(_a) { shouldBe(_a, "NaN"); }
|
||||
function shouldBeNull(_a) { shouldBe(_a, "null"); }
|
||||
|
||||
function shouldBeEqualToString(a, b)
|
||||
{
|
||||
if (typeof a !== "string" || typeof b !== "string")
|
||||
debug("WARN: shouldBeEqualToString() expects string arguments");
|
||||
var unevaledString = JSON.stringify(b);
|
||||
shouldBe(a, unevaledString);
|
||||
}
|
||||
|
||||
function shouldBeUndefined(_a)
|
||||
{
|
||||
var exception;
|
||||
var _av;
|
||||
try {
|
||||
_av = eval(_a);
|
||||
} catch (e) {
|
||||
exception = e;
|
||||
}
|
||||
|
||||
if (exception)
|
||||
testFailed(_a + " should be undefined. Threw exception " + exception);
|
||||
else if (typeof _av == "undefined")
|
||||
testPassed(_a + " is undefined.");
|
||||
else
|
||||
testFailed(_a + " should be undefined. Was " + _av);
|
||||
}
|
||||
|
||||
|
||||
function shouldThrow(_a, _e)
|
||||
{
|
||||
var exception;
|
||||
var _av;
|
||||
try {
|
||||
_av = eval(_a);
|
||||
} catch (e) {
|
||||
exception = e;
|
||||
}
|
||||
|
||||
var _ev;
|
||||
if (_e)
|
||||
_ev = eval(_e);
|
||||
|
||||
if (exception) {
|
||||
if (typeof _e == "undefined" || exception == _ev)
|
||||
testPassed(_a + " threw exception " + exception + ".");
|
||||
else
|
||||
testFailed(_a + " should throw " + (typeof _e == "undefined" ? "an exception" : _ev) + ". Threw exception " + exception + ".");
|
||||
} else if (typeof _av == "undefined")
|
||||
testFailed(_a + " should throw " + (typeof _e == "undefined" ? "an exception" : _ev) + ". Was undefined.");
|
||||
else
|
||||
testFailed(_a + " should throw " + (typeof _e == "undefined" ? "an exception" : _ev) + ". Was " + _av + ".");
|
||||
}
|
||||
|
||||
function isSuccessfullyParsed()
|
||||
{
|
||||
// FIXME: Remove this and only report unexpected syntax errors.
|
||||
if (!errorMessage)
|
||||
successfullyParsed = true;
|
||||
shouldBeTrue("successfullyParsed");
|
||||
debug("\nTEST COMPLETE\n");
|
||||
}
|
||||
|
||||
// It's possible for an async test to call finishJSTest() before js-test-post.js
|
||||
// has been parsed.
|
||||
function finishJSTest()
|
||||
{
|
||||
wasFinishJSTestCalled = true;
|
||||
if (!wasPostTestScriptParsed)
|
||||
return;
|
||||
isSuccessfullyParsed();
|
||||
}
|
135
test/webkit/testcfg.py
Normal file
135
test/webkit/testcfg.py
Normal file
@ -0,0 +1,135 @@
|
||||
# Copyright 2013 the V8 project authors. All rights reserved.
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# * 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.
|
||||
# * Neither the name of Google Inc. nor the names of its
|
||||
# contributors may be used to endorse or promote products derived
|
||||
# from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "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 THE COPYRIGHT
|
||||
# OWNER 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.
|
||||
|
||||
import itertools
|
||||
import os
|
||||
import re
|
||||
|
||||
from testrunner.local import testsuite
|
||||
from testrunner.objects import testcase
|
||||
|
||||
FLAGS_PATTERN = re.compile(r"//\s+Flags:(.*)")
|
||||
FILES_PATTERN = re.compile(r"//\s+Files:(.*)")
|
||||
SELF_SCRIPT_PATTERN = re.compile(r"//\s+Env: TEST_FILE_NAME")
|
||||
|
||||
|
||||
# TODO (machenbach): Share commonalities with mjstest.
|
||||
class WebkitTestSuite(testsuite.TestSuite):
|
||||
|
||||
def __init__(self, name, root):
|
||||
super(WebkitTestSuite, self).__init__(name, root)
|
||||
|
||||
def ListTests(self, context):
|
||||
tests = []
|
||||
for dirname, dirs, files in os.walk(self.root):
|
||||
for dotted in [x for x in dirs if x.startswith('.')]:
|
||||
dirs.remove(dotted)
|
||||
if 'resources' in dirs:
|
||||
dirs.remove('resources')
|
||||
|
||||
dirs.sort()
|
||||
files.sort()
|
||||
for filename in files:
|
||||
if filename.endswith(".js"):
|
||||
testname = os.path.join(dirname[len(self.root) + 1:], filename[:-3])
|
||||
test = testcase.TestCase(self, testname)
|
||||
tests.append(test)
|
||||
return tests
|
||||
|
||||
def GetFlagsForTestCase(self, testcase, context):
|
||||
source = self.GetSourceForTest(testcase)
|
||||
flags = [] + context.mode_flags
|
||||
flags_match = re.findall(FLAGS_PATTERN, source)
|
||||
for match in flags_match:
|
||||
flags += match.strip().split()
|
||||
|
||||
files_list = [] # List of file names to append to command arguments.
|
||||
files_match = FILES_PATTERN.search(source);
|
||||
# Accept several lines of 'Files:'.
|
||||
while True:
|
||||
if files_match:
|
||||
files_list += files_match.group(1).strip().split()
|
||||
files_match = FILES_PATTERN.search(source, files_match.end())
|
||||
else:
|
||||
break
|
||||
files = [ os.path.normpath(os.path.join(self.root, '..', '..', f))
|
||||
for f in files_list ]
|
||||
testfilename = os.path.join(self.root, testcase.path + self.suffix())
|
||||
if SELF_SCRIPT_PATTERN.search(source):
|
||||
env = ["-e", "TEST_FILE_NAME=\"%s\"" % testfilename.replace("\\", "\\\\")]
|
||||
files = env + files
|
||||
files.append(os.path.join(self.root, "resources/standalone-pre.js"))
|
||||
files.append(testfilename)
|
||||
files.append(os.path.join(self.root, "resources/standalone-post.js"))
|
||||
|
||||
flags += files
|
||||
if context.isolates:
|
||||
flags.append("--isolate")
|
||||
flags += files
|
||||
|
||||
return testcase.flags + flags
|
||||
|
||||
def GetSourceForTest(self, testcase):
|
||||
filename = os.path.join(self.root, testcase.path + self.suffix())
|
||||
with open(filename) as f:
|
||||
return f.read()
|
||||
|
||||
# TODO(machenbach): Share with test/message/testcfg.py
|
||||
def _IgnoreLine(self, string):
|
||||
"""Ignore empty lines, valgrind output and Android output."""
|
||||
if not string: return True
|
||||
return (string.startswith("==") or string.startswith("**") or
|
||||
string.startswith("ANDROID") or
|
||||
# These five patterns appear in normal Native Client output.
|
||||
string.startswith("DEBUG MODE ENABLED") or
|
||||
string.startswith("tools/nacl-run.py") or
|
||||
string.find("BYPASSING ALL ACL CHECKS") > 0 or
|
||||
string.find("Native Client module will be loaded") > 0 or
|
||||
string.find("NaClHostDescOpen:") > 0)
|
||||
|
||||
def IsFailureOutput(self, output, testpath):
|
||||
if super(WebkitTestSuite, self).IsFailureOutput(output, testpath):
|
||||
return True
|
||||
file_name = os.path.join(self.root, testpath) + "-expected.txt"
|
||||
with file(file_name, "r") as expected:
|
||||
def ExpIterator():
|
||||
for line in expected.readlines():
|
||||
if line.startswith("#") or not line.strip(): continue
|
||||
yield line.strip()
|
||||
def ActIterator():
|
||||
for line in output.stdout.splitlines():
|
||||
if self._IgnoreLine(line.strip()): continue
|
||||
yield line.strip()
|
||||
for (expected, actual) in itertools.izip_longest(
|
||||
ExpIterator(), ActIterator(), fillvalue=''):
|
||||
if expected != actual:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def GetSuite(name, root):
|
||||
return WebkitTestSuite(name, root)
|
26
test/webkit/webkit.status
Normal file
26
test/webkit/webkit.status
Normal file
@ -0,0 +1,26 @@
|
||||
# Copyright 2013 the V8 project authors. All rights reserved.
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# * 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.
|
||||
# * Neither the name of Google Inc. nor the names of its
|
||||
# contributors may be used to endorse or promote products derived
|
||||
# from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "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 THE COPYRIGHT
|
||||
# OWNER 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.
|
@ -386,7 +386,7 @@ class ConvertNotation(object):
|
||||
self.init = True
|
||||
|
||||
def CloseGlobal(self):
|
||||
if not self.init: return
|
||||
if not self.init: self.OpenGlobal()
|
||||
print >> self.out, "]"
|
||||
self.init = False
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user