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

Unified Diff: webkit/tools/layout_tests/test_types/test_type_base.py

Issue 545145: Move the layout test scripts into a 'webkitpy' subdirectory in preparation... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: try to de-confuse svn and the try bots Created 10 years, 11 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: webkit/tools/layout_tests/test_types/test_type_base.py
===================================================================
--- webkit/tools/layout_tests/test_types/test_type_base.py (revision 36724)
+++ webkit/tools/layout_tests/test_types/test_type_base.py (working copy)
@@ -1,241 +0,0 @@
-# Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Defines the interface TestTypeBase which other test types inherit from.
-
-Also defines the TestArguments "struct" to pass them additional arguments.
-"""
-
-import cgi
-import difflib
-import errno
-import logging
-import os.path
-import subprocess
-
-from layout_package import path_utils
-
-
-class TestArguments(object):
- """Struct-like wrapper for additional arguments needed by
- specific tests."""
- # Whether to save new baseline results.
- new_baseline = False
-
- # Path to the actual PNG file generated by pixel tests
- png_path = None
-
- # Value of checksum generated by pixel tests.
- hash = None
-
- # Whether to use wdiff to generate by-word diffs.
- wdiff = False
-
- # Whether to report the locations of the expected result files used.
- show_sources = False
-
-# Python bug workaround. See the wdiff code in WriteOutputFiles for an
-# explanation.
-_wdiff_available = True
-
-
-class TestTypeBase(object):
-
- # Filename pieces when writing failures to the test results directory.
- FILENAME_SUFFIX_ACTUAL = "-actual"
- FILENAME_SUFFIX_EXPECTED = "-expected"
- FILENAME_SUFFIX_DIFF = "-diff"
- FILENAME_SUFFIX_WDIFF = "-wdiff.html"
- FILENAME_SUFFIX_COMPARE = "-diff.png"
-
- def __init__(self, platform, root_output_dir):
- """Initialize a TestTypeBase object.
-
- Args:
- platform: the platform (e.g., 'chromium-mac-leopard')
- identifying the platform-specific results to be used.
- root_output_dir: The unix style path to the output dir.
- """
- self._root_output_dir = root_output_dir
- self._platform = platform
-
- def _MakeOutputDirectory(self, filename):
- """Creates the output directory (if needed) for a given test
- filename."""
- output_filename = os.path.join(self._root_output_dir,
- path_utils.RelativeTestFilename(filename))
- path_utils.MaybeMakeDirectory(os.path.split(output_filename)[0])
-
- def _SaveBaselineData(self, filename, data, modifier):
- """Saves a new baseline file into the platform directory.
-
- The file will be named simply "<test>-expected<modifier>", suitable for
- use as the expected results in a later run.
-
- Args:
- filename: path to the test file
- data: result to be saved as the new baseline
- modifier: type of the result file, e.g. ".txt" or ".png"
- """
- relative_dir = os.path.dirname(
- path_utils.RelativeTestFilename(filename))
- output_dir = os.path.join(
- path_utils.ChromiumBaselinePath(self._platform), relative_dir)
- output_file = os.path.basename(os.path.splitext(filename)[0] +
- self.FILENAME_SUFFIX_EXPECTED + modifier)
-
- path_utils.MaybeMakeDirectory(output_dir)
- output_path = os.path.join(output_dir, output_file)
- logging.debug('writing new baseline to "%s"' % (output_path))
- open(output_path, "wb").write(data)
-
- def OutputFilename(self, filename, modifier):
- """Returns a filename inside the output dir that contains modifier.
-
- For example, if filename is c:/.../fast/dom/foo.html and modifier is
- "-expected.txt", the return value is
- c:/cygwin/tmp/layout-test-results/fast/dom/foo-expected.txt
-
- Args:
- filename: absolute filename to test file
- modifier: a string to replace the extension of filename with
-
- Return:
- The absolute windows path to the output filename
- """
- output_filename = os.path.join(self._root_output_dir,
- path_utils.RelativeTestFilename(filename))
- return os.path.splitext(output_filename)[0] + modifier
-
- def CompareOutput(self, filename, proc, output, test_args, target):
- """Method that compares the output from the test with the
- expected value.
-
- This is an abstract method to be implemented by all sub classes.
-
- Args:
- filename: absolute filename to test file
- proc: a reference to the test_shell process
- output: a string containing the output of the test
- test_args: a TestArguments object holding optional additional
- arguments
- target: Debug or Release
-
- Return:
- a list of TestFailure objects, empty if the test passes
- """
- raise NotImplemented
-
- def WriteOutputFiles(self, filename, test_type, file_type, output,
- expected, diff=True, wdiff=False):
- """Writes the test output, the expected output and optionally the diff
- between the two to files in the results directory.
-
- The full output filename of the actual, for example, will be
- <filename><test_type>-actual<file_type>
- For instance,
- my_test-simp-actual.txt
-
- Args:
- filename: The test filename
- test_type: A string describing the test type, e.g. "simp"
- file_type: A string describing the test output file type, e.g. ".txt"
- output: A string containing the test output
- expected: A string containing the expected test output
- diff: if True, write a file containing the diffs too. This should be
- False for results that are not text
- wdiff: if True, write an HTML file containing word-by-word diffs
- """
- self._MakeOutputDirectory(filename)
- actual_filename = self.OutputFilename(filename,
- test_type + self.FILENAME_SUFFIX_ACTUAL + file_type)
- expected_filename = self.OutputFilename(filename,
- test_type + self.FILENAME_SUFFIX_EXPECTED + file_type)
- if output:
- open(actual_filename, "wb").write(output)
- if expected:
- open(expected_filename, "wb").write(expected)
-
- if not output or not expected:
- return
-
- if diff:
- diff = difflib.unified_diff(expected.splitlines(True),
- output.splitlines(True),
- expected_filename,
- actual_filename)
-
- diff_filename = self.OutputFilename(filename,
- test_type + self.FILENAME_SUFFIX_DIFF + file_type)
- open(diff_filename, "wb").write(''.join(diff))
-
- if wdiff:
- # Shell out to wdiff to get colored inline diffs.
- executable = path_utils.WDiffPath()
- cmd = [executable,
- '--start-delete=##WDIFF_DEL##',
- '--end-delete=##WDIFF_END##',
- '--start-insert=##WDIFF_ADD##',
- '--end-insert=##WDIFF_END##',
- expected_filename,
- actual_filename]
- filename = self.OutputFilename(filename,
- test_type + self.FILENAME_SUFFIX_WDIFF)
-
- global _wdiff_available
-
- try:
- # Python's Popen has a bug that causes any pipes opened to a
- # process that can't be executed to be leaked. Since this
- # code is specifically designed to tolerate exec failures
- # to gracefully handle cases where wdiff is not installed,
- # the bug results in a massive file descriptor leak. As a
- # workaround, if an exec failure is ever experienced for
- # wdiff, assume it's not available. This will leak one
- # file descriptor but that's better than leaking each time
- # wdiff would be run.
- #
- # http://mail.python.org/pipermail/python-list/
- # 2008-August/505753.html
- # http://bugs.python.org/issue3210
- #
- # It also has a threading bug, so we don't output wdiff if
- # the Popen raises a ValueError.
- # http://bugs.python.org/issue1236
- if _wdiff_available:
- wdiff = subprocess.Popen(
- cmd, stdout=subprocess.PIPE).communicate()[0]
- wdiff_failed = False
-
- except OSError, e:
- if (e.errno == errno.ENOENT or e.errno == errno.EACCES or
- e.errno == errno.ECHILD):
- _wdiff_available = False
- else:
- raise e
- except ValueError, e:
- wdiff_failed = True
-
- out = open(filename, 'wb')
-
- if not _wdiff_available:
- out.write(
- "wdiff not installed.<br/> "
- "If you're running OS X, you can install via macports."
- "<br/>"
- "If running Ubuntu linux, you can run "
- "'sudo apt-get install wdiff'.")
- elif wdiff_failed:
- out.write('wdiff failed due to running with multiple '
- 'test_shells in parallel.')
- else:
- wdiff = cgi.escape(wdiff)
- wdiff = wdiff.replace('##WDIFF_DEL##', '<span class=del>')
- wdiff = wdiff.replace('##WDIFF_ADD##', '<span class=add>')
- wdiff = wdiff.replace('##WDIFF_END##', '</span>')
- out.write('<head><style>.del { background: #faa; } ')
- out.write('.add { background: #afa; }</style></head>')
- out.write('<pre>' + wdiff + '</pre>')
-
- out.close()
« no previous file with comments | « webkit/tools/layout_tests/test_types/image_diff.py ('k') | webkit/tools/layout_tests/test_types/text_diff.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698