Changeset 78014 in webkit


Ignore:
Timestamp:
Feb 8, 2011 9:33:04 PM (13 years ago)
Author:
hayato@chromium.org
Message:

2011-02-08 Hayato Ito <hayato@chromium.org>

Reviewed by Tony Chang.

[NRWT] Pull up rebaseline code from compare_output() function defined
in text_diff.py and image_diff.py into a SingleTestRunner.

This patch is a first step for eliminating test_type/* classes.

https://bugs.webkit.org/show_bug.cgi?id=53071

  • Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
  • Scripts/webkitpy/layout_tests/test_types/image_diff.py:
  • Scripts/webkitpy/layout_tests/test_types/test_type_base.py:
  • Scripts/webkitpy/layout_tests/test_types/text_diff.py:
Location:
trunk/Tools
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Tools/ChangeLog

    r78012 r78014  
     12011-02-08  Hayato Ito  <hayato@chromium.org>
     2
     3        Reviewed by Tony Chang.
     4
     5        [NRWT] Pull up rebaseline code from compare_output() function defined
     6        in text_diff.py and image_diff.py into a SingleTestRunner.
     7
     8        This patch is a first step for eliminating test_type/* classes.
     9
     10        https://bugs.webkit.org/show_bug.cgi?id=53071
     11
     12        * Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:
     13        * Scripts/webkitpy/layout_tests/test_types/image_diff.py:
     14        * Scripts/webkitpy/layout_tests/test_types/test_type_base.py:
     15        * Scripts/webkitpy/layout_tests/test_types/text_diff.py:
     16
    1172011-02-07  Ojan Vafai  <ojan@chromium.org>
    218
  • trunk/Tools/Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py

    r77998 r78014  
    184184
    185185    def _run(self, driver, test_input):
     186        if self._options.new_baseline or self._options.reset_results:
     187            return self._run_rebaseline(driver, test_input)
     188        return self._run_compare_test(driver, test_input)
     189
     190    def _run_compare_test(self, driver, test_input):
    186191        driver_output = self._driver.run_test(self._driver_input(test_input))
    187192        return self._process_output(driver_output)
    188193
    189     def _process_output(self, driver_output):
    190         """Receives the output from a DumpRenderTree process, subjects it to a
    191         number of tests, and returns a list of failure types the test produced.
     194    def _run_rebaseline(self, driver, test_input):
     195        driver_output = self._driver.run_test(self._driver_input(test_input))
     196        failures = self._handle_error(driver_output)
     197        # FIXME: It the test crashed or timed out, it might be bettter to avoid
     198        # to write new baselines.
     199        self._save_baselines(driver_output)
     200        return TestResult(self._filename, failures, driver_output.test_time)
     201
     202    def _save_baselines(self, driver_output):
     203        # Although all test_shell/DumpRenderTree output should be utf-8,
     204        # we do not ever decode it inside run-webkit-tests.  For some tests
     205        # DumpRenderTree may not output utf-8 text (e.g. webarchives).
     206        self._save_baseline_data(driver_output.text, ".txt", encoding=None,
     207                                 generate_new_baseline=self._options.new_baseline)
     208        if self._options.pixel_tests and driver_output.image_hash:
     209            self._save_baseline_data(driver_output.image, ".png", encoding=None,
     210                                     generate_new_baseline=self._options.new_baseline)
     211            self._save_baseline_data(driver_output.image_hash, ".checksum",
     212                                     encoding="ascii",
     213                                     generate_new_baseline=self._options.new_baseline)
     214
     215    def _save_baseline_data(self, data, modifier, encoding,
     216                            generate_new_baseline=True):
     217        """Saves a new baseline file into the port's baseline directory.
     218
     219        The file will be named simply "<test>-expected<modifier>", suitable for
     220        use as the expected results in a later run.
     221
    192222        Args:
    193           driver_output: a DriverOutput object containing the output from the driver
    194 
    195         Returns: a TestResult object
     223          data: result to be saved as the new baseline
     224          modifier: type of the result file, e.g. ".txt" or ".png"
     225          encoding: file encoding (none, "utf-8", etc.)
     226          generate_new_baseline: whether to enerate a new, platform-specific
     227            baseline, or update the existing one
    196228        """
     229
     230        port = self._port
     231        fs = port._filesystem
     232        if generate_new_baseline:
     233            relative_dir = fs.dirname(self._testname)
     234            baseline_path = port.baseline_path()
     235            output_dir = fs.join(baseline_path, relative_dir)
     236            output_file = fs.basename(fs.splitext(self._filename)[0] +
     237                "-expected" + modifier)
     238            fs.maybe_make_directory(output_dir)
     239            output_path = fs.join(output_dir, output_file)
     240            _log.debug('writing new baseline result "%s"' % (output_path))
     241        else:
     242            output_path = port.expected_filename(self._filename, modifier)
     243            _log.debug('resetting baseline result "%s"' % output_path)
     244
     245        port.update_baseline(output_path, data, encoding)
     246
     247    def _handle_error(self, driver_output):
    197248        failures = []
    198249        fs = self._port._filesystem
    199 
     250        if driver_output.timeout:
     251            failures.append(test_failures.FailureTimeout())
    200252        if driver_output.crash:
    201253            failures.append(test_failures.FailureCrash())
    202         if driver_output.timeout:
    203             failures.append(test_failures.FailureTimeout())
    204 
    205         if driver_output.crash:
    206254            _log.debug("%s Stacktrace for %s:\n%s" % (self._worker_name, self._testname,
    207255                                                      driver_output.error))
     
    213261            _log.debug("%s %s output stderr lines:\n%s" % (self._worker_name, self._testname,
    214262                                                           driver_output.error))
    215 
     263        return failures
     264
     265    def _run_test(self):
     266        driver_output = self._driver.run_test(self._driver_input())
     267        return self._process_output(driver_output)
     268
     269    def _process_output(self, driver_output):
     270        """Receives the output from a DumpRenderTree process, subjects it to a
     271        number of tests, and returns a list of failure types the test produced.
     272        Args:
     273          driver_output: a DriverOutput object containing the output from the driver
     274
     275        Returns: a TestResult object
     276        """
     277        fs = self._port._filesystem
     278        failures = self._handle_error(driver_output)
    216279        expected_driver_output = self._expected_driver_output()
    217280
  • trunk/Tools/Scripts/webkitpy/layout_tests/test_types/image_diff.py

    r77606 r78014  
    5050class ImageDiff(test_type_base.TestTypeBase):
    5151
    52     def _save_baseline_files(self, filename, image, image_hash,
    53                              generate_new_baseline):
    54         """Saves new baselines for the PNG and checksum.
    55 
    56         Args:
    57           filename: test filename
    58           image: a image output
    59           image_hash: a checksum of the image
    60           generate_new_baseline: whether to generate a new, platform-specific
    61             baseline, or update the existing one
    62         """
    63         self._save_baseline_data(filename, image, ".png", encoding=None,
    64                                  generate_new_baseline=generate_new_baseline)
    65         self._save_baseline_data(filename, image_hash, ".checksum",
    66                                  encoding="ascii",
    67                                  generate_new_baseline=generate_new_baseline)
    68 
    6952    def _copy_image(self, filename, actual_image, expected_image):
    7053        self.write_output_files(filename, '.png',
     
    9578        # If we didn't produce a hash file, this test must be text-only.
    9679        if actual_driver_output.image_hash is None:
    97             return failures
    98 
    99         # If we're generating a new baseline, we pass.
    100         if options.new_baseline or options.reset_results:
    101             self._save_baseline_files(filename, actual_driver_output.image,
    102                                       actual_driver_output.image_hash,
    103                                       options.new_baseline)
    10480            return failures
    10581
  • trunk/Tools/Scripts/webkitpy/layout_tests/test_types/test_type_base.py

    r77606 r78014  
    7070            self._port.relative_test_filename(filename))
    7171        fs.maybe_make_directory(fs.dirname(output_filename))
    72 
    73     def _save_baseline_data(self, filename, data, modifier, encoding,
    74                             generate_new_baseline=True):
    75         """Saves a new baseline file into the port's baseline directory.
    76 
    77         The file will be named simply "<test>-expected<modifier>", suitable for
    78         use as the expected results in a later run.
    79 
    80         Args:
    81           filename: path to the test file
    82           data: result to be saved as the new baseline
    83           modifier: type of the result file, e.g. ".txt" or ".png"
    84           encoding: file encoding (none, "utf-8", etc.)
    85           generate_new_baseline: whether to enerate a new, platform-specific
    86             baseline, or update the existing one
    87         """
    88 
    89         port = self._port
    90         fs = self._port._filesystem
    91         if generate_new_baseline:
    92             relative_dir = fs.dirname(port.relative_test_filename(filename))
    93             baseline_path = port.baseline_path()
    94             output_dir = fs.join(baseline_path, relative_dir)
    95             output_file = fs.basename(fs.splitext(filename)[0] +
    96                 self.FILENAME_SUFFIX_EXPECTED + modifier)
    97             fs.maybe_make_directory(output_dir)
    98             output_path = fs.join(output_dir, output_file)
    99             _log.debug('writing new baseline result "%s"' % (output_path))
    100         else:
    101             output_path = port.expected_filename(filename, modifier)
    102             _log.debug('resetting baseline result "%s"' % output_path)
    103 
    104         port.update_baseline(output_path, data, encoding)
    10572
    10673    def output_filename(self, filename, modifier):
  • trunk/Tools/Scripts/webkitpy/layout_tests/test_types/text_diff.py

    r77606 r78014  
    6060        failures = []
    6161
    62         # If we're generating a new baseline, we pass.
    63         if options.new_baseline or options.reset_results:
    64             # Although all DumpRenderTree output should be utf-8, we do not
    65             # ever decode it inside run-webkit-tests.  For some tests
    66             # DumpRenderTree may not output utf-8 text (e.g.  webarchives).
    67             self._save_baseline_data(filename, actual_driver_output.text,
    68                                      ".txt", encoding=None,
    69                                      generate_new_baseline=options.new_baseline)
    70             return failures
    71 
    7262        # Normalize text to diff
    7363        actual_text = self._get_normalized_output_text(actual_driver_output.text)
Note: See TracChangeset for help on using the changeset viewer.