Chromium Code Reviews| Index: Tools/Scripts/webkitpy/layout_tests/port/browser_test_driver.py |
| diff --git a/Tools/Scripts/webkitpy/layout_tests/port/browser_test_driver.py b/Tools/Scripts/webkitpy/layout_tests/port/browser_test_driver.py |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..d1a30f4869918694331b086045340671a04b9cc3 |
| --- /dev/null |
| +++ b/Tools/Scripts/webkitpy/layout_tests/port/browser_test_driver.py |
| @@ -0,0 +1,83 @@ |
| +# Copyright (C) 2014 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 Google name 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. |
| + |
| +from webkitpy.layout_tests.port import driver |
| +import time |
| +import shutil |
| + |
| + |
| +class BrowserTestDriver(driver.Driver): |
| + """Object for running print preview test(s) using browser_tests.""" |
| + def __init__(self, port, worker_number, pixel_tests, no_timeout=False): |
| + """Invokes the constructor of driver.Driver.""" |
| + super(BrowserTestDriver, self).__init__(port, worker_number, pixel_tests, no_timeout) |
| + self.stdin_directory = None |
| + |
| + def start(self, pixel_tests, per_test_args, deadline): |
| + """Same as Driver.start() however, it has an extra step. It waits for |
| + a path to a file to be used for stdin to be printed by the browser test. |
| + If a path is found by the deadline test test will open the file and |
| + assign it to the stdin of the process that is owned by this driver's |
| + server process. |
| + """ |
| + # FIXME(ivandavid): Need to handle case where the layout test doesn't |
| + # get a file name. |
| + new_cmd_line = self.cmd_line(pixel_tests, per_test_args) |
| + if not self._server_process or new_cmd_line != self._current_cmd_line: |
| + self._start(pixel_tests, per_test_args) |
| + self._run_post_start_tasks() |
| + path, found = self._read_stdin_path(time.time() + int(deadline) / 1000.0) |
| + if found: |
| + self._server_process._proc.stdin = open(path, 'wb', 0) |
| + # Gets the path of the directory that the file for stdin |
| + # communication is in. Since the browser test cannot clean it |
| + # up, the layout test framework will. Everything the browser test |
| + # uses is stored in the same directory as the stdin file, so |
| + # deleting that directory recursively will remove all the other |
| + # temp data, like the printed pdf. |
| + # Assumes that the correct file is sent, however if the path |
| + # only contains one component, like '/foo' the the directory |
| + # won't be deleted as it might be wrong. |
| + path_split = path.split(self._port.TEST_PATH_SEPARATOR) |
| + if len(path_split) > 1: |
| + del path_split[-1] |
| + self.stdin_directory = self._port.TEST_PATH_SEPARATOR.join(path_split) |
| + |
| + def cmd_line(self, pixel_tests, per_test_args): |
| + """Command line arguments to run the browser test.""" |
| + cmd = self._command_wrapper(self._port.get_option('wrapper')) |
| + cmd.append(self._port._path_to_driver()) |
| + cmd.append('--gtest_filter=PrintPreviewPdfGeneratedBrowserTest.MANUAL_DummyTest') |
| + cmd.append('--run-manual') |
| + cmd.append('--single_process') |
| + cmd.extend(per_test_args) |
| + return cmd |
| + |
| + def __del__(self): |
| + if self.stdin_directory != None: |
| + shutil.rmtree(self.stdin_directory) |
|
Dirk Pranke
2014/07/16 23:37:20
You probably want ignore_errors=True here, or othe
ivandavid
2014/07/16 23:53:52
Done.
|