Implement --download-data for test harness.
This allows the test harness to download missing test suite data if necessary. We use the bzip2 archive for test262 because it is faster than cloning the repository and also works without any Mercurial installation. R=yangguo@chromium.org Review URL: https://chromiumcodereview.appspot.com/9619002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@10955 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
886a1c6469
commit
b732b2e32a
@ -29,8 +29,14 @@
|
||||
import test
|
||||
import os
|
||||
from os.path import join, exists
|
||||
import urllib
|
||||
import hashlib
|
||||
import tarfile
|
||||
|
||||
|
||||
TEST_262_ARCHIVE_REVISION = '3a890174343c' # This is the r309 revision.
|
||||
TEST_262_ARCHIVE_MD5 = 'be5d4cfbe69cef70430907b8f3a92b50'
|
||||
TEST_262_URL = 'http://hg.ecmascript.org/tests/test262/archive/%s.tar.bz2'
|
||||
TEST_262_HARNESS = ['sta.js']
|
||||
|
||||
|
||||
@ -93,6 +99,28 @@ class Test262TestConfiguration(test.TestConfiguration):
|
||||
tests.append(test)
|
||||
return tests
|
||||
|
||||
def DownloadData(self):
|
||||
revision = TEST_262_ARCHIVE_REVISION
|
||||
archive_url = TEST_262_URL % revision
|
||||
archive_name = join(self.root, 'test262-%s.tar.bz2' % revision)
|
||||
directory_name = join(self.root, "test262-%s" % revision)
|
||||
if not exists(directory_name) or not exists(archive_name):
|
||||
if not exists(archive_name):
|
||||
print "Downloading test data from %s ..." % archive_url
|
||||
urllib.urlretrieve(archive_url, archive_name)
|
||||
if not 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:
|
||||
raise Exception("Hash mismatch of test data file")
|
||||
archive = tarfile.open(archive_name, 'r:bz2')
|
||||
archive.extractall(join(self.root))
|
||||
if not exists(join(self.root, 'data')):
|
||||
os.symlink(directory_name, join(self.root, 'data'))
|
||||
|
||||
def GetBuildRequirements(self):
|
||||
return ['d8']
|
||||
|
||||
|
@ -73,6 +73,8 @@ def BuildOptions():
|
||||
choices=PROGRESS_INDICATORS, default="mono")
|
||||
result.add_option("--report", help="Print a summary of the tests to be run",
|
||||
default=False, action="store_true")
|
||||
result.add_option("--download-data", help="Download missing test suite data",
|
||||
default=False, action="store_true")
|
||||
result.add_option("-s", "--suite", help="A test suite",
|
||||
default=[], action="append")
|
||||
result.add_option("-t", "--timeout", help="Timeout in seconds",
|
||||
@ -161,6 +163,8 @@ def PassOnOptions(options):
|
||||
result += ['--progress=' + options.progress]
|
||||
if options.report:
|
||||
result += ['--report']
|
||||
if options.download_data:
|
||||
result += ['--download-data']
|
||||
if options.suite != []:
|
||||
for suite in options.suite:
|
||||
result += ['--suite=../../test/' + suite]
|
||||
|
@ -631,9 +631,15 @@ class TestRepository(TestSuite):
|
||||
def GetBuildRequirements(self, path, context):
|
||||
return self.GetConfiguration(context).GetBuildRequirements()
|
||||
|
||||
def DownloadData(self, context):
|
||||
config = self.GetConfiguration(context)
|
||||
if 'DownloadData' in dir(config):
|
||||
config.DownloadData()
|
||||
|
||||
def AddTestsToList(self, result, current_path, path, context, mode):
|
||||
for v in self.GetConfiguration(context).VariantFlags():
|
||||
tests = self.GetConfiguration(context).ListTests(current_path, path, mode, v)
|
||||
config = self.GetConfiguration(context)
|
||||
for v in config.VariantFlags():
|
||||
tests = config.ListTests(current_path, path, mode, v)
|
||||
for t in tests: t.variant_flags = v
|
||||
result += tests
|
||||
|
||||
@ -655,6 +661,12 @@ class LiteralTestSuite(TestSuite):
|
||||
result += test.GetBuildRequirements(rest, context)
|
||||
return result
|
||||
|
||||
def DownloadData(self, path, context):
|
||||
(name, rest) = CarCdr(path)
|
||||
for test in self.tests:
|
||||
if not name or name.match(test.GetName()):
|
||||
test.DownloadData(context)
|
||||
|
||||
def ListTests(self, current_path, path, context, mode, variant_flags):
|
||||
(name, rest) = CarCdr(path)
|
||||
result = [ ]
|
||||
@ -1192,6 +1204,8 @@ def BuildOptions():
|
||||
default='scons')
|
||||
result.add_option("--report", help="Print a summary of the tests to be run",
|
||||
default=False, action="store_true")
|
||||
result.add_option("--download-data", help="Download missing test suite data",
|
||||
default=False, action="store_true")
|
||||
result.add_option("-s", "--suite", help="A test suite",
|
||||
default=[], action="append")
|
||||
result.add_option("-t", "--timeout", help="Timeout in seconds",
|
||||
@ -1462,6 +1476,11 @@ def Main():
|
||||
root.GetTestStatus(context, sections, defs)
|
||||
config = Configuration(sections, defs)
|
||||
|
||||
# Download missing test suite data if requested.
|
||||
if options.download_data:
|
||||
for path in paths:
|
||||
root.DownloadData(path, context)
|
||||
|
||||
# List the tests
|
||||
all_cases = [ ]
|
||||
all_unused = [ ]
|
||||
|
Loading…
Reference in New Issue
Block a user