1# Copyright (C) 2014 Google Inc. All rights reserved.
2#
3# Redistribution and use in source and binary forms, with or without
4# modification, are permitted provided that the following conditions are
5# met:
6#
7#     * Redistributions of source code must retain the above copyright
8# notice, this list of conditions and the following disclaimer.
9#     * Redistributions in binary form must reproduce the above
10# copyright notice, this list of conditions and the following disclaimer
11# in the documentation and/or other materials provided with the
12# distribution.
13#     * Neither the Google name nor the names of its
14# contributors may be used to endorse or promote products derived from
15# this software without specific prior written permission.
16#
17# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
29from webkitpy.layout_tests.models import test_run_results
30from webkitpy.layout_tests.port import linux
31from webkitpy.layout_tests.port import mac
32from webkitpy.layout_tests.port import win
33from webkitpy.layout_tests.port import browser_test_driver
34
35
36def get_port_class_name(port_name):
37    if 'linux' in port_name:
38        return 'BrowserTestLinuxPort'
39    elif 'mac' in port_name:
40        return 'BrowserTestMacPort'
41    elif 'win' in port_name:
42        return 'BrowserTestWinPort'
43    return None
44
45
46class BrowserTestPortOverrides(object):
47    """Set of overrides that every browser test platform port should have. This
48    class should not be instantiated as certain functions depend on base. Port
49    to work."""
50    def _driver_class(self):
51        return browser_test_driver.BrowserTestDriver
52
53    def layout_tests_dir(self):
54        """Overriden function from the base port class. Redirects everything
55        to src/chrome/test/data/printing/layout_tests.
56        """
57        return self.path_from_chromium_base('chrome', 'test', 'data', 'printing', 'layout_tests')  # pylint: disable=E1101
58
59    def check_sys_deps(self, needs_http):
60        """This function is meant to be a no-op since we don't want to actually
61        check for system dependencies."""
62        return test_run_results.OK_EXIT_STATUS
63
64    def driver_name(self):
65        return 'browser_tests'
66
67    def default_timeout_ms(self):
68        timeout_ms = 10 * 1000
69        if self.get_option('configuration') == 'Debug':  # pylint: disable=E1101
70            # Debug is usually 2x-3x slower than Release.
71            return 3 * timeout_ms
72        return timeout_ms
73
74    def virtual_test_suites(self):
75        return []
76
77
78class BrowserTestLinuxPort(BrowserTestPortOverrides, linux.LinuxPort):
79    pass
80
81
82class BrowserTestMacPort(BrowserTestPortOverrides, mac.MacPort):
83    def _path_to_driver(self, configuration=None):
84        return self._build_path_with_configuration(configuration, self.driver_name())
85
86    def default_timeout_ms(self):
87        timeout_ms = 20 * 1000
88        if self.get_option('configuration') == 'Debug':  # pylint: disable=E1101
89            # Debug is usually 2x-3x slower than Release.
90            return 3 * timeout_ms
91        return timeout_ms
92
93
94class BrowserTestWinPort(BrowserTestPortOverrides, win.WinPort):
95    def default_timeout_ms(self):
96        timeout_ms = 20 * 1000
97        if self.get_option('configuration') == 'Debug':  # pylint: disable=E1101
98            # Debug is usually 2x-3x slower than Release.
99            return 3 * timeout_ms
100        return timeout_ms
101