| OLD | NEW |
| 1 # Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. | 1 # Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. |
| 2 # | 2 # |
| 3 # Redistribution and use in source and binary forms, with or without | 3 # Redistribution and use in source and binary forms, with or without |
| 4 # modification, are permitted provided that the following conditions | 4 # modification, are permitted provided that the following conditions |
| 5 # are met: | 5 # are met: |
| 6 # | 6 # |
| 7 # 1. Redistributions of source code must retain the above | 7 # 1. Redistributions of source code must retain the above |
| 8 # copyright notice, this list of conditions and the following | 8 # copyright notice, this list of conditions and the following |
| 9 # disclaimer. | 9 # disclaimer. |
| 10 # 2. Redistributions in binary form must reproduce the above | 10 # 2. Redistributions in binary form must reproduce the above |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 logger.setLevel(logging.INFO) | 126 logger.setLevel(logging.INFO) |
| 127 handler = LogHandler() | 127 handler = LogHandler() |
| 128 handler.setLevel(logging.INFO) | 128 handler.setLevel(logging.INFO) |
| 129 logger.addHandler(handler) | 129 logger.addHandler(handler) |
| 130 return handler | 130 return handler |
| 131 | 131 |
| 132 | 132 |
| 133 def parse_args(): | 133 def parse_args(): |
| 134 parser = optparse.OptionParser(usage='usage: %prog [options] [dir_to_import]
[top_of_repo]') | 134 parser = optparse.OptionParser(usage='usage: %prog [options] [dir_to_import]
[top_of_repo]') |
| 135 parser.add_option('-n', '--no-overwrite', dest='overwrite', action='store_fa
lse', default=True, | 135 parser.add_option('-n', '--no-overwrite', dest='overwrite', action='store_fa
lse', default=True, |
| 136 help='Flag to prevent duplicate test files from overwriting existing tes
ts. By default, they will be overwritten.') | 136 help='Flag to prevent duplicate test files from overwritin
g existing tests. By default, they will be overwritten.') |
| 137 parser.add_option('-a', '--all', action='store_true', default=False, | 137 parser.add_option('-a', '--all', action='store_true', default=False, |
| 138 help='Import all tests including reftests, JS tests, and manual/pixel te
sts. By default, only reftests and JS tests are imported.') | 138 help='Import all tests including reftests, JS tests, and m
anual/pixel tests. By default, only reftests and JS tests are imported.') |
| 139 parser.add_option('-d', '--dest-dir', dest='destination', default='w3c', | 139 parser.add_option('-d', '--dest-dir', dest='destination', default='w3c', |
| 140 help='Import into a specified directory relative to the LayoutTests root
. By default, files are imported under LayoutTests/w3c.') | 140 help='Import into a specified directory relative to the La
youtTests root. By default, files are imported under LayoutTests/w3c.') |
| 141 parser.add_option('--ignore-expectations', action='store_true', default=Fals
e, | 141 parser.add_option('--ignore-expectations', action='store_true', default=Fals
e, |
| 142 help='Ignore the W3CImportExpectations file and import everything.') | 142 help='Ignore the W3CImportExpectations file and import eve
rything.') |
| 143 parser.add_option('--dry-run', action='store_true', default=False, | 143 parser.add_option('--dry-run', action='store_true', default=False, |
| 144 help='Dryrun only (don\'t actually write any results).') | 144 help='Dryrun only (don\'t actually write any results).') |
| 145 | 145 |
| 146 options, args = parser.parse_args() | 146 options, args = parser.parse_args() |
| 147 if len(args) > 2: | 147 if len(args) > 2: |
| 148 parser.error('Incorrect number of arguments') | 148 parser.error('Incorrect number of arguments') |
| 149 elif len(args) == 0: | 149 elif len(args) == 0: |
| 150 args = (os.getcwd(),) | 150 args = (os.getcwd(),) |
| 151 return options, args | 151 return options, args |
| 152 | 152 |
| 153 | 153 |
| 154 class TestImporter(object): | 154 class TestImporter(object): |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 214 path_base = path_base.replace(cur_dir, '') | 214 path_base = path_base.replace(cur_dir, '') |
| 215 path_full = self.filesystem.join(root, path_base) | 215 path_full = self.filesystem.join(root, path_base) |
| 216 if path_base in dirs: | 216 if path_base in dirs: |
| 217 dirs.remove(path_base) | 217 dirs.remove(path_base) |
| 218 if not self.options.dry_run and self.import_in_place: | 218 if not self.options.dry_run and self.import_in_place: |
| 219 _log.info(" pruning %s" % path_base) | 219 _log.info(" pruning %s" % path_base) |
| 220 self.filesystem.rmtree(path_full) | 220 self.filesystem.rmtree(path_full) |
| 221 else: | 221 else: |
| 222 _log.info(" skipping %s" % path_base) | 222 _log.info(" skipping %s" % path_base) |
| 223 | 223 |
| 224 | |
| 225 copy_list = [] | 224 copy_list = [] |
| 226 | 225 |
| 227 for filename in files: | 226 for filename in files: |
| 228 path_full = self.filesystem.join(root, filename) | 227 path_full = self.filesystem.join(root, filename) |
| 229 path_base = path_full.replace(directory + '/', '') | 228 path_base = path_full.replace(directory + '/', '') |
| 230 path_base = self.destination_directory.replace(self.layout_tests
_dir + '/', '') + '/' + path_base | 229 path_base = self.destination_directory.replace(self.layout_tests
_dir + '/', '') + '/' + path_base |
| 231 if path_base in paths_to_skip: | 230 if path_base in paths_to_skip: |
| 232 if not self.options.dry_run and self.import_in_place: | 231 if not self.options.dry_run and self.import_in_place: |
| 233 _log.info(" pruning %s" % path_base) | 232 _log.info(" pruning %s" % path_base) |
| 234 self.filesystem.remove(path_full) | 233 self.filesystem.remove(path_full) |
| (...skipping 30 matching lines...) Expand all Loading... |
| 265 # FIXME: Ideally we'd support reading the metadata | 264 # FIXME: Ideally we'd support reading the metadata |
| 266 # directly rather than relying on a naming convention. | 265 # directly rather than relying on a naming convention. |
| 267 # Using a naming convention creates duplicate copies of the | 266 # Using a naming convention creates duplicate copies of the |
| 268 # reference files. | 267 # reference files. |
| 269 ref_file = os.path.splitext(test_basename)[0] + '-expected' | 268 ref_file = os.path.splitext(test_basename)[0] + '-expected' |
| 270 # Make sure to use the extension from the *reference*, not | 269 # Make sure to use the extension from the *reference*, not |
| 271 # from the test, because at least flexbox tests use XHTML | 270 # from the test, because at least flexbox tests use XHTML |
| 272 # references but HTML tests. | 271 # references but HTML tests. |
| 273 ref_file += os.path.splitext(test_info['reference'])[1] | 272 ref_file += os.path.splitext(test_info['reference'])[1] |
| 274 | 273 |
| 275 copy_list.append({'src': test_info['reference'], 'dest': ref
_file, 'reference_support_info': test_info['reference_support_info']}) | 274 copy_list.append({'src': test_info['reference'], 'dest': ref
_file, |
| 275 'reference_support_info': test_info['refer
ence_support_info']}) |
| 276 copy_list.append({'src': test_info['test'], 'dest': filename
}) | 276 copy_list.append({'src': test_info['test'], 'dest': filename
}) |
| 277 | 277 |
| 278 elif 'jstest' in test_info.keys(): | 278 elif 'jstest' in test_info.keys(): |
| 279 jstests += 1 | 279 jstests += 1 |
| 280 total_tests += 1 | 280 total_tests += 1 |
| 281 copy_list.append({'src': fullpath, 'dest': filename}) | 281 copy_list.append({'src': fullpath, 'dest': filename}) |
| 282 else: | 282 else: |
| 283 total_tests += 1 | 283 total_tests += 1 |
| 284 copy_list.append({'src': fullpath, 'dest': filename}) | 284 copy_list.append({'src': fullpath, 'dest': filename}) |
| 285 | 285 |
| 286 if copy_list: | 286 if copy_list: |
| 287 # Only add this directory to the list if there's something to im
port | 287 # Only add this directory to the list if there's something to im
port |
| 288 self.import_list.append({'dirname': root, 'copy_list': copy_list
, | 288 self.import_list.append({'dirname': root, 'copy_list': copy_list
, |
| 289 'reftests': reftests, 'jstests': jstests, 'total_tests': tot
al_tests}) | 289 'reftests': reftests, 'jstests': jstest
s, 'total_tests': total_tests}) |
| 290 | 290 |
| 291 def find_paths_to_skip(self): | 291 def find_paths_to_skip(self): |
| 292 if self.options.ignore_expectations: | 292 if self.options.ignore_expectations: |
| 293 return set() | 293 return set() |
| 294 | 294 |
| 295 paths_to_skip = set() | 295 paths_to_skip = set() |
| 296 port = self.host.port_factory.get() | 296 port = self.host.port_factory.get() |
| 297 w3c_import_expectations_path = self.webkit_finder.path_from_webkit_base(
'LayoutTests', 'W3CImportExpectations') | 297 w3c_import_expectations_path = self.webkit_finder.path_from_webkit_base(
'LayoutTests', 'W3CImportExpectations') |
| 298 w3c_import_expectations = self.filesystem.read_text_file(w3c_import_expe
ctations_path) | 298 w3c_import_expectations = self.filesystem.read_text_file(w3c_import_expe
ctations_path) |
| 299 parser = TestExpectationParser(port, all_tests=(), is_lint_mode=False) | 299 parser = TestExpectationParser(port, all_tests=(), is_lint_mode=False) |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 360 _log.info(' skipping %s' % relpath) | 360 _log.info(' skipping %s' % relpath) |
| 361 else: | 361 else: |
| 362 # FIXME: Maybe doing a file diff is in order here for existi
ng files? | 362 # FIXME: Maybe doing a file diff is in order here for existi
ng files? |
| 363 # In other words, there's no sense in overwriting identical
files, but | 363 # In other words, there's no sense in overwriting identical
files, but |
| 364 # there's no harm in copying the identical thing. | 364 # there's no harm in copying the identical thing. |
| 365 _log.info(' %s' % relpath) | 365 _log.info(' %s' % relpath) |
| 366 | 366 |
| 367 # Only html, xml, or css should be converted | 367 # Only html, xml, or css should be converted |
| 368 # FIXME: Eventually, so should js when support is added for this
type of conversion | 368 # FIXME: Eventually, so should js when support is added for this
type of conversion |
| 369 mimetype = mimetypes.guess_type(orig_filepath) | 369 mimetype = mimetypes.guess_type(orig_filepath) |
| 370 if 'html' in str(mimetype[0]) or 'xml' in str(mimetype[0]) or '
css' in str(mimetype[0]): | 370 if 'html' in str(mimetype[0]) or 'xml' in str(mimetype[0]) or 'c
ss' in str(mimetype[0]): |
| 371 converted_file = convert_for_webkit(new_path, filename=orig_
filepath, reference_support_info=reference_support_info) | 371 converted_file = convert_for_webkit(new_path, filename=orig_
filepath, |
| 372 reference_support_info=r
eference_support_info) |
| 372 | 373 |
| 373 if not converted_file: | 374 if not converted_file: |
| 374 if not self.import_in_place and not self.options.dry_run
: | 375 if not self.import_in_place and not self.options.dry_run
: |
| 375 shutil.copyfile(orig_filepath, new_filepath) # The
file was unmodified. | 376 shutil.copyfile(orig_filepath, new_filepath) # The
file was unmodified. |
| 376 else: | 377 else: |
| 377 for prefixed_property in converted_file[0]: | 378 for prefixed_property in converted_file[0]: |
| 378 total_prefixed_properties.setdefault(prefixed_proper
ty, 0) | 379 total_prefixed_properties.setdefault(prefixed_proper
ty, 0) |
| 379 total_prefixed_properties[prefixed_property] += 1 | 380 total_prefixed_properties[prefixed_property] += 1 |
| 380 | 381 |
| 381 prefixed_properties.extend(set(converted_file[0]) - set(
prefixed_properties)) | 382 prefixed_properties.extend(set(converted_file[0]) - set(
prefixed_properties)) |
| (...skipping 25 matching lines...) Expand all Loading... |
| 407 """ Creates a destination directory that mirrors that of the source dire
ctory """ | 408 """ Creates a destination directory that mirrors that of the source dire
ctory """ |
| 408 | 409 |
| 409 new_subpath = self.dir_to_import[len(self.top_of_repo):] | 410 new_subpath = self.dir_to_import[len(self.top_of_repo):] |
| 410 | 411 |
| 411 destination_directory = os.path.join(self.destination_directory, new_sub
path) | 412 destination_directory = os.path.join(self.destination_directory, new_sub
path) |
| 412 | 413 |
| 413 if not os.path.exists(destination_directory): | 414 if not os.path.exists(destination_directory): |
| 414 os.makedirs(destination_directory) | 415 os.makedirs(destination_directory) |
| 415 | 416 |
| 416 _log.info('Tests will be imported into: %s', destination_directory) | 417 _log.info('Tests will be imported into: %s', destination_directory) |
| OLD | NEW |