diff options
Diffstat (limited to 'WebKitTools/Scripts/webkitpy/layout_tests/layout_package')
5 files changed, 33 insertions, 155 deletions
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py index d420631..00ff211 100644 --- a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py +++ b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py @@ -351,11 +351,20 @@ class Printer(object): filename = result.filename test_name = self._port.relative_test_filename(filename) self._write('trace: %s' % test_name) - self._write(' txt: %s' % - self._port.relative_test_filename( - self._port.expected_filename(filename, '.txt'))) + txt_file = self._port.expected_filename(filename, '.txt') + if self._port.path_exists(txt_file): + self._write(' txt: %s' % + self._port.relative_test_filename(txt_file)) + else: + self._write(' txt: <none>') + checksum_file = self._port.expected_filename(filename, '.checksum') + if self._port.path_exists(checksum_file): + self._write(' sum: %s' % + self._port.relative_test_filename(checksum_file)) + else: + self._write(' sum: <none>') png_file = self._port.expected_filename(filename, '.png') - if os.path.exists(png_file): + if self._port.path_exists(png_file): self._write(' png: %s' % self._port.relative_test_filename(png_file)) else: diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py index 29139d0..0344aa7 100644 --- a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py +++ b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing_unittest.py @@ -151,7 +151,7 @@ class Testprinter(unittest.TestCase): expectations = test_expectations.TestExpectations( self._port, test_paths, expectations_str, self._port.test_platform_name(), is_debug_mode=False, - is_lint_mode=False, tests_are_present=False) + is_lint_mode=False) rs = run_webkit_tests.ResultSummary(expectations, test_paths) return test_paths, rs, expectations @@ -318,6 +318,16 @@ class Testprinter(unittest.TestCase): self.assertFalse(err.empty()) printer, err, out = self.get_printer(['--print', 'trace-everything']) + result = self.get_result('passes/image.html') + printer.print_test_result(result, expected=True, exp_str='', + got_str='') + result = self.get_result('failures/expected/missing_text.html') + printer.print_test_result(result, expected=True, exp_str='', + got_str='') + result = self.get_result('failures/expected/missing_check.html') + printer.print_test_result(result, expected=True, exp_str='', + got_str='') + result = self.get_result('failures/expected/missing_image.html') printer.print_test_result(result, expected=True, exp_str='', got_str='') self.assertFalse(err.empty()) diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_expectations.py b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_expectations.py index 3d8349b..508a6ad 100644 --- a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_expectations.py +++ b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_expectations.py @@ -87,8 +87,7 @@ class TestExpectations: TEST_LIST = "test_expectations.txt" def __init__(self, port, tests, expectations, test_platform_name, - is_debug_mode, is_lint_mode, tests_are_present=True, - overrides=None): + is_debug_mode, is_lint_mode, overrides=None): """Loads and parses the test expectations given in the string. Args: port: handle to object containing platform-specific functionality @@ -101,10 +100,6 @@ class TestExpectations: in the expectations is_lint_mode: If True, just parse the expectations string looking for errors. - tests_are_present: whether the test files exist in the file - system and can be probed for. This is useful for distinguishing - test files from directories, and is needed by the LTTF - dashboard, where the files aren't actually locally present. overrides: test expectations that are allowed to override any entries in |expectations|. This is used by callers that need to manage two sets of expectations (e.g., upstream @@ -112,7 +107,7 @@ class TestExpectations: """ self._expected_failures = TestExpectationsFile(port, expectations, tests, test_platform_name, is_debug_mode, is_lint_mode, - tests_are_present=tests_are_present, overrides=overrides) + overrides=overrides) # TODO(ojan): Allow for removing skipped tests when getting the list of # tests to run, but not when getting metrics. @@ -302,8 +297,7 @@ class TestExpectationsFile: 'flaky': FLAKY} def __init__(self, port, expectations, full_test_list, test_platform_name, - is_debug_mode, is_lint_mode, suppress_errors=False, - tests_are_present=True, overrides=None): + is_debug_mode, is_lint_mode, suppress_errors=False, overrides=None): """ expectations: Contents of the expectations file full_test_list: The list of all tests to be run pending processing of @@ -314,9 +308,6 @@ class TestExpectationsFile: is_debug_mode: Whether we testing a test_shell built debug mode. is_lint_mode: Whether this is just linting test_expecatations.txt. suppress_errors: Whether to suppress lint errors. - tests_are_present: Whether the test files are present in the local - filesystem. The LTTF Dashboard uses False here to avoid having to - keep a local copy of the tree. overrides: test expectations that are allowed to override any entries in |expectations|. This is used by callers that need to manage two sets of expectations (e.g., upstream @@ -329,7 +320,6 @@ class TestExpectationsFile: self._test_platform_name = test_platform_name self._is_debug_mode = is_debug_mode self._is_lint_mode = is_lint_mode - self._tests_are_present = tests_are_present self._overrides = overrides self._suppress_errors = suppress_errors self._errors = [] @@ -462,7 +452,7 @@ class TestExpectationsFile: def remove_platform_from_expectations(self, tests, platform): """Returns a copy of the expectations with the tests matching the - platform remove. + platform removed. If a test is in the test list and has an option that matches the given platform, remove the matching platform and save the updated test back @@ -699,8 +689,8 @@ class TestExpectationsFile: # WebKit's way of skipping tests is to add a -disabled suffix. # So we should consider the path existing if the path or the # -disabled version exists. - if (self._tests_are_present and not os.path.exists(full_path) - and not os.path.exists(full_path + '-disabled')): + if (not self._port.path_exists(full_path) + and not self._port.path_exists(full_path + '-disabled')): # Log a non fatal error here since you hit this case any # time you update test_expectations.txt without syncing # the LayoutTests directory @@ -735,7 +725,8 @@ class TestExpectationsFile: path and make sure directories end with the OS path separator.""" path = os.path.join(self._port.layout_tests_dir(), test_list_path) path = os.path.normpath(path) - path = self._fix_dir(path) + if self._port.path_isdir(path): + path = os.path.join(path, '') result = [] for test in self._full_test_list: @@ -743,20 +734,6 @@ class TestExpectationsFile: result.append(test) return result - def _fix_dir(self, path): - """Check to see if the path points to a directory, and if so, append - the directory separator if necessary.""" - if self._tests_are_present: - if os.path.isdir(path): - path = os.path.join(path, '') - else: - # If we can't check the filesystem to see if this is a directory, - # we assume that files w/o an extension are directories. - # TODO(dpranke): What happens w/ LayoutTests/css2.1 ? - if os.path.splitext(path)[1] == '': - path = os.path.join(path, '') - return path - def _add_tests(self, tests, expectations, test_list_path, lineno, modifiers, options, overrides_allowed): for test in tests: diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py index 26eb18d..2e1b6ec 100644 --- a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py +++ b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_expectations_unittest.py @@ -106,14 +106,13 @@ BUG_TEST WONTFIX WIN : failures/expected/image.html = IMAGE """ def parse_exp(self, expectations, overrides=None, is_lint_mode=False, - is_debug_mode=False, tests_are_present=True): + is_debug_mode=False): self._exp = TestExpectations(self._port, tests=self.get_basic_tests(), expectations=expectations, test_platform_name=self._port.test_platform_name(), is_debug_mode=is_debug_mode, is_lint_mode=is_lint_mode, - tests_are_present=tests_are_present, overrides=overrides) def assert_exp(self, test, result): @@ -151,10 +150,6 @@ BUGX DEFER : failures/expected = IMAGE self.assert_exp('failures/expected/text.html', TEXT) self.assert_exp('failures/expected/crash.html', IMAGE) - self.parse_exp(exp_str, tests_are_present=False) - self.assert_exp('failures/expected/text.html', TEXT) - self.assert_exp('failures/expected/crash.html', IMAGE) - def test_release_mode(self): self.parse_exp('BUGX DEBUG : failures/expected/text.html = TEXT', is_debug_mode=True) diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_files.py b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_files.py deleted file mode 100644 index 8f79505..0000000 --- a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_files.py +++ /dev/null @@ -1,113 +0,0 @@ -#!/usr/bin/env python -# Copyright (C) 2010 Google Inc. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * 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. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "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 -# OWNER OR CONTRIBUTORS 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. - -"""This module is used to find all of the layout test files used by Chromium -(across all platforms). It exposes one public function - GatherTestFiles() - -which takes an optional list of paths. If a list is passed in, the returned -list of test files is constrained to those found under the paths passed in, -i.e. calling GatherTestFiles(["LayoutTests/fast"]) will only return files -under that directory.""" - -import glob -import os -import time - -from webkitpy.common.system import logutils - - -_log = logutils.get_logger(__file__) - - -# When collecting test cases, we include any file with these extensions. -_supported_file_extensions = set(['.html', '.shtml', '.xml', '.xhtml', '.xhtmlmp', '.pl', - '.php', '.svg']) -# When collecting test cases, skip these directories -_skipped_directories = set(['.svn', '_svn', 'resources', 'script-tests']) - - -def gather_test_files(port, paths): - """Generate a set of test files and return them. - - Args: - paths: a list of command line paths relative to the webkit/tests - directory. glob patterns are ok. - """ - gather_start_time = time.time() - paths_to_walk = set() - # if paths is empty, provide a pre-defined list. - if paths: - _log.debug("Gathering tests from: %s relative to %s" % (paths, port.layout_tests_dir())) - for path in paths: - # If there's an * in the name, assume it's a glob pattern. - path = os.path.join(port.layout_tests_dir(), path) - if path.find('*') > -1: - filenames = glob.glob(path) - paths_to_walk.update(filenames) - else: - paths_to_walk.add(path) - else: - _log.debug("Gathering tests from: %s" % port.layout_tests_dir()) - paths_to_walk.add(port.layout_tests_dir()) - - # Now walk all the paths passed in on the command line and get filenames - test_files = set() - for path in paths_to_walk: - if os.path.isfile(path) and _has_supported_extension(path): - test_files.add(os.path.normpath(path)) - continue - - for root, dirs, files in os.walk(path): - # Don't walk skipped directories or their sub-directories. - if os.path.basename(root) in _skipped_directories: - del dirs[:] - continue - # This copy and for-in is slightly inefficient, but - # the extra walk avoidance consistently shaves .5 seconds - # off of total walk() time on my MacBook Pro. - for directory in dirs[:]: - if directory in _skipped_directories: - dirs.remove(directory) - - for filename in files: - if _has_supported_extension(filename): - filename = os.path.join(root, filename) - filename = os.path.normpath(filename) - test_files.add(filename) - - gather_time = time.time() - gather_start_time - _log.debug("Test gathering took %f seconds" % gather_time) - - return test_files - - -def _has_supported_extension(filename): - """Return true if filename is one of the file extensions we want to run a - test on.""" - extension = os.path.splitext(filename)[1] - return extension in _supported_file_extensions |