Index: test/promises-aplus/testcfg.py |
diff --git a/test/promises-aplus/testcfg.py b/test/promises-aplus/testcfg.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..99495e6fe576f49b4fc2a4fa49f831b80a4b656a |
--- /dev/null |
+++ b/test/promises-aplus/testcfg.py |
@@ -0,0 +1,148 @@ |
+# Copyright 2014 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 hashlib |
+import os |
+import shutil |
+import sys |
+import tarfile |
+import urllib |
+ |
+from testrunner.local import testsuite |
+from testrunner.objects import testcase |
+ |
+ |
+SINON_TAG = '1.7.3' |
+SINON_NAME = 'sinon' |
+SINON_FILENAME = 'sinon.js' |
+SINON_URL = 'http://sinonjs.org/releases/sinon-' + SINON_TAG + '.js' |
+SINON_HASH = 'b7ab4dd9a1a2cf0460784af3728ad15caf4bbea923f680c5abde5c8332f35984' |
+ |
+TEST_TAG = '2.0.3' |
+TEST_ARCHIVE_TOP = 'promises-tests-' + TEST_TAG |
+TEST_NAME = 'promises-tests' |
+TEST_ARCHIVE = TEST_NAME + '.tar.gz' |
+TEST_URL = 'https://github.com/promises-aplus/promises-tests/archive/' + \ |
+ TEST_TAG + '.tar.gz' |
+TEST_ARCHIVE_HASH = \ |
+ 'e446ca557ac5836dd439fecd19689c243a28b1d5a6644dd7fed4274d0fa67270' |
+ |
+ |
+class PromiseAplusTestSuite(testsuite.TestSuite): |
+ |
+ def __init__(self, name, root): |
+ self.root = root |
+ self.test_files_root = os.path.join(self.root, TEST_NAME, 'lib', 'tests') |
+ self.name = name |
+ self.helper_files_pre = [ |
+ os.path.join(root, 'lib', name) for name in |
+ ['global.js', 'require.js', 'mocha.js', 'adapter.js'] |
+ ] |
+ self.helper_files_post = [ |
+ os.path.join(root, 'lib', name) for name in |
+ ['run-tests.js'] |
+ ] |
+ |
+ def CommonTestName(self, testcase): |
+ return testcase.path.split(os.path.sep)[-1] |
+ |
+ def ListTests(self, context): |
+ return [testcase.TestCase(self, fname[:-len('.js')]) for fname in |
+ os.listdir(os.path.join(self.root, TEST_NAME, 'lib', 'tests')) |
+ if fname.endswith('.js')] |
+ |
+ def GetFlagsForTestCase(self, testcase, context): |
+ return (testcase.flags + context.mode_flags + ['--harmony'] + |
+ self.helper_files_pre + |
+ [os.path.join(self.test_files_root, testcase.path + '.js')] + |
+ self.helper_files_post) |
+ |
+ def GetSourceForTest(self, testcase): |
+ filename = os.path.join(self.root, TEST_NAME, |
+ 'lib', 'tests', testcase.path + '.js') |
+ return 'print("FAIL: fail");' |
Jakob Kummerow
2014/04/24 14:14:53
I don't think this is working as intended ;-)
yhirano
2014/04/24 14:35:38
Oh thanks, you are right. It may be a remnant of p
|
+ 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 not 'All tests have run.' in output.stdout or \ |
+ 'FAIL:' in output.stdout |
+ |
+ def DownloadTestData(self): |
+ archive = os.path.join(self.root, TEST_ARCHIVE) |
+ directory = os.path.join(self.root, TEST_NAME) |
+ if not os.path.exists(archive): |
+ print('Downloading {0} from {1} ...'.format(TEST_NAME, TEST_URL)) |
+ urllib.urlretrieve(TEST_URL, archive) |
+ if os.path.exists(directory): |
+ shutil.rmtree(directory) |
+ |
+ if not os.path.exists(directory): |
+ print('Extracting {0} ...'.format(TEST_ARCHIVE)) |
+ hash = hashlib.sha256() |
+ with open(archive, 'rb') as f: |
+ for chunk in iter(lambda: f.read(8192), ''): |
+ hash.update(chunk) |
+ if hash.hexdigest() != TEST_ARCHIVE_HASH: |
+ os.remove(archive) |
+ raise Exception('Hash mismatch of test data file') |
+ archive = tarfile.open(archive, 'r:gz') |
+ 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) |
+ shutil.move(os.path.join(self.root, TEST_ARCHIVE_TOP), directory) |
+ |
+ def DownloadSinon(self): |
+ directory = os.path.join(self.root, SINON_NAME) |
+ if not os.path.exists(directory): |
+ os.mkdir(directory) |
+ path = os.path.join(directory, SINON_FILENAME) |
+ if not os.path.exists(path): |
+ urllib.urlretrieve(SINON_URL, path) |
+ hash = hashlib.sha256() |
+ with open(path, 'rb') as f: |
+ for chunk in iter(lambda: f.read(8192), ''): |
+ hash.update(chunk) |
+ if hash.hexdigest() != SINON_HASH: |
+ os.remove(path) |
+ raise Exception('Hash mismatch of test data file') |
+ |
+ def DownloadData(self): |
+ self.DownloadTestData() |
+ self.DownloadSinon() |
+ |
+ |
+def GetSuite(name, root): |
+ return PromiseAplusTestSuite(name, root) |