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

Side by Side Diff: Tools/Scripts/webkitpy/tool/commands/rebaseline_unittest.py

Issue 308793004: Optimize baselines in parallel. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: address review comments Created 6 years, 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Tools/Scripts/webkitpy/tool/commands/rebaseline.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (C) 2010 Google Inc. All rights reserved. 1 # Copyright (C) 2010 Google Inc. All rights reserved.
2 # 2 #
3 # Redistribution and use in source and binary forms, with or without 3 # Redistribution and use in source and binary forms, with or without
4 # modification, are permitted provided that the following conditions are 4 # modification, are permitted provided that the following conditions are
5 # met: 5 # met:
6 # 6 #
7 # * Redistributions of source code must retain the above copyright 7 # * Redistributions of source code must retain the above copyright
8 # notice, this list of conditions and the following disclaimer. 8 # notice, this list of conditions and the following disclaimer.
9 # * Redistributions in binary form must reproduce the above 9 # * Redistributions in binary form must reproduce the above
10 # copyright notice, this list of conditions and the following disclaimer 10 # copyright notice, this list of conditions and the following disclaimer
(...skipping 10 matching lines...) Expand all
21 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 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. 27 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 28
29 import webkitpy.thirdparty.unittest2 as unittest 29 import webkitpy.thirdparty.unittest2 as unittest
30 30
31 from webkitpy.common.system.outputcapture import OutputCapture
32 from webkitpy.common.checkout.baselineoptimizer import BaselineOptimizer 31 from webkitpy.common.checkout.baselineoptimizer import BaselineOptimizer
32 from webkitpy.common.checkout.scm.scm_mock import MockSCM
33 from webkitpy.common.host_mock import MockHost
33 from webkitpy.common.net.buildbot.buildbot_mock import MockBuilder 34 from webkitpy.common.net.buildbot.buildbot_mock import MockBuilder
34 from webkitpy.common.net.layouttestresults import LayoutTestResults 35 from webkitpy.common.net.layouttestresults import LayoutTestResults
35 from webkitpy.common.system.executive_mock import MockExecutive2 36 from webkitpy.common.system.executive_mock import MockExecutive2
37 from webkitpy.common.system.outputcapture import OutputCapture
36 from webkitpy.thirdparty.mock import Mock 38 from webkitpy.thirdparty.mock import Mock
37 from webkitpy.tool.commands.rebaseline import * 39 from webkitpy.tool.commands.rebaseline import *
38 from webkitpy.tool.mocktool import MockTool, MockOptions 40 from webkitpy.tool.mocktool import MockTool, MockOptions
39 41
40 42
41 class _BaseTestCase(unittest.TestCase): 43 class _BaseTestCase(unittest.TestCase):
42 MOCK_WEB_RESULT = 'MOCK Web result, convert 404 to None=True' 44 MOCK_WEB_RESULT = 'MOCK Web result, convert 404 to None=True'
43 WEB_PREFIX = 'http://example.com/f/builders/WebKit Mac10.7/results/layout-te st-results' 45 WEB_PREFIX = 'http://example.com/f/builders/WebKit Mac10.7/results/layout-te st-results'
44 46
45 command_constructor = None 47 command_constructor = None
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 119
118 options = MockOptions(builder="MOCK SnowLeopard", suffixes="txt", ve rbose=True, test="failures/expected/image.html", results_directory=None) 120 options = MockOptions(builder="MOCK SnowLeopard", suffixes="txt", ve rbose=True, test="failures/expected/image.html", results_directory=None)
119 121
120 oc.capture_output() 122 oc.capture_output()
121 self.command.execute(options, [], self.tool) 123 self.command.execute(options, [], self.tool)
122 finally: 124 finally:
123 out, _, _ = oc.restore_output() 125 out, _, _ = oc.restore_output()
124 builders._exact_matches = old_exact_matches 126 builders._exact_matches = old_exact_matches
125 127
126 self.assertMultiLineEqual(self._read(self.tool.filesystem.join(port.layo ut_tests_dir(), 'platform/test-mac-leopard/failures/expected/image-expected.txt' )), 'original snowleopard result') 128 self.assertMultiLineEqual(self._read(self.tool.filesystem.join(port.layo ut_tests_dir(), 'platform/test-mac-leopard/failures/expected/image-expected.txt' )), 'original snowleopard result')
127 self.assertMultiLineEqual(out, '{"add": [], "remove-lines": []}\n') 129 self.assertMultiLineEqual(out, '{"add": [], "remove-lines": [], "delete" : []}\n')
128 130
129 def test_copying_overwritten_baseline_to_multiple_locations(self): 131 def test_copying_overwritten_baseline_to_multiple_locations(self):
130 self.tool.executive = MockExecutive2() 132 self.tool.executive = MockExecutive2()
131 133
132 # FIXME: crbug.com/279494. it's confusing that this is the test- port, a nd not the regular win port. Really all of the tests should be using the test po rts. 134 # FIXME: crbug.com/279494. it's confusing that this is the test- port, a nd not the regular win port. Really all of the tests should be using the test po rts.
133 port = self.tool.port_factory.get('test-win-win7') 135 port = self.tool.port_factory.get('test-win-win7')
134 self._write(port._filesystem.join(port.layout_tests_dir(), 'platform/tes t-win-win7/failures/expected/image-expected.txt'), 'original win7 result') 136 self._write(port._filesystem.join(port.layout_tests_dir(), 'platform/tes t-win-win7/failures/expected/image-expected.txt'), 'original win7 result')
135 137
136 old_exact_matches = builders._exact_matches 138 old_exact_matches = builders._exact_matches
137 oc = OutputCapture() 139 oc = OutputCapture()
138 try: 140 try:
139 builders._exact_matches = { 141 builders._exact_matches = {
140 "MOCK Leopard": {"port_name": "test-mac-leopard", "specifiers": set(["mock-specifier"])}, 142 "MOCK Leopard": {"port_name": "test-mac-leopard", "specifiers": set(["mock-specifier"])},
141 "MOCK Linux": {"port_name": "test-linux-x86_64", "specifiers": s et(["mock-specifier"])}, 143 "MOCK Linux": {"port_name": "test-linux-x86_64", "specifiers": s et(["mock-specifier"])},
142 "MOCK Win7": {"port_name": "test-win-win7", "specifiers": set([" mock-specifier"])}, 144 "MOCK Win7": {"port_name": "test-win-win7", "specifiers": set([" mock-specifier"])},
143 } 145 }
144 146
145 options = MockOptions(builder="MOCK Win7", suffixes="txt", verbose=T rue, test="failures/expected/image.html", results_directory=None) 147 options = MockOptions(builder="MOCK Win7", suffixes="txt", verbose=T rue, test="failures/expected/image.html", results_directory=None)
146 148
147 oc.capture_output() 149 oc.capture_output()
148 self.command.execute(options, [], self.tool) 150 self.command.execute(options, [], self.tool)
149 finally: 151 finally:
150 out, _, _ = oc.restore_output() 152 out, _, _ = oc.restore_output()
151 builders._exact_matches = old_exact_matches 153 builders._exact_matches = old_exact_matches
152 154
153 self.assertMultiLineEqual(self._read(self.tool.filesystem.join(port.layo ut_tests_dir(), 'platform/test-linux-x86_64/failures/expected/image-expected.txt ')), 'original win7 result') 155 self.assertMultiLineEqual(self._read(self.tool.filesystem.join(port.layo ut_tests_dir(), 'platform/test-linux-x86_64/failures/expected/image-expected.txt ')), 'original win7 result')
154 self.assertFalse(self.tool.filesystem.exists(self.tool.filesystem.join(p ort.layout_tests_dir(), 'platform/mac-leopard/userscripts/another-test-expected. txt'))) 156 self.assertFalse(self.tool.filesystem.exists(self.tool.filesystem.join(p ort.layout_tests_dir(), 'platform/mac-leopard/userscripts/another-test-expected. txt')))
155 self.assertMultiLineEqual(out, '{"add": [], "remove-lines": []}\n') 157 self.assertMultiLineEqual(out, '{"add": [], "remove-lines": [], "delete" : []}\n')
156 158
157 def test_no_copy_existing_baseline(self): 159 def test_no_copy_existing_baseline(self):
158 self.tool.executive = MockExecutive2() 160 self.tool.executive = MockExecutive2()
159 161
160 # FIXME: it's confusing that this is the test- port, and not the regular win port. Really all of the tests should be using the test ports. 162 # FIXME: it's confusing that this is the test- port, and not the regular win port. Really all of the tests should be using the test ports.
161 port = self.tool.port_factory.get('test-win-win7') 163 port = self.tool.port_factory.get('test-win-win7')
162 self._write(port._filesystem.join(port.layout_tests_dir(), 'platform/tes t-win-win7/failures/expected/image-expected.txt'), 'original win7 result') 164 self._write(port._filesystem.join(port.layout_tests_dir(), 'platform/tes t-win-win7/failures/expected/image-expected.txt'), 'original win7 result')
163 165
164 old_exact_matches = builders._exact_matches 166 old_exact_matches = builders._exact_matches
165 oc = OutputCapture() 167 oc = OutputCapture()
166 try: 168 try:
167 builders._exact_matches = { 169 builders._exact_matches = {
168 "MOCK Leopard": {"port_name": "test-mac-leopard", "specifiers": set(["mock-specifier"])}, 170 "MOCK Leopard": {"port_name": "test-mac-leopard", "specifiers": set(["mock-specifier"])},
169 "MOCK Linux": {"port_name": "test-linux-x86_64", "specifiers": s et(["mock-specifier"])}, 171 "MOCK Linux": {"port_name": "test-linux-x86_64", "specifiers": s et(["mock-specifier"])},
170 "MOCK Win7": {"port_name": "test-win-win7", "specifiers": set([" mock-specifier"])}, 172 "MOCK Win7": {"port_name": "test-win-win7", "specifiers": set([" mock-specifier"])},
171 } 173 }
172 174
173 options = MockOptions(builder="MOCK Win7", suffixes="txt", verbose=T rue, test="failures/expected/image.html", results_directory=None) 175 options = MockOptions(builder="MOCK Win7", suffixes="txt", verbose=T rue, test="failures/expected/image.html", results_directory=None)
174 176
175 oc.capture_output() 177 oc.capture_output()
176 self.command.execute(options, [], self.tool) 178 self.command.execute(options, [], self.tool)
177 finally: 179 finally:
178 out, _, _ = oc.restore_output() 180 out, _, _ = oc.restore_output()
179 builders._exact_matches = old_exact_matches 181 builders._exact_matches = old_exact_matches
180 182
181 self.assertMultiLineEqual(self._read(self.tool.filesystem.join(port.layo ut_tests_dir(), 'platform/test-linux-x86_64/failures/expected/image-expected.txt ')), 'original win7 result') 183 self.assertMultiLineEqual(self._read(self.tool.filesystem.join(port.layo ut_tests_dir(), 'platform/test-linux-x86_64/failures/expected/image-expected.txt ')), 'original win7 result')
182 self.assertMultiLineEqual(self._read(self.tool.filesystem.join(port.layo ut_tests_dir(), 'platform/test-win-win7/failures/expected/image-expected.txt')), 'original win7 result') 184 self.assertMultiLineEqual(self._read(self.tool.filesystem.join(port.layo ut_tests_dir(), 'platform/test-win-win7/failures/expected/image-expected.txt')), 'original win7 result')
183 self.assertFalse(self.tool.filesystem.exists(self.tool.filesystem.join(p ort.layout_tests_dir(), 'platform/mac-leopard/userscripts/another-test-expected. txt'))) 185 self.assertFalse(self.tool.filesystem.exists(self.tool.filesystem.join(p ort.layout_tests_dir(), 'platform/mac-leopard/userscripts/another-test-expected. txt')))
184 self.assertMultiLineEqual(out, '{"add": [], "remove-lines": []}\n') 186 self.assertMultiLineEqual(out, '{"add": [], "remove-lines": [], "delete" : []}\n')
185 187
186 def test_no_copy_skipped_test(self): 188 def test_no_copy_skipped_test(self):
187 self.tool.executive = MockExecutive2() 189 self.tool.executive = MockExecutive2()
188 190
189 port = self.tool.port_factory.get('test-win-win7') 191 port = self.tool.port_factory.get('test-win-win7')
190 fs = self.tool.filesystem 192 fs = self.tool.filesystem
191 self._write(fs.join(port.layout_tests_dir(), 'platform/test-win-win7/fai lures/expected/image-expected.txt'), 'original win7 result') 193 self._write(fs.join(port.layout_tests_dir(), 'platform/test-win-win7/fai lures/expected/image-expected.txt'), 'original win7 result')
192 expectations_path = fs.join(port.path_to_generic_test_expectations_file( )) 194 expectations_path = fs.join(port.path_to_generic_test_expectations_file( ))
193 self._write(expectations_path, ( 195 self._write(expectations_path, (
194 "[ Win ] failures/expected/image.html [ Failure ]\n" 196 "[ Win ] failures/expected/image.html [ Failure ]\n"
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 self._write(self.lion_expectations_path, "Bug(x) [ Mac ] userscripts/ano ther-test.html [ ImageOnlyFailure ]\nbug(z) [ Linux ] userscripts/another-test.h tml [ ImageOnlyFailure ]\n") 259 self._write(self.lion_expectations_path, "Bug(x) [ Mac ] userscripts/ano ther-test.html [ ImageOnlyFailure ]\nbug(z) [ Linux ] userscripts/another-test.h tml [ ImageOnlyFailure ]\n")
258 self.options.results_directory = '/tmp' 260 self.options.results_directory = '/tmp'
259 self.command._rebaseline_test_and_update_expectations(self.options) 261 self.command._rebaseline_test_and_update_expectations(self.options)
260 self.assertItemsEqual(self.tool.web.urls_fetched, ['file:///tmp/userscri pts/another-test-actual.txt']) 262 self.assertItemsEqual(self.tool.web.urls_fetched, ['file:///tmp/userscri pts/another-test-actual.txt'])
261 263
262 def test_rebaseline_reftest(self): 264 def test_rebaseline_reftest(self):
263 self._write("userscripts/another-test.html", "test data") 265 self._write("userscripts/another-test.html", "test data")
264 self._write("userscripts/another-test-expected.html", "generic result") 266 self._write("userscripts/another-test-expected.html", "generic result")
265 OutputCapture().assert_outputs(self, self.command._rebaseline_test_and_u pdate_expectations, args=[self.options], 267 OutputCapture().assert_outputs(self, self.command._rebaseline_test_and_u pdate_expectations, args=[self.options],
266 expected_logs="Cannot rebaseline reftest: userscripts/another-test.h tml\n") 268 expected_logs="Cannot rebaseline reftest: userscripts/another-test.h tml\n")
267 self.assertDictEqual(self.command._scm_changes, {'add': [], 'remove-line s': []}) 269 self.assertDictEqual(self.command._scm_changes, {'add': [], 'remove-line s': [], "delete": []})
268 270
269 def test_rebaseline_test_and_print_scm_changes(self): 271 def test_rebaseline_test_and_print_scm_changes(self):
270 self.command._print_scm_changes = True 272 self.command._print_scm_changes = True
271 self.command._scm_changes = {'add': [], 'delete': []} 273 self.command._scm_changes = {'add': [], 'delete': []}
272 self.tool._scm.exists = lambda x: False 274 self.tool._scm.exists = lambda x: False
273 275
274 self.command._rebaseline_test("WebKit Linux", "userscripts/another-test. html", "txt", None) 276 self.command._rebaseline_test("WebKit Linux", "userscripts/another-test. html", "txt", None)
275 277
276 self.assertDictEqual(self.command._scm_changes, {'add': ['/mock-checkout /third_party/WebKit/LayoutTests/platform/linux/userscripts/another-test-expected .txt'], 'delete': []}) 278 self.assertDictEqual(self.command._scm_changes, {'add': ['/mock-checkout /third_party/WebKit/LayoutTests/platform/linux/userscripts/another-test-expected .txt'], 'delete': []})
277 279
(...skipping 16 matching lines...) Expand all
294 verbose=True, test="failures/expected/image.html", results_direc tory=None) 296 verbose=True, test="failures/expected/image.html", results_direc tory=None)
295 297
296 oc.capture_output() 298 oc.capture_output()
297 self.command.execute(options, [], self.tool) 299 self.command.execute(options, [], self.tool)
298 finally: 300 finally:
299 out, _, _ = oc.restore_output() 301 out, _, _ = oc.restore_output()
300 builders._exact_matches = old_exact_matches 302 builders._exact_matches = old_exact_matches
301 303
302 self.assertMultiLineEqual(self._read(self.tool.filesystem.join(port.layo ut_tests_dir(), 'platform/test-win-win7/failures/expected/image-expected.txt')), 'MOCK Web result, convert 404 to None=True') 304 self.assertMultiLineEqual(self._read(self.tool.filesystem.join(port.layo ut_tests_dir(), 'platform/test-win-win7/failures/expected/image-expected.txt')), 'MOCK Web result, convert 404 to None=True')
303 self.assertFalse(self.tool.filesystem.exists(self.tool.filesystem.join(p ort.layout_tests_dir(), 'platform/test-win-xp/failures/expected/image-expected.t xt'))) 305 self.assertFalse(self.tool.filesystem.exists(self.tool.filesystem.join(p ort.layout_tests_dir(), 'platform/test-win-xp/failures/expected/image-expected.t xt')))
304 self.assertMultiLineEqual(out, '{"add": [], "remove-lines": [{"test": "f ailures/expected/image.html", "builder": "MOCK Win7"}]}\n') 306 self.assertMultiLineEqual(out, '{"add": [], "remove-lines": [{"test": "f ailures/expected/image.html", "builder": "MOCK Win7"}], "delete": []}\n')
305 307
306 308
307 class TestAbstractParallelRebaselineCommand(_BaseTestCase): 309 class TestAbstractParallelRebaselineCommand(_BaseTestCase):
308 command_constructor = AbstractParallelRebaselineCommand 310 command_constructor = AbstractParallelRebaselineCommand
309 311
310 def test_builders_to_fetch_from(self): 312 def test_builders_to_fetch_from(self):
311 old_exact_matches = builders._exact_matches 313 old_exact_matches = builders._exact_matches
312 try: 314 try:
313 builders._exact_matches = { 315 builders._exact_matches = {
314 "MOCK XP": {"port_name": "test-win-xp"}, 316 "MOCK XP": {"port_name": "test-win-xp"},
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 return self.command._builder_data 358 return self.command._builder_data
357 359
358 self.command.builder_data = builder_data 360 self.command.builder_data = builder_data
359 361
360 options = MockOptions(optimize=True, verbose=True, results_directory=Non e) 362 options = MockOptions(optimize=True, verbose=True, results_directory=Non e)
361 self._write("userscripts/first-test.html", "Dummy test contents") 363 self._write("userscripts/first-test.html", "Dummy test contents")
362 self.command._rebaseline(options, {"userscripts/first-test.html": {"MOC K builder": ["txt", "png"]}}) 364 self.command._rebaseline(options, {"userscripts/first-test.html": {"MOC K builder": ["txt", "png"]}})
363 365
364 # Note that we have one run_in_parallel() call followed by a run_command () 366 # Note that we have one run_in_parallel() call followed by a run_command ()
365 self.assertEqual(self.tool.executive.calls, 367 self.assertEqual(self.tool.executive.calls,
366 [['echo', '--verbose', 'optimize-baselines', '--suffixes', '', 'user scripts/first-test.html']]) 368 [[['echo', 'optimize-baselines', '--no-modify-scm', '--suffixes', '' , 'userscripts/first-test.html', '--verbose']]])
367 369
368 def test_rebaseline_all(self): 370 def test_rebaseline_all(self):
369 self._setup_mock_builder_data() 371 self._setup_mock_builder_data()
370 372
371 options = MockOptions(optimize=True, verbose=True, results_directory=Non e) 373 options = MockOptions(optimize=True, verbose=True, results_directory=Non e)
372 self._write("userscripts/first-test.html", "Dummy test contents") 374 self._write("userscripts/first-test.html", "Dummy test contents")
373 self.command._rebaseline(options, {"userscripts/first-test.html": {"MOC K builder": ["txt", "png"]}}) 375 self.command._rebaseline(options, {"userscripts/first-test.html": {"MOC K builder": ["txt", "png"]}})
374 376
375 # Note that we have one run_in_parallel() call followed by a run_command () 377 # Note that we have one run_in_parallel() call followed by a run_command ()
376 self.assertEqual(self.tool.executive.calls, 378 self.assertEqual(self.tool.executive.calls,
377 [[['echo', 'copy-existing-baselines-internal', '--suffixes', 'txt,pn g', '--builder', 'MOCK builder', '--test', 'userscripts/first-test.html', '--ver bose']], 379 [[['echo', 'copy-existing-baselines-internal', '--suffixes', 'txt,pn g', '--builder', 'MOCK builder', '--test', 'userscripts/first-test.html', '--ver bose']],
378 [['echo', 'rebaseline-test-internal', '--suffixes', 'txt,png', '--b uilder', 'MOCK builder', '--test', 'userscripts/first-test.html', '--verbose']], 380 [['echo', 'rebaseline-test-internal', '--suffixes', 'txt,png', '--b uilder', 'MOCK builder', '--test', 'userscripts/first-test.html', '--verbose']],
379 ['echo', '--verbose', 'optimize-baselines', '--suffixes', 'txt,png' , 'userscripts/first-test.html']]) 381 [['echo', 'optimize-baselines', '--no-modify-scm', '--suffixes', 't xt,png', 'userscripts/first-test.html', '--verbose']]])
380 382
381 def test_rebaseline_debug(self): 383 def test_rebaseline_debug(self):
382 self._setup_mock_builder_data() 384 self._setup_mock_builder_data()
383 385
384 options = MockOptions(optimize=True, verbose=True, results_directory=Non e) 386 options = MockOptions(optimize=True, verbose=True, results_directory=Non e)
385 self._write("userscripts/first-test.html", "Dummy test contents") 387 self._write("userscripts/first-test.html", "Dummy test contents")
386 self.command._rebaseline(options, {"userscripts/first-test.html": {"MOC K builder (Debug)": ["txt", "png"]}}) 388 self.command._rebaseline(options, {"userscripts/first-test.html": {"MOC K builder (Debug)": ["txt", "png"]}})
387 389
388 # Note that we have one run_in_parallel() call followed by a run_command () 390 # Note that we have one run_in_parallel() call followed by a run_command ()
389 self.assertEqual(self.tool.executive.calls, 391 self.assertEqual(self.tool.executive.calls,
390 [[['echo', 'copy-existing-baselines-internal', '--suffixes', 'txt,pn g', '--builder', 'MOCK builder (Debug)', '--test', 'userscripts/first-test.html' , '--verbose']], 392 [[['echo', 'copy-existing-baselines-internal', '--suffixes', 'txt,pn g', '--builder', 'MOCK builder (Debug)', '--test', 'userscripts/first-test.html' , '--verbose']],
391 [['echo', 'rebaseline-test-internal', '--suffixes', 'txt,png', '--b uilder', 'MOCK builder (Debug)', '--test', 'userscripts/first-test.html', '--ver bose']], 393 [['echo', 'rebaseline-test-internal', '--suffixes', 'txt,png', '--b uilder', 'MOCK builder (Debug)', '--test', 'userscripts/first-test.html', '--ver bose']],
392 ['echo', '--verbose', 'optimize-baselines', '--suffixes', 'txt,png' , 'userscripts/first-test.html']]) 394 [['echo', 'optimize-baselines', '--no-modify-scm', '--suffixes', 't xt,png', 'userscripts/first-test.html', '--verbose']]])
393 395
394 def test_no_optimize(self): 396 def test_no_optimize(self):
395 self._setup_mock_builder_data() 397 self._setup_mock_builder_data()
396 398
397 options = MockOptions(optimize=False, verbose=True, results_directory=No ne) 399 options = MockOptions(optimize=False, verbose=True, results_directory=No ne)
398 self._write("userscripts/first-test.html", "Dummy test contents") 400 self._write("userscripts/first-test.html", "Dummy test contents")
399 self.command._rebaseline(options, {"userscripts/first-test.html": {"MOC K builder (Debug)": ["txt", "png"]}}) 401 self.command._rebaseline(options, {"userscripts/first-test.html": {"MOC K builder (Debug)": ["txt", "png"]}})
400 402
401 # Note that we have only one run_in_parallel() call 403 # Note that we have only one run_in_parallel() call
402 self.assertEqual(self.tool.executive.calls, 404 self.assertEqual(self.tool.executive.calls,
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
664 self.assertDictEqual(self.command._tests_to_rebaseline(self.lion_port), {'userscripts/another-test.html': ('png', 'wav', 'txt')}) 666 self.assertDictEqual(self.command._tests_to_rebaseline(self.lion_port), {'userscripts/another-test.html': ('png', 'wav', 'txt')})
665 667
666 668
667 class _FakeOptimizer(BaselineOptimizer): 669 class _FakeOptimizer(BaselineOptimizer):
668 def read_results_by_directory(self, baseline_name): 670 def read_results_by_directory(self, baseline_name):
669 if baseline_name.endswith('txt'): 671 if baseline_name.endswith('txt'):
670 return {'LayoutTests/passes/text.html': '123456'} 672 return {'LayoutTests/passes/text.html': '123456'}
671 return {} 673 return {}
672 674
673 675
676 class TestOptimizeBaselines(_BaseTestCase):
677 command_constructor = OptimizeBaselines
678
679 def _write_test_file(self, port, path, contents):
680 abs_path = self.tool.filesystem.join(port.layout_tests_dir(), path)
681 self.tool.filesystem.write_text_file(abs_path, contents)
682
683 def setUp(self):
684 super(TestOptimizeBaselines, self).setUp()
685
686 def test_modify_scm(self):
687 # FIXME: This is a hack to get the unittest and the BaselineOptimize to both use /mock-checkout
688 # instead of one using /mock-checkout and one using /test-checkout.
689 default_port = self.tool.port_factory.get()
690 self.tool.port_factory.get = lambda port_name=None: default_port
691
692 test_port = self.tool.port_factory.get('test')
693 self._write_test_file(test_port, 'another/test.html', "Dummy test conten ts")
694 self._write_test_file(test_port, 'platform/mac-snowleopard/another/test- expected.txt', "result A")
695 self._write_test_file(test_port, 'another/test-expected.txt', "result A" )
696
697 old_exact_matches = builders._exact_matches
698 try:
699 builders._exact_matches = {
700 "MOCK Leopard Debug": {"port_name": "test-mac-snowleopard", "spe cifiers": set(["mock-specifier"])},
701 }
702 OutputCapture().assert_outputs(self, self.command.execute, args=[
703 MockOptions(suffixes='txt', no_modify_scm=False, platform='test- mac-snowleopard'),
704 ['another/test.html'],
705 self.tool,
706 ], expected_stdout='{"add": [], "remove-lines": [], "delete": []}\n' )
707 finally:
708 builders._exact_matches = old_exact_matches
709
710 self.assertFalse(self.tool.filesystem.exists(self.tool.filesystem.join(t est_port.layout_tests_dir(), 'platform/mac/another/test-expected.txt')))
711 self.assertTrue(self.tool.filesystem.exists(self.tool.filesystem.join(te st_port.layout_tests_dir(), 'another/test-expected.txt')))
712
713 def test_no_modify_scm(self):
714 # FIXME: This is a hack to get the unittest and the BaselineOptimize to both use /mock-checkout
715 # instead of one using /mock-checkout and one using /test-checkout.
716 default_port = self.tool.port_factory.get()
717 self.tool.port_factory.get = lambda port_name=None: default_port
718
719 test_port = self.tool.port_factory.get('test')
720 self._write_test_file(test_port, 'another/test.html', "Dummy test conten ts")
721 self._write_test_file(test_port, 'platform/mac-snowleopard/another/test- expected.txt', "result A")
722 self._write_test_file(test_port, 'another/test-expected.txt', "result A" )
723
724 old_exact_matches = builders._exact_matches
725 try:
726 builders._exact_matches = {
727 "MOCK Leopard Debug": {"port_name": "test-mac-snowleopard", "spe cifiers": set(["mock-specifier"])},
728 }
729 OutputCapture().assert_outputs(self, self.command.execute, args=[
730 MockOptions(suffixes='txt', no_modify_scm=True, platform='test-m ac-snowleopard'),
731 ['another/test.html'],
732 self.tool,
733 ], expected_stdout='{"add": [], "remove-lines": [], "delete": ["/moc k-checkout/third_party/WebKit/LayoutTests/platform/mac-snowleopard/another/test- expected.txt"]}\n')
734 finally:
735 builders._exact_matches = old_exact_matches
736
737 self.assertFalse(self.tool.filesystem.exists(self.tool.filesystem.join(t est_port.layout_tests_dir(), 'platform/mac/another/test-expected.txt')))
738 self.assertTrue(self.tool.filesystem.exists(self.tool.filesystem.join(te st_port.layout_tests_dir(), 'another/test-expected.txt')))
739
740
674 class TestAnalyzeBaselines(_BaseTestCase): 741 class TestAnalyzeBaselines(_BaseTestCase):
675 command_constructor = AnalyzeBaselines 742 command_constructor = AnalyzeBaselines
676 743
677 def setUp(self): 744 def setUp(self):
678 super(TestAnalyzeBaselines, self).setUp() 745 super(TestAnalyzeBaselines, self).setUp()
679 self.port = self.tool.port_factory.get('test') 746 self.port = self.tool.port_factory.get('test')
680 self.tool.port_factory.get = (lambda port_name=None, options=None: self. port) 747 self.tool.port_factory.get = (lambda port_name=None, options=None: self. port)
681 self.lines = [] 748 self.lines = []
682 self.command._optimizer_class = _FakeOptimizer 749 self.command._optimizer_class = _FakeOptimizer
683 self.command._write = (lambda msg: self.lines.append(msg)) # pylint bug warning about unnecessary lambda? pylint: disable=W0108 750 self.command._write = (lambda msg: self.lines.append(msg)) # pylint bug warning about unnecessary lambda? pylint: disable=W0108
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
887 ['echo', 'copy-existing-baselines-internal', '--suffixes', ' png', '--builder', 'MOCK SnowLeopard', '--test', 'fast/dom/prototype-strawberry. html'], 954 ['echo', 'copy-existing-baselines-internal', '--suffixes', ' png', '--builder', 'MOCK SnowLeopard', '--test', 'fast/dom/prototype-strawberry. html'],
888 ['echo', 'copy-existing-baselines-internal', '--suffixes', ' txt', '--builder', 'MOCK Leopard', '--test', 'fast/dom/prototype-taco.html'], 955 ['echo', 'copy-existing-baselines-internal', '--suffixes', ' txt', '--builder', 'MOCK Leopard', '--test', 'fast/dom/prototype-taco.html'],
889 ['echo', 'copy-existing-baselines-internal', '--suffixes', ' txt', '--builder', 'MOCK SnowLeopard', '--test', 'fast/dom/prototype-taco.html'] , 956 ['echo', 'copy-existing-baselines-internal', '--suffixes', ' txt', '--builder', 'MOCK SnowLeopard', '--test', 'fast/dom/prototype-taco.html'] ,
890 ], 957 ],
891 [ 958 [
892 ['echo', 'rebaseline-test-internal', '--suffixes', 'txt,png' , '--builder', 'MOCK Leopard', '--test', 'fast/dom/prototype-chocolate.html'], 959 ['echo', 'rebaseline-test-internal', '--suffixes', 'txt,png' , '--builder', 'MOCK Leopard', '--test', 'fast/dom/prototype-chocolate.html'],
893 ['echo', 'rebaseline-test-internal', '--suffixes', 'png', '- -builder', 'MOCK SnowLeopard', '--test', 'fast/dom/prototype-strawberry.html'], 960 ['echo', 'rebaseline-test-internal', '--suffixes', 'png', '- -builder', 'MOCK SnowLeopard', '--test', 'fast/dom/prototype-strawberry.html'],
894 ['echo', 'rebaseline-test-internal', '--suffixes', 'txt', '- -builder', 'MOCK Leopard', '--test', 'fast/dom/prototype-taco.html'], 961 ['echo', 'rebaseline-test-internal', '--suffixes', 'txt', '- -builder', 'MOCK Leopard', '--test', 'fast/dom/prototype-taco.html'],
895 ['echo', 'rebaseline-test-internal', '--suffixes', 'txt', '- -builder', 'MOCK SnowLeopard', '--test', 'fast/dom/prototype-taco.html'], 962 ['echo', 'rebaseline-test-internal', '--suffixes', 'txt', '- -builder', 'MOCK SnowLeopard', '--test', 'fast/dom/prototype-taco.html'],
896 ], 963 ],
897 ['echo', 'optimize-baselines', '--suffixes', 'txt,png', 'fast/do m/prototype-chocolate.html'], 964 [
898 ['echo', 'optimize-baselines', '--suffixes', 'png', 'fast/dom/pr ototype-strawberry.html'], 965 ['echo', 'optimize-baselines', '--no-modify-scm', '--suffixe s', 'txt,png', 'fast/dom/prototype-chocolate.html'],
899 ['echo', 'optimize-baselines', '--suffixes', 'txt', 'fast/dom/pr ototype-taco.html'], 966 ['echo', 'optimize-baselines', '--no-modify-scm', '--suffixe s', 'png', 'fast/dom/prototype-strawberry.html'],
967 ['echo', 'optimize-baselines', '--no-modify-scm', '--suffixe s', 'txt', 'fast/dom/prototype-taco.html'],
968 ],
900 ['git', 'cl', 'upload', '-f'], 969 ['git', 'cl', 'upload', '-f'],
901 ['git', 'pull'], 970 ['git', 'pull'],
902 ['git', 'cl', 'dcommit', '-f'], 971 ['git', 'cl', 'dcommit', '-f'],
903 ['git', 'cl', 'set_close'], 972 ['git', 'cl', 'set_close'],
904 ]) 973 ])
905 974
906 # The mac ports should both be removed since they're the only ones i n builders._exact_matches. 975 # The mac ports should both be removed since they're the only ones i n builders._exact_matches.
907 self.assertEqual(self.tool.filesystem.read_text_file(test_port.path_ to_generic_test_expectations_file()), """ 976 self.assertEqual(self.tool.filesystem.read_text_file(test_port.path_ to_generic_test_expectations_file()), """
908 crbug.com/24182 [ Debug ] path/to/norebaseline.html [ Rebaseline ] 977 crbug.com/24182 [ Debug ] path/to/norebaseline.html [ Rebaseline ]
909 Bug(foo) [ Linux Win ] fast/dom/prototype-taco.html [ NeedsRebaseline ] 978 Bug(foo) [ Linux Win ] fast/dom/prototype-taco.html [ NeedsRebaseline ]
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
962 self.tool.executive.calls = [] 1031 self.tool.executive.calls = []
963 self.command.execute(MockOptions(optimize=True, verbose=False, move_ overwritten_baselines=False, results_directory=False, log_server=None), [], self .tool) 1032 self.command.execute(MockOptions(optimize=True, verbose=False, move_ overwritten_baselines=False, results_directory=False, log_server=None), [], self .tool)
964 1033
965 self.assertEqual(self.tool.executive.calls, [ 1034 self.assertEqual(self.tool.executive.calls, [
966 [ 1035 [
967 ['echo', 'copy-existing-baselines-internal', '--suffixes', ' txt', '--builder', 'MOCK SnowLeopard', '--test', 'fast/dom/prototype-taco.html'] , 1036 ['echo', 'copy-existing-baselines-internal', '--suffixes', ' txt', '--builder', 'MOCK SnowLeopard', '--test', 'fast/dom/prototype-taco.html'] ,
968 ], 1037 ],
969 [ 1038 [
970 ['echo', 'rebaseline-test-internal', '--suffixes', 'txt', '- -builder', 'MOCK SnowLeopard', '--test', 'fast/dom/prototype-taco.html'], 1039 ['echo', 'rebaseline-test-internal', '--suffixes', 'txt', '- -builder', 'MOCK SnowLeopard', '--test', 'fast/dom/prototype-taco.html'],
971 ], 1040 ],
972 ['echo', 'optimize-baselines', '--suffixes', 'txt', 'fast/dom/pr ototype-taco.html'], 1041 [['echo', 'optimize-baselines', '--no-modify-scm', '--suffixes', 'txt', 'fast/dom/prototype-taco.html']],
973 ['git', 'cl', 'upload', '-f'], 1042 ['git', 'cl', 'upload', '-f'],
974 ['git', 'cl', 'set_close'], 1043 ['git', 'cl', 'set_close'],
975 ]) 1044 ])
976 finally: 1045 finally:
977 builders._exact_matches = old_exact_matches 1046 builders._exact_matches = old_exact_matches
978 1047
979 def test_execute_test_passes_everywhere(self): 1048 def test_execute_test_passes_everywhere(self):
980 def blame(path): 1049 def blame(path):
981 return """ 1050 return """
982 6469e754a1 path/to/TestExpectations (foobarbaz1@chromium.org 2 013-04-28 04:52:41 +0000 13) Bug(foo) fast/dom/prototype-taco.html [ NeedsReba seline ] 1051 6469e754a1 path/to/TestExpectations (foobarbaz1@chromium.org 2 013-04-28 04:52:41 +0000 13) Bug(foo) fast/dom/prototype-taco.html [ NeedsReba seline ]
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1022 self.command.execute(MockOptions(optimize=True, verbose=False, move_ overwritten_baselines=False, results_directory=False, log_server=None), [], self .tool) 1091 self.command.execute(MockOptions(optimize=True, verbose=False, move_ overwritten_baselines=False, results_directory=False, log_server=None), [], self .tool)
1023 self.assertEqual(self.tool.executive.calls, [ 1092 self.assertEqual(self.tool.executive.calls, [
1024 [ 1093 [
1025 ['echo', 'copy-existing-baselines-internal', '--suffixes', ' txt', '--builder', 'MOCK Leopard', '--test', 'fast/dom/prototype-taco.html'], 1094 ['echo', 'copy-existing-baselines-internal', '--suffixes', ' txt', '--builder', 'MOCK Leopard', '--test', 'fast/dom/prototype-taco.html'],
1026 ['echo', 'copy-existing-baselines-internal', '--suffixes', ' txt', '--builder', 'MOCK SnowLeopard', '--test', 'fast/dom/prototype-taco.html'] , 1095 ['echo', 'copy-existing-baselines-internal', '--suffixes', ' txt', '--builder', 'MOCK SnowLeopard', '--test', 'fast/dom/prototype-taco.html'] ,
1027 ], 1096 ],
1028 [ 1097 [
1029 ['echo', 'rebaseline-test-internal', '--suffixes', 'txt', '- -builder', 'MOCK Leopard', '--test', 'fast/dom/prototype-taco.html'], 1098 ['echo', 'rebaseline-test-internal', '--suffixes', 'txt', '- -builder', 'MOCK Leopard', '--test', 'fast/dom/prototype-taco.html'],
1030 ['echo', 'rebaseline-test-internal', '--suffixes', 'txt', '- -builder', 'MOCK SnowLeopard', '--test', 'fast/dom/prototype-taco.html'], 1099 ['echo', 'rebaseline-test-internal', '--suffixes', 'txt', '- -builder', 'MOCK SnowLeopard', '--test', 'fast/dom/prototype-taco.html'],
1031 ], 1100 ],
1032 ['echo', 'optimize-baselines', '--suffixes', 'txt', 'fast/dom/pr ototype-taco.html'], 1101 [['echo', 'optimize-baselines', '--no-modify-scm', '--suffixes', 'txt', 'fast/dom/prototype-taco.html']],
1033 ['git', 'cl', 'upload', '-f'], 1102 ['git', 'cl', 'upload', '-f'],
1034 ['git', 'pull'], 1103 ['git', 'pull'],
1035 ['git', 'cl', 'dcommit', '-f'], 1104 ['git', 'cl', 'dcommit', '-f'],
1036 ['git', 'cl', 'set_close'], 1105 ['git', 'cl', 'set_close'],
1037 ]) 1106 ])
1038 1107
1039 # The mac ports should both be removed since they're the only ones i n builders._exact_matches. 1108 # The mac ports should both be removed since they're the only ones i n builders._exact_matches.
1040 self.assertEqual(self.tool.filesystem.read_text_file(test_port.path_ to_generic_test_expectations_file()), """ 1109 self.assertEqual(self.tool.filesystem.read_text_file(test_port.path_ to_generic_test_expectations_file()), """
1041 Bug(foo) [ Linux Win ] fast/dom/prototype-taco.html [ NeedsRebaseline ] 1110 Bug(foo) [ Linux Win ] fast/dom/prototype-taco.html [ NeedsRebaseline ]
1042 """) 1111 """)
1043 finally: 1112 finally:
1044 builders._exact_matches = old_exact_matches 1113 builders._exact_matches = old_exact_matches
OLDNEW
« no previous file with comments | « Tools/Scripts/webkitpy/tool/commands/rebaseline.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698