Index: test/test262/testcfg.py |
diff --git a/test/test262/testcfg.py b/test/test262/testcfg.py |
index c394cc8a5fade3a958b8807388691570577943ec..875a4e5eda5f2c3add7aa504d7f3e3bbfb6180f3 100644 |
--- a/test/test262/testcfg.py |
+++ b/test/test262/testcfg.py |
@@ -26,19 +26,107 @@ |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
-import test |
-import os |
-from os.path import join, exists |
-import urllib |
import hashlib |
+import os |
import sys |
import tarfile |
+import urllib |
+ |
+from testrunner.local import testsuite |
+from testrunner.objects import testcase |
+ |
+ |
+TEST_262_ARCHIVE_REVISION = "fb327c439e20" # This is the r334 revision. |
+TEST_262_ARCHIVE_MD5 = "307acd166ec34629592f240dc12d57ed" |
+TEST_262_URL = "http://hg.ecmascript.org/tests/test262/archive/%s.tar.bz2" |
+TEST_262_HARNESS = ["sta.js"] |
+ |
+ |
+class Test262TestSuite(testsuite.TestSuite): |
+ |
+ def __init__(self, name, root): |
+ super(Test262TestSuite, self).__init__(name, root) |
+ self.testroot = os.path.join(root, "data", "test", "suite") |
+ self.harness = [os.path.join(self.root, "data", "test", "harness", f) |
+ for f in TEST_262_HARNESS] |
+ self.harness += [os.path.join(self.root, "harness-adapt.js")] |
+ |
+ def CommonTestName(self, testcase): |
+ return testcase.path.split(os.path.sep)[-1] |
+ def ListTests(self, context): |
+ tests = [] |
+ for dirname, dirs, files in os.walk(self.testroot): |
+ for dotted in [x for x in dirs if x.startswith(".")]: |
+ dirs.remove(dotted) |
+ dirs.sort() |
+ files.sort() |
+ for filename in files: |
+ if filename.endswith(".js"): |
+ testname = os.path.join(dirname[len(self.testroot) + 1:], |
+ filename[:-3]) |
+ case = testcase.TestCase(self, testname) |
+ tests.append(case) |
+ return tests |
+ |
+ def GetFlagsForTestCase(self, testcase, context): |
+ return (testcase.flags + context.mode_flags + self.harness + |
+ [os.path.join(self.testroot, testcase.path + ".js")]) |
+ |
+ def GetSourceForTest(self, testcase): |
+ filename = os.path.join(self.testroot, testcase.path + ".js") |
+ with open(filename) as f: |
+ return f.read() |
+ |
+ def IsNegativeTest(self, testcase): |
+ return "@negative" in self.GetSourceForTest(testcase) |
+ |
+ def IsFailureOutput(self, output, testpath): |
+ if output.exit_code != 0: |
+ return True |
+ return "FAILED!" in output.stdout |
-TEST_262_ARCHIVE_REVISION = 'fb327c439e20' # This is the r334 revision. |
-TEST_262_ARCHIVE_MD5 = '307acd166ec34629592f240dc12d57ed' |
-TEST_262_URL = 'http://hg.ecmascript.org/tests/test262/archive/%s.tar.bz2' |
-TEST_262_HARNESS = ['sta.js'] |
+ def DownloadData(self): |
+ revision = TEST_262_ARCHIVE_REVISION |
+ archive_url = TEST_262_URL % revision |
+ archive_name = os.path.join(self.root, "test262-%s.tar.bz2" % revision) |
+ directory_name = os.path.join(self.root, "data") |
+ directory_old_name = os.path.join(self.root, "data.old") |
+ if not os.path.exists(archive_name): |
+ print "Downloading test data from %s ..." % archive_url |
+ urllib.urlretrieve(archive_url, archive_name) |
+ if os.path.exists(directory_name): |
+ os.rename(directory_name, directory_old_name) |
+ if not os.path.exists(directory_name): |
+ print "Extracting test262-%s.tar.bz2 ..." % revision |
+ md5 = hashlib.md5() |
+ with open(archive_name, "rb") as f: |
+ for chunk in iter(lambda: f.read(8192), ""): |
+ md5.update(chunk) |
+ if md5.hexdigest() != TEST_262_ARCHIVE_MD5: |
+ os.remove(archive_name) |
+ raise Exception("Hash mismatch of test data file") |
+ archive = tarfile.open(archive_name, "r:bz2") |
+ if sys.platform in ("win32", "cygwin"): |
+ # Magic incantation to allow longer path names on Windows. |
+ archive.extractall(u"\\\\?\\%s" % self.root) |
+ else: |
+ archive.extractall(self.root) |
+ os.rename(os.path.join(self.root, "test262-%s" % revision), |
+ directory_name) |
+ |
+ |
+def GetSuite(name, root): |
+ return Test262TestSuite(name, root) |
+ |
+ |
+# Deprecated definitions below. |
+# TODO(jkummerow): Remove when SCons is no longer supported. |
+ |
+ |
+from os.path import exists |
+from os.path import join |
+import test |
class Test262TestCase(test.TestCase): |