#!/usr/bin/env python # Copyright (C) 2017 Igalia S.L. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above # copyright notice, this list of conditions and the following # disclaimer. # 2. 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. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER "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 HOLDER 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 json import logging import argparse import os import sys from webkitpy.common.host import Host from webkitpy.common.system.filesystem import FileSystem from webkitpy.common.system.logutils import configure_logging from webkitpy.common.webkit_finder import WebKitFinder from webkitpy.common.checkout.scm.git import Git _log = logging.getLogger(__name__) host = Host() host.initialize_scm() webkit_finder = WebKitFinder(host.filesystem) class Importer(object): def __init__(self, config_path, download_path, destination_path): self.config = json.loads(host.filesystem.read_text_file(config_path)) self.download_path = download_path self.destination_path = destination_path def download_tests(self): host.filesystem.maybe_make_directory(host.filesystem.dirname(self.download_path)) needs_clone = not host.filesystem.exists(self.download_path) if needs_clone: _log.info('Cloning %s into %s...' % (self.config['repository'], self.download_path)) Git.clone(self.config['repository'], self.download_path, host.executive) git = Git(self.download_path, None, executive=host.executive, filesystem=host.filesystem) if not needs_clone: _log.info('Fetching %s...' % self.config['repository']) git.fetch() _log.info('Checking out revision %s' % self.config['revision']) git.checkout(self.config['revision'], False) def import_tests(self): def should_skip_file(source_path, full_paths_to_skip): for path in full_paths_to_skip: if source_path.startswith(path): return True return False _log.info('Importing tests') full_paths_to_skip = [host.filesystem.join(self.download_path, path) for path in self.config['paths_to_skip']] for path in self.config['paths_to_import']: source_directory = host.filesystem.join(self.download_path, path) for source_path in host.filesystem.files_under(source_directory): if should_skip_file(source_path, full_paths_to_skip): continue destination_path = host.filesystem.join(self.destination_path, host.filesystem.relpath(source_path, self.download_path)) host.filesystem.maybe_make_directory(host.filesystem.dirname(destination_path)) host.filesystem.copyfile(source_path, destination_path) option_parser = argparse.ArgumentParser(description="Import webdriver tests from Selenium and W3C suites.", epilog="Refer to WebDriverTests/README.md for more information.") option_parser.add_argument('--w3c', action='store_true', dest='w3c', help='Import W3C tests') option_parser.add_argument('--selenium', action='store_true', dest='selenium', help='Import Selenium tests') options = option_parser.parse_args() # Not giving any option means import all. if not options.w3c and not options.selenium: options.w3c = options.selenium = True configure_logging() importers = [] if options.w3c: importer_config_path = webkit_finder.path_from_webkit_base('WebDriverTests', 'imported', 'w3c', 'importer.json') download_path = webkit_finder.path_from_webkit_base('WebKitBuild', 'w3c-tests', 'web-platform-tests') import_path = webkit_finder.path_from_webkit_base('WebDriverTests', 'imported', 'w3c') importers.append(Importer(importer_config_path, download_path, import_path)) if options.selenium: importer_config_path = webkit_finder.path_from_webkit_base('WebDriverTests', 'imported', 'selenium', 'importer.json') download_path = webkit_finder.path_from_webkit_base('WebKitBuild', 'selenium-tests', 'selenium') import_path = webkit_finder.path_from_webkit_base('WebDriverTests', 'imported', 'selenium') importers.append(Importer(importer_config_path, download_path, import_path)) for importer in importers: importer.download_tests() importer.import_tests()