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

Unified Diff: Tools/Scripts/webkitpy/layout_tests/port/browser_test_driver.py

Issue 378113003: Modifications to layout test framework so that it can work with browser_tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fixed browser test driver unittests. Created 6 years, 5 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: 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..9ea9e14c71cd767ffd0039fa92a16944276c9188
--- /dev/null
+++ b/Tools/Scripts/webkitpy/layout_tests/port/browser_test_driver.py
@@ -0,0 +1,95 @@
+# 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()
+ self._open_stdin_path(deadline)
+
+ # 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. This function assumes the correct
+ # file path is sent. It won't delete files with only one component to avoid
+ # accidentally deleting files like /tmp.
+ def _open_stdin_path(self, deadline, test=False):
+ # FIXME(ivandavid): Come up with a way to test & see what happens when
+ # the file can't be opened.
+ path, found = self._read_stdin_path(deadline)
+ if found:
+ if test == False:
+ self._server_process._proc.stdin = open(path, 'wb', 0)
+ path_split = path.split(self._port.TEST_PATH_SEPARATOR)
+ if len(path_split) > 2:
+ del path_split[-1]
+ self._stdin_directory = self._port.TEST_PATH_SEPARATOR.join(path_split)
+
+ def _read_stdin_path(self, deadline):
+ # return (stdin_path, bool)
+ block = self._read_block(deadline)
+ if block.stdin_path:
+ return (block.stdin_path, True)
+ return (None, False)
+
+ 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_LayoutTestDriver')
+ cmd.append('--run-manual')
+ cmd.append('--single_process')
+ cmd.extend(per_test_args)
+ cmd.extend(self._port.get_option('additional_drt_flag', []))
+ return cmd
+
+ def __del__(self):
+ if self._stdin_directory:
+ shutil.rmtree(self._stdin_directory, ignore_errors=True)

Powered by Google App Engine
This is Rietveld 408576698