Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2479)

Unified Diff: Tools/Scripts/webkitpy/w3c/test_importer.py

Issue 15901008: Modify w3c import script to be able to run over a whole repo. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: add more FIXME comments for error handling Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Tools/Scripts/webkitpy/w3c/test_importer.py
diff --git a/Tools/Scripts/webkitpy/w3c/test_importer.py b/Tools/Scripts/webkitpy/w3c/test_importer.py
index 1173e574f07fa6c924e04b9b5fdaddd66a1c3faa..6bfc15014ce48206d1af3e45ece670aeead57f93 100644
--- a/Tools/Scripts/webkitpy/w3c/test_importer.py
+++ b/Tools/Scripts/webkitpy/w3c/test_importer.py
@@ -110,51 +110,51 @@ CHANGESET_NOT_AVAILABLE = 'Not Available'
def main(_argv, _stdout, _stderr):
options, args = parse_args()
- import_dir = validate_import_directory(args[0])
- test_importer = TestImporter(Host(), import_dir, options)
+ import_dir = args[0]
+ if len(args) == 1:
+ repo_dir = os.path.dirname(import_dir)
+ else:
+ repo_dir = args[1]
+
+ if not os.path.exists(import_dir):
+ sys.exit('Source directory %s not found!' % import_dir)
+
+ if not os.path.exists(repo_dir):
+ sys.exit('Repository directory %s not found!' % repo_dir)
+ if not repo_dir in import_dir:
+ sys.exit('Repository directory %s must be a parent of %s' % (repo_dir, import_dir))
+
+ test_importer = TestImporter(Host(), import_dir, repo_dir, options)
test_importer.do_import()
def parse_args():
- parser = optparse.OptionParser(usage='usage: %prog [options] w3c_test_directory')
+ parser = optparse.OptionParser(usage='usage: %prog [options] w3c_test_directory [repo_directory]')
parser.add_option('-n', '--no-overwrite', dest='overwrite', action='store_false', default=True,
help='Flag to prevent duplicate test files from overwriting existing tests. By default, they will be overwritten')
parser.add_option('-a', '--all', action='store_true', default=False,
help='Import all tests including reftests, JS tests, and manual/pixel tests. By default, only reftests and JS tests are imported')
options, args = parser.parse_args()
- if len(args) != 1:
+ if len(args) not in (1, 2):
parser.error('Incorrect number of arguments')
return options, args
-def validate_import_directory(import_dir):
- if not os.path.exists(import_dir):
- sys.exit('Source directory %s not found!' % import_dir)
-
- # Make sure the tests are officially submitted to the W3C, either approved or
- # submitted following their directory naming conventions
- if import_dir.find('approved') == -1 and import_dir.find('submitted') == -1:
- # If not pointed directly to the approved directory or to any submitted
- # directory, check for a submitted subdirectory and go with that
- import_dir = os.path.join(import_dir, 'submitted')
- if not os.path.exists(os.path.join(import_dir)):
- sys.exit('Unable to import tests that aren\'t approved or submitted to the W3C')
-
- return import_dir
-
-
class TestImporter(object):
- def __init__(self, host, source_directory, options):
+ def __init__(self, host, source_directory, repo_dir, options):
self.host = host
self.source_directory = source_directory
self.options = options
self.filesystem = self.host.filesystem
+
self._webkit_root = __file__.split(self.filesystem.sep + 'Tools')[0]
+ self.repo_dir = repo_dir
+ subdirs = os.path.dirname(os.path.relpath(source_directory, repo_dir))
- self.destination_directory = self.path_from_webkit_root("LayoutTests", "csswg")
+ self.destination_directory = os.path.join(self.path_from_webkit_root("LayoutTests"), 'w3c', subdirs)
self.changeset = CHANGESET_NOT_AVAILABLE
self.test_status = TEST_STATUS_UNKNOWN
@@ -185,7 +185,9 @@ class TestImporter(object):
jstests = 0
# "archive" and "data" dirs are internal csswg things that live in every approved directory.
- DIRS_TO_SKIP = ('.git', '.hg', 'data', 'archive')
+ # FIXME: skip 'incoming' tests for now, but we should rework the 'test_status' concept and
+ # support reading them as well.
+ DIRS_TO_SKIP = ('.git', '.hg', 'data', 'archive', 'incoming')
for d in DIRS_TO_SKIP:
if d in dirs:
dirs.remove(d)
@@ -257,9 +259,6 @@ class TestImporter(object):
'reftests': reftests, 'jstests': jstests, 'total_tests': total_tests})
def import_tests(self):
- if self.import_list:
- self.setup_destination_directory()
-
converter = W3CTestConverter()
total_imported_tests = 0
total_imported_reftests = 0
@@ -267,7 +266,6 @@ class TestImporter(object):
total_prefixed_properties = {}
for dir_to_copy in self.import_list:
-
total_imported_tests += dir_to_copy['total_tests']
total_imported_reftests += dir_to_copy['reftests']
total_imported_jstests += dir_to_copy['jstests']
@@ -277,15 +275,11 @@ class TestImporter(object):
if not dir_to_copy['copy_list']:
continue
- # Build the subpath starting with the approved/submitted directory
orig_path = dir_to_copy['dirname']
- start = orig_path.find(self.test_status)
- new_subpath = orig_path[start:len(orig_path)]
- # Append the new subpath to the destination_directory
- new_path = os.path.join(self.destination_directory, new_subpath)
+ subpath = os.path.relpath(orig_path, self.repo_dir)
+ new_path = os.path.join(self.destination_directory, subpath)
- # Create the destination subdirectories if not there
if not(os.path.exists(new_path)):
os.makedirs(new_path)
@@ -295,7 +289,10 @@ class TestImporter(object):
# FIXME: Split this block into a separate function.
orig_filepath = os.path.normpath(file_to_copy['src'])
- assert(not os.path.isdir(orig_filepath))
+ if os.path.isdir(orig_filepath):
+ # FIXME: Figure out what is triggering this and what to do about it.
+ print 'Error: %s refers to a directory' % orig_filepath
+ continue
if not(os.path.exists(orig_filepath)):
print 'Warning: ' + orig_filepath + ' not found. Possible error in the test.'
@@ -357,7 +354,7 @@ class TestImporter(object):
self.update_test_status()
start = self.source_directory.find(self.test_status)
- new_subpath = self.source_directory[start:len(self.source_directory)]
+ new_subpath = self.source_directory[len(self.repo_dir):]
destination_directory = os.path.join(self.destination_directory, new_subpath)

Powered by Google App Engine
This is Rietveld 408576698