diff options
Diffstat (limited to 'Tools/Scripts/webkitpy/w3c/test_parser.py')
-rw-r--r-- | Tools/Scripts/webkitpy/w3c/test_parser.py | 162 |
1 files changed, 0 insertions, 162 deletions
diff --git a/Tools/Scripts/webkitpy/w3c/test_parser.py b/Tools/Scripts/webkitpy/w3c/test_parser.py deleted file mode 100644 index bb66fdae6..000000000 --- a/Tools/Scripts/webkitpy/w3c/test_parser.py +++ /dev/null @@ -1,162 +0,0 @@ -#!/usr/bin/env python - -# Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. -# -# 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 logging -import re - -from webkitpy.common.host import Host -from webkitpy.thirdparty.BeautifulSoup import BeautifulSoup as Parser - - -_log = logging.getLogger(__name__) - - -class TestParser(object): - - def __init__(self, options, filename): - self.options = options - self.filename = filename - self.host = Host() - self.filesystem = self.host.filesystem - - self.test_doc = None - self.ref_doc = None - self.load_file(filename) - - def load_file(self, filename): - if self.filesystem.isfile(filename): - try: - self.test_doc = Parser(self.filesystem.read_binary_file(filename)) - except: - # FIXME: Figure out what to do if we can't parse the file. - _log.error("Failed to parse %s", filename) - self.test_doc is None - else: - if self.filesystem.isdir(filename): - # FIXME: Figure out what is triggering this and what to do about it. - _log.error("Trying to load %s, which is a directory", filename) - self.test_doc = None - self.ref_doc = None - - def analyze_test(self, test_contents=None, ref_contents=None): - """ Analyzes a file to determine if it's a test, what type of test, and what reference or support files it requires. Returns all of the test info """ - - test_info = None - - if test_contents is None and self.test_doc is None: - return test_info - - if test_contents is not None: - self.test_doc = Parser(test_contents) - - if ref_contents is not None: - self.ref_doc = Parser(ref_contents) - - # First check if it's a reftest - - matches = self.reference_links_of_type('match') + self.reference_links_of_type('mismatch') - if matches: - if len(matches) > 1: - # FIXME: Is this actually true? We should fix this. - _log.warning('Multiple references are not supported. Importing the first ref defined in %s', - self.filesystem.basename(self.filename)) - - try: - ref_file = self.filesystem.join(self.filesystem.dirname(self.filename), matches[0]['href']) - except KeyError as e: - # FIXME: Figure out what to do w/ invalid test files. - _log.error('%s has a reference link but is missing the "href"', self.filesystem) - return None - - if self.ref_doc is None: - self.ref_doc = self.load_file(ref_file) - - test_info = {'test': self.filename, 'reference': ref_file} - - # If the ref file path is relative, we need to check it for - # relative paths also because when it lands in WebKit, it will be - # moved down into the test dir. - # - # Note: The test files themselves are not checked for support files - # outside their directories as the convention in the CSSWG is to - # put all support files in the same dir or subdir as the test. - # - # All non-test files in the test's directory tree are normally - # copied as part of the import as they are assumed to be required - # support files. - # - # *But*, there is exactly one case in the entire css2.1 suite where - # a test depends on a file that lives in a different directory, - # which depends on another file that lives outside of its - # directory. This code covers that case :) - if matches[0]['href'].startswith('..'): - support_files = self.support_files(self.ref_doc) - test_info['refsupport'] = support_files - - elif self.is_jstest(): - test_info = {'test': self.filename, 'jstest': True} - elif self.options['all'] is True and not('-ref' in self.filename) and not('reference' in self.filename): - test_info = {'test': self.filename} - - return test_info - - def reference_links_of_type(self, reftest_type): - return self.test_doc.findAll(rel=reftest_type) - - def is_jstest(self): - """Returns whether the file appears to be a jstest, by searching for usage of W3C-style testharness paths.""" - return bool(self.test_doc.find(src=re.compile('[\'\"/]?/resources/testharness'))) - - def support_files(self, doc): - """ Searches the file for all paths specified in url()'s, href or src attributes.""" - support_files = [] - - if doc is None: - return support_files - - elements_with_src_attributes = doc.findAll(src=re.compile('.*')) - elements_with_href_attributes = doc.findAll(href=re.compile('.*')) - - url_pattern = re.compile('url\(.*\)') - urls = [] - for url in doc.findAll(text=url_pattern): - url = re.search(url_pattern, url) - url = re.sub('url\([\'\"]?', '', url.group(0)) - url = re.sub('[\'\"]?\)', '', url) - urls.append(url) - - src_paths = [src_tag['src'] for src_tag in elements_with_src_attributes] - href_paths = [href_tag['href'] for href_tag in elements_with_href_attributes] - - paths = src_paths + href_paths + urls - for path in paths: - if not(path.startswith('http:')) and not(path.startswith('mailto:')): - support_files.append(path) - - return support_files |