1
# Copyright (C) 2010 Google Inc. All rights reserved.
3
# Redistribution and use in source and binary forms, with or without
4
# modification, are permitted provided that the following conditions are
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
13
# * Neither the name of Google Inc. 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.
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.
31
from webkitpy.common.system import logtesting
32
from webkitpy.common.system.executive_mock import MockExecutive2
33
from webkitpy.common.system.systemhost_mock import MockSystemHost
34
from webkitpy.tool.mocktool import MockOptions
36
import chromium_android
41
from webkitpy.layout_tests.models.test_configuration import TestConfiguration
42
from webkitpy.layout_tests.port import port_testcase
45
class ChromiumPortTestCase(port_testcase.PortTestCase):
47
def test_check_build(self):
48
port = self.make_port()
49
port.check_build(needs_http=True)
51
def test_default_max_locked_shards(self):
52
port = self.make_port()
53
port.default_child_processes = lambda: 16
54
self.assertEqual(port.default_max_locked_shards(), 4)
55
port.default_child_processes = lambda: 2
56
self.assertEqual(port.default_max_locked_shards(), 1)
58
def test_default_timeout_ms(self):
59
self.assertEqual(self.make_port(options=MockOptions(configuration='Release')).default_timeout_ms(), 6000)
60
self.assertEqual(self.make_port(options=MockOptions(configuration='Debug')).default_timeout_ms(), 12000)
62
def test_default_pixel_tests(self):
63
self.assertEqual(self.make_port().default_pixel_tests(), True)
65
def test_missing_symbol_to_skipped_tests(self):
66
# Test that we get the chromium skips and not the webkit default skips
67
port = self.make_port()
68
skip_dict = port._missing_symbol_to_skipped_tests()
69
self.assertTrue('ff_mp3_decoder' in skip_dict)
70
self.assertFalse('WebGLShader' in skip_dict)
72
def test_all_test_configurations(self):
73
"""Validate the complete set of configurations this port knows about."""
74
port = self.make_port()
75
self.assertEqual(set(port.all_test_configurations()), set([
76
TestConfiguration('icecreamsandwich', 'x86', 'debug'),
77
TestConfiguration('icecreamsandwich', 'x86', 'release'),
78
TestConfiguration('snowleopard', 'x86', 'debug'),
79
TestConfiguration('snowleopard', 'x86', 'release'),
80
TestConfiguration('lion', 'x86', 'debug'),
81
TestConfiguration('lion', 'x86', 'release'),
82
TestConfiguration('mountainlion', 'x86', 'debug'),
83
TestConfiguration('mountainlion', 'x86', 'release'),
84
TestConfiguration('xp', 'x86', 'debug'),
85
TestConfiguration('xp', 'x86', 'release'),
86
TestConfiguration('win7', 'x86', 'debug'),
87
TestConfiguration('win7', 'x86', 'release'),
88
TestConfiguration('lucid', 'x86', 'debug'),
89
TestConfiguration('lucid', 'x86', 'release'),
90
TestConfiguration('lucid', 'x86_64', 'debug'),
91
TestConfiguration('lucid', 'x86_64', 'release'),
94
class TestMacPort(chromium_mac.ChromiumMacPort):
95
def __init__(self, options=None):
96
options = options or MockOptions()
97
chromium_mac.ChromiumMacPort.__init__(self, MockSystemHost(os_name='mac', os_version='leopard'), 'chromium-mac-leopard', options=options)
99
def default_configuration(self):
100
self.default_configuration_called = True
103
class TestAndroidPort(chromium_android.ChromiumAndroidPort):
104
def __init__(self, options=None):
105
options = options or MockOptions()
106
chromium_android.ChromiumAndroidPort.__init__(self, MockSystemHost(os_name='android', os_version='icecreamsandwich'), 'chromium-android', options=options)
108
def default_configuration(self):
109
self.default_configuration_called = True
112
class TestLinuxPort(chromium_linux.ChromiumLinuxPort):
113
def __init__(self, options=None):
114
options = options or MockOptions()
115
chromium_linux.ChromiumLinuxPort.__init__(self, MockSystemHost(os_name='linux', os_version='lucid'), 'chromium-linux-x86', options=options)
117
def default_configuration(self):
118
self.default_configuration_called = True
121
class TestWinPort(chromium_win.ChromiumWinPort):
122
def __init__(self, options=None):
123
options = options or MockOptions()
124
chromium_win.ChromiumWinPort.__init__(self, MockSystemHost(os_name='win', os_version='xp'), 'chromium-win-xp', options=options)
126
def default_configuration(self):
127
self.default_configuration_called = True
130
def test_default_configuration(self):
131
mock_options = MockOptions()
132
port = ChromiumPortTestCase.TestLinuxPort(options=mock_options)
133
self.assertEqual(mock_options.configuration, 'default') # pylint: disable-msg=E1101
134
self.assertTrue(port.default_configuration_called)
136
mock_options = MockOptions(configuration=None)
137
port = ChromiumPortTestCase.TestLinuxPort(mock_options)
138
self.assertEqual(mock_options.configuration, 'default') # pylint: disable-msg=E1101
139
self.assertTrue(port.default_configuration_called)
141
def test_diff_image(self):
142
class TestPort(ChromiumPortTestCase.TestLinuxPort):
143
def _path_to_image_diff(self):
144
return "/path/to/image_diff"
146
port = ChromiumPortTestCase.TestLinuxPort()
147
mock_image_diff = "MOCK Image Diff"
149
def mock_run_command(args):
150
port._filesystem.write_binary_file(args[4], mock_image_diff)
153
# Images are different.
154
port._executive = MockExecutive2(run_command_fn=mock_run_command)
155
self.assertEqual(mock_image_diff, port.diff_image("EXPECTED", "ACTUAL")[0])
157
# Images are the same.
158
port._executive = MockExecutive2(exit_code=0)
159
self.assertEqual(None, port.diff_image("EXPECTED", "ACTUAL")[0])
161
# There was some error running image_diff.
162
port._executive = MockExecutive2(exit_code=2)
163
exception_raised = False
165
port.diff_image("EXPECTED", "ACTUAL")
166
except ValueError, e:
167
exception_raised = True
168
self.assertFalse(exception_raised)
170
def test_diff_image_crashed(self):
171
port = ChromiumPortTestCase.TestLinuxPort()
172
port._executive = MockExecutive2(exit_code=2)
173
self.assertEqual(port.diff_image("EXPECTED", "ACTUAL"), (None, 0, 'image diff returned an exit code of 2'))
175
def test_expectations_files(self):
176
port = self.make_port()
177
port.port_name = 'chromium'
179
expectations_path = port.path_to_test_expectations_file()
180
chromium_overrides_path = port.path_from_chromium_base(
181
'webkit', 'tools', 'layout_tests', 'test_expectations.txt')
182
skia_overrides_path = port.path_from_chromium_base(
183
'skia', 'skia_test_expectations.txt')
185
port._filesystem.write_text_file(skia_overrides_path, 'dummay text')
187
port._options.builder_name = 'DUMMY_BUILDER_NAME'
188
self.assertEqual(port.expectations_files(), [expectations_path, skia_overrides_path, chromium_overrides_path])
190
port._options.builder_name = 'builder (deps)'
191
self.assertEqual(port.expectations_files(), [expectations_path, skia_overrides_path, chromium_overrides_path])
193
# A builder which does NOT observe the Chromium test_expectations,
194
# but still observes the Skia test_expectations...
195
port._options.builder_name = 'builder'
196
self.assertEqual(port.expectations_files(), [expectations_path, skia_overrides_path])
198
def test_expectations_ordering(self):
199
# since we don't implement self.port_name in ChromiumPort.
203
class ChromiumPortLoggingTest(logtesting.LoggingTestCase):
204
def test_check_sys_deps(self):
205
port = ChromiumPortTestCase.TestLinuxPort()
208
port._executive = MockExecutive2(exit_code=0)
209
self.assertTrue(port.check_sys_deps(needs_http=False))
212
port._executive = MockExecutive2(exit_code=1,
213
output='testing output failure')
214
self.assertFalse(port.check_sys_deps(needs_http=False))
216
'ERROR: System dependencies check failed.\n',
217
'ERROR: To override, invoke with --nocheck-sys-deps\n',
219
'ERROR: testing output failure\n'])
222
if __name__ == '__main__':