Enable V8 test bindings for test262 ietestcenter.
Review URL: http://codereview.chromium.org/6711063 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@7333 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
363ef7f750
commit
956bd6f7bf
1
.gitignore
vendored
1
.gitignore
vendored
@ -23,6 +23,7 @@ shell_g
|
||||
/test/es5conform/data/
|
||||
/test/mozilla/data/
|
||||
/test/sputnik/sputniktests/
|
||||
/test/test262/data/
|
||||
/tools/oom_dump/oom_dump
|
||||
/tools/oom_dump/oom_dump.o
|
||||
/tools/visual_studio/Debug
|
||||
|
16
test/test262/README
Normal file
16
test/test262/README
Normal file
@ -0,0 +1,16 @@
|
||||
This directory contains code for binding the test262 test suite
|
||||
into the v8 test harness. To use the tests check out the test262
|
||||
tests from
|
||||
|
||||
http://hg.ecmascript.org/tests/test262
|
||||
|
||||
at revision 62 as 'data' in this directory. Using later version
|
||||
may be possible but the tests are only known to pass (and indeed run)
|
||||
with that revision.
|
||||
|
||||
hg clone -r 62 http://hg.ecmascript.org/tests/test262 data
|
||||
|
||||
If you do update to a newer revision you may have to change the test
|
||||
harness adapter code since it uses internal functionality from the
|
||||
harness that comes bundled with the tests. You will most likely also
|
||||
have to update the test expectation file.
|
80
test/test262/harness-adapt.js
Normal file
80
test/test262/harness-adapt.js
Normal file
@ -0,0 +1,80 @@
|
||||
// Copyright 2011 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.
|
||||
|
||||
function fnGlobalObject() { return (function() { return this; })(); }
|
||||
|
||||
var ES5Harness = (function() {
|
||||
var currentTest = {};
|
||||
var $this = this;
|
||||
|
||||
function Test262Error(id, path, description, codeString,
|
||||
preconditionString, result, error) {
|
||||
this.id = id;
|
||||
this.path = path;
|
||||
this.description = description;
|
||||
this.result = result;
|
||||
this.error = error;
|
||||
this.code = codeString;
|
||||
this.pre = preconditionString;
|
||||
}
|
||||
|
||||
Test262Error.prototype.toString = function() {
|
||||
return this.result;
|
||||
}
|
||||
|
||||
function registerTest(test) {
|
||||
if (!(test.precondition && !test.precondition())) {
|
||||
var error;
|
||||
try {
|
||||
var res = test.test.call($this);
|
||||
} catch(e) {
|
||||
print(e);
|
||||
res = 'fail'; error = e;
|
||||
}
|
||||
var retVal = /^s/i.test(test.id)
|
||||
? (res === true || typeof res == 'undefined' ? 'pass' : 'fail')
|
||||
: (res === true ? 'pass' : 'fail');
|
||||
|
||||
if (retVal != 'pass') {
|
||||
throw new Test262Error(
|
||||
test.id,
|
||||
test.path,
|
||||
test.description,
|
||||
test.test.toString(),
|
||||
(test.precondition !== undefined)
|
||||
? test.precondition.toString()
|
||||
: '',
|
||||
retVal,
|
||||
error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
registerTest: registerTest
|
||||
}
|
||||
})();
|
1506
test/test262/test262.status
Normal file
1506
test/test262/test262.status
Normal file
File diff suppressed because it is too large
Load Diff
123
test/test262/testcfg.py
Normal file
123
test/test262/testcfg.py
Normal file
@ -0,0 +1,123 @@
|
||||
# Copyright 2011 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 test
|
||||
import os
|
||||
from os.path import join, exists
|
||||
|
||||
|
||||
TEST_262_HARNESS = ['sta.js']
|
||||
|
||||
|
||||
class Test262TestCase(test.TestCase):
|
||||
|
||||
def __init__(self, filename, path, context, root, mode, framework):
|
||||
super(Test262TestCase, self).__init__(context, path, mode)
|
||||
self.filename = filename
|
||||
self.framework = framework
|
||||
self.root = root
|
||||
|
||||
def IsNegative(self):
|
||||
return self.filename.endswith('-n.js')
|
||||
|
||||
def GetLabel(self):
|
||||
return "%s test262 %s %s" % (self.mode, self.GetGroup(), self.GetName())
|
||||
|
||||
def IsFailureOutput(self, output):
|
||||
if output.exit_code != 0:
|
||||
return True
|
||||
return 'FAILED!' in output.stdout
|
||||
|
||||
def GetCommand(self):
|
||||
result = self.context.GetVmCommand(self, self.mode)
|
||||
result += ['-e', 'var window = this']
|
||||
result += self.framework
|
||||
result.append(self.filename)
|
||||
return result
|
||||
|
||||
def GetName(self):
|
||||
return self.path[-1]
|
||||
|
||||
def GetGroup(self):
|
||||
return self.path[0]
|
||||
|
||||
def GetSource(self):
|
||||
return open(self.filename).read()
|
||||
|
||||
|
||||
class Test262TestConfiguration(test.TestConfiguration):
|
||||
|
||||
def __init__(self, context, root):
|
||||
super(Test262TestConfiguration, self).__init__(context, root)
|
||||
|
||||
def AddIETestCenter(self, tests, current_path, path, mode):
|
||||
current_root = join(self.root, 'data', 'test', 'suite', 'ietestcenter')
|
||||
harness = [join(self.root, 'data', 'test', 'harness', f)
|
||||
for f in TEST_262_HARNESS]
|
||||
harness += [join(self.root, 'harness-adapt.js')]
|
||||
for root, dirs, files in os.walk(current_root):
|
||||
for dotted in [x for x in dirs if x.startswith('.')]:
|
||||
dirs.remove(dotted)
|
||||
dirs.sort()
|
||||
root_path = root[len(self.root):].split(os.path.sep)
|
||||
root_path = current_path + [x for x in root_path if x]
|
||||
files.sort()
|
||||
for file in files:
|
||||
if file.endswith('.js'):
|
||||
if self.Contains(path, root_path):
|
||||
test_path = ['ietestcenter', file[:-3]]
|
||||
test = Test262TestCase(join(root, file), test_path, self.context,
|
||||
self.root, mode, harness)
|
||||
tests.append(test)
|
||||
|
||||
def AddSputnikConvertedTests(self, tests, current_path, path, mode):
|
||||
# To be enabled
|
||||
pass
|
||||
|
||||
def AddSputnikTests(self, tests, current_path, path, mode):
|
||||
# To be enabled
|
||||
pass
|
||||
|
||||
def ListTests(self, current_path, path, mode, variant_flags):
|
||||
tests = []
|
||||
self.AddIETestCenter(tests, current_path, path, mode)
|
||||
self.AddSputnikConvertedTests(tests, current_path, path, mode)
|
||||
self.AddSputnikTests(tests, current_path, path, mode)
|
||||
return tests
|
||||
|
||||
def GetBuildRequirements(self):
|
||||
return ['sample', 'sample=shell']
|
||||
|
||||
def GetTestStatus(self, sections, defs):
|
||||
status_file = join(self.root, 'test262.status')
|
||||
if exists(status_file):
|
||||
test.ReadConfigurationInto(status_file, sections, defs)
|
||||
|
||||
|
||||
def GetConfiguration(context, root):
|
||||
return Test262TestConfiguration(context, root)
|
Loading…
Reference in New Issue
Block a user