Index: test/test262/testcfg.py |
diff --git a/test/test262/testcfg.py b/test/test262/testcfg.py |
index d8123968fca0578e35855b0192e580944322656f..1b0162c84975ebd90be9eeccb201e30a39c19d18 100644 |
--- a/test/test262/testcfg.py |
+++ b/test/test262/testcfg.py |
@@ -27,6 +27,7 @@ |
import imp |
+import itertools |
import os |
import re |
import sys |
@@ -47,6 +48,10 @@ TEST_262_NATIVE_FILES = ["detachArrayBuffer.js"] |
TEST_262_SUITE_PATH = ["data", "test"] |
TEST_262_HARNESS_PATH = ["data", "harness"] |
TEST_262_TOOLS_PATH = ["harness", "src"] |
+TEST_262_LOCAL_TESTS_PATH = ["local-tests", "test"] |
+ |
+TEST_262_RELPATH_REGEXP = re.compile( |
+ r'.*[\\/]test[\\/]test262[\\/][^\\/]+[\\/]test[\\/](.*)\.js') |
sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), |
*TEST_262_TOOLS_PATH)) |
@@ -101,6 +106,8 @@ class Test262VariantGenerator(testsuite.VariantGenerator): |
class Test262TestSuite(testsuite.TestSuite): |
+ # Match the (...) in '/path/to/v8/test/test262/subdir/test/(...).js' |
+ # In practice, subdir is data or local-tests |
def __init__(self, name, root): |
super(Test262TestSuite, self).__init__(name, root) |
@@ -109,11 +116,14 @@ class Test262TestSuite(testsuite.TestSuite): |
self.harness = [os.path.join(self.harnesspath, f) |
for f in TEST_262_HARNESS_FILES] |
self.harness += [os.path.join(self.root, "harness-adapt.js")] |
+ self.localtestroot = os.path.join(self.root, *TEST_262_LOCAL_TESTS_PATH) |
self.ParseTestRecord = None |
def ListTests(self, context): |
tests = [] |
- for dirname, dirs, files in os.walk(self.testroot): |
+ testnames = set() |
+ for dirname, dirs, files in itertools.chain(os.walk(self.testroot), |
+ os.walk(self.localtestroot)): |
for dotted in [x for x in dirs if x.startswith(".")]: |
dirs.remove(dotted) |
if context.noi18n and "intl402" in dirs: |
@@ -121,19 +131,20 @@ class Test262TestSuite(testsuite.TestSuite): |
dirs.sort() |
files.sort() |
for filename in files: |
- if filename.endswith(".js") and not filename.endswith("_FIXTURE.js"): |
- fullpath = os.path.join(dirname, filename) |
- relpath = fullpath[len(self.testroot) + 1 : -3] |
- testname = relpath.replace(os.path.sep, "/") |
- case = testcase.TestCase(self, testname) |
- tests.append(case) |
- return tests |
+ if not filename.endswith(".js"): |
+ continue |
+ if filename.endswith("_FIXTURE.js"): |
+ continue |
+ fullpath = os.path.join(dirname, filename) |
+ relpath = re.match(TEST_262_RELPATH_REGEXP, fullpath).group(1) |
+ testnames.add(relpath.replace(os.path.sep, "/")) |
+ return [testcase.TestCase(self, testname) for testname in testnames] |
def GetFlagsForTestCase(self, testcase, context): |
return (testcase.flags + context.mode_flags + self.harness + |
self.GetIncludesForTest(testcase) + ["--harmony"] + |
(["--module"] if "module" in self.GetTestRecord(testcase) else []) + |
- [os.path.join(self.testroot, testcase.path + ".js")] + |
+ [self.GetPathForTest(testcase)] + |
(["--throws"] if "negative" in self.GetTestRecord(testcase) |
else []) + |
(["--allow-natives-syntax"] |
@@ -179,9 +190,14 @@ class Test262TestSuite(testsuite.TestSuite): |
includes = [] |
return includes |
+ def GetPathForTest(self, testcase): |
+ filename = os.path.join(self.localtestroot, testcase.path + ".js") |
+ if not os.path.exists(filename): |
+ filename = os.path.join(self.testroot, testcase.path + ".js") |
+ return filename |
+ |
def GetSourceForTest(self, testcase): |
- filename = os.path.join(self.testroot, testcase.path + ".js") |
- with open(filename) as f: |
+ with open(self.GetPathForTest(testcase)) as f: |
return f.read() |
def _ParseException(self, str): |