OLD | NEW |
1 # Copyright 2016 The Chromium Authors. All rights reserved. | 1 # Copyright 2016 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 import unittest | 5 import unittest |
6 | 6 |
7 from webkitpy.common.net.buildbot_mock import MockBuilder | 7 from webkitpy.common.net.buildbot_mock import MockBuilder |
8 from webkitpy.common.net.layouttestresults import LayoutTestResults | 8 from webkitpy.common.net.layouttestresults import LayoutTestResults |
9 from webkitpy.common.system.executive_mock import MockExecutive | 9 from webkitpy.common.system.executive_mock import MockExecutive |
10 from webkitpy.common.system.executive_mock import MockExecutive2 | 10 from webkitpy.common.system.executive_mock import MockExecutive2 |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 self.tool.filesystem.write_text_file( | 45 self.tool.filesystem.write_text_file( |
46 self.tool.filesystem.join(self.mac_port.layout_tests_dir(), "Virtual
TestSuites"), '[]') | 46 self.tool.filesystem.join(self.mac_port.layout_tests_dir(), "Virtual
TestSuites"), '[]') |
47 | 47 |
48 # In AbstractParallelRebaselineCommand._rebaseline_commands, a default p
ort | 48 # In AbstractParallelRebaselineCommand._rebaseline_commands, a default p
ort |
49 # object is gotten using self.tool.port_factory.get(), which is used to
get | 49 # object is gotten using self.tool.port_factory.get(), which is used to
get |
50 # test paths -- and the layout tests directory may be different for the
"test" | 50 # test paths -- and the layout tests directory may be different for the
"test" |
51 # ports and real ports. Since only "test" ports are used in this class, | 51 # ports and real ports. Since only "test" ports are used in this class, |
52 # we can make the default port also a "test" port. | 52 # we can make the default port also a "test" port. |
53 self.original_port_factory_get = self.tool.port_factory.get | 53 self.original_port_factory_get = self.tool.port_factory.get |
54 test_port = self.tool.port_factory.get('test') | 54 test_port = self.tool.port_factory.get('test') |
55 self._builder_data = {} | 55 self._build_data = {} |
56 | 56 |
57 def get_test_port(port_name=None, options=None, **kwargs): | 57 def get_test_port(port_name=None, options=None, **kwargs): |
58 if not port_name: | 58 if not port_name: |
59 return test_port | 59 return test_port |
60 return self.original_port_factory_get(port_name, options, **kwargs) | 60 return self.original_port_factory_get(port_name, options, **kwargs) |
61 | 61 |
62 self.tool.port_factory.get = get_test_port | 62 self.tool.port_factory.get = get_test_port |
63 | 63 |
64 def tearDown(self): | 64 def tearDown(self): |
65 self.tool.port_factory.get = self.original_port_factory_get | 65 self.tool.port_factory.get = self.original_port_factory_get |
66 | 66 |
67 def _expand(self, path): | 67 def _expand(self, path): |
68 if self.tool.filesystem.isabs(path): | 68 if self.tool.filesystem.isabs(path): |
69 return path | 69 return path |
70 return self.tool.filesystem.join(self.mac_port.layout_tests_dir(), path) | 70 return self.tool.filesystem.join(self.mac_port.layout_tests_dir(), path) |
71 | 71 |
72 def _read(self, path): | 72 def _read(self, path): |
73 return self.tool.filesystem.read_text_file(self._expand(path)) | 73 return self.tool.filesystem.read_text_file(self._expand(path)) |
74 | 74 |
75 def _write(self, path, contents): | 75 def _write(self, path, contents): |
76 self.tool.filesystem.write_text_file(self._expand(path), contents) | 76 self.tool.filesystem.write_text_file(self._expand(path), contents) |
77 | 77 |
78 def _zero_out_test_expectations(self): | 78 def _zero_out_test_expectations(self): |
79 for port_name in self.tool.port_factory.all_port_names(): | 79 for port_name in self.tool.port_factory.all_port_names(): |
80 port = self.tool.port_factory.get(port_name) | 80 port = self.tool.port_factory.get(port_name) |
81 for path in port.expectations_files(): | 81 for path in port.expectations_files(): |
82 self._write(path, '') | 82 self._write(path, '') |
83 self.tool.filesystem.written_files = {} | 83 self.tool.filesystem.written_files = {} |
84 | 84 |
85 def _setup_mock_builder_data(self): | 85 def _setup_mock_build_data(self): |
86 data = LayoutTestResults({ | 86 data = LayoutTestResults({ |
87 "tests": { | 87 "tests": { |
88 "userscripts": { | 88 "userscripts": { |
89 "first-test.html": { | 89 "first-test.html": { |
90 "expected": "PASS", | 90 "expected": "PASS", |
91 "actual": "IMAGE+TEXT" | 91 "actual": "IMAGE+TEXT" |
92 }, | 92 }, |
93 "second-test.html": { | 93 "second-test.html": { |
94 "expected": "FAIL", | 94 "expected": "FAIL", |
95 "actual": "IMAGE+TEXT" | 95 "actual": "IMAGE+TEXT" |
96 } | 96 } |
97 } | 97 } |
98 } | 98 } |
99 }) | 99 }) |
100 | 100 |
101 def builder_data(): | 101 def build_data(): |
102 self._builder_data = {} | 102 self._build_data = {} |
103 for builder in ['MOCK Win7', 'MOCK Win7 (dbg)', 'MOCK Mac10.11']: | 103 for builder in ['MOCK Win7', 'MOCK Win7 (dbg)', 'MOCK Mac10.11']: |
104 self._builder_data[builder] = data | 104 self._build_data[Build(builder)] = data |
105 return self._builder_data | 105 return self._build_data |
106 | 106 |
107 self.command.builder_data = builder_data | 107 self.command.build_data = build_data |
108 | 108 |
109 class TestCopyExistingBaselinesInternal(BaseTestCase): | 109 class TestCopyExistingBaselinesInternal(BaseTestCase): |
110 command_constructor = CopyExistingBaselinesInternal | 110 command_constructor = CopyExistingBaselinesInternal |
111 | 111 |
112 def setUp(self): | 112 def setUp(self): |
113 super(TestCopyExistingBaselinesInternal, self).setUp() | 113 super(TestCopyExistingBaselinesInternal, self).setUp() |
114 | 114 |
115 def test_copying_overwritten_baseline(self): | 115 def test_copying_overwritten_baseline(self): |
116 self.tool.executive = MockExecutive2() | 116 self.tool.executive = MockExecutive2() |
117 | 117 |
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
334 command_constructor = RebaselineJson | 334 command_constructor = RebaselineJson |
335 | 335 |
336 def setUp(self): | 336 def setUp(self): |
337 super(TestRebaselineJson, self).setUp() | 337 super(TestRebaselineJson, self).setUp() |
338 self.tool.executive = MockExecutive2() | 338 self.tool.executive = MockExecutive2() |
339 | 339 |
340 def tearDown(self): | 340 def tearDown(self): |
341 super(TestRebaselineJson, self).tearDown() | 341 super(TestRebaselineJson, self).tearDown() |
342 | 342 |
343 def test_rebaseline_test_passes_on_all_builders(self): | 343 def test_rebaseline_test_passes_on_all_builders(self): |
344 self._setup_mock_builder_data() | 344 self._setup_mock_build_data() |
345 | 345 |
346 def builder_data(): | 346 def build_data(): |
347 self._builder_data['MOCK Win7'] = LayoutTestResults({ | 347 self._build_data[Build('MOCK Win7')] = LayoutTestResults({ |
348 "tests": { | 348 "tests": { |
349 "userscripts": { | 349 "userscripts": { |
350 "first-test.html": { | 350 "first-test.html": { |
351 "expected": "NEEDSREBASELINE", | 351 "expected": "NEEDSREBASELINE", |
352 "actual": "PASS" | 352 "actual": "PASS" |
353 } | 353 } |
354 } | 354 } |
355 } | 355 } |
356 }) | 356 }) |
357 return self._builder_data | 357 return self._build_data |
358 | 358 |
359 self.command.builder_data = builder_data | 359 self.command.build_data = build_data |
360 | 360 |
361 options = MockOptions(optimize=True, verbose=True, results_directory=Non
e) | 361 options = MockOptions(optimize=True, verbose=True, results_directory=Non
e) |
362 | 362 |
363 self._write(self.mac_expectations_path, "Bug(x) userscripts/first-test.h
tml [ Failure ]\n") | 363 self._write(self.mac_expectations_path, "Bug(x) userscripts/first-test.h
tml [ Failure ]\n") |
364 self._write("userscripts/first-test.html", "Dummy test contents") | 364 self._write("userscripts/first-test.html", "Dummy test contents") |
365 | 365 |
366 self.command._rebaseline(options, {"userscripts/first-test.html": {"MOCK
Win7": ["txt", "png"]}}) | 366 self.command._rebaseline(options, {"userscripts/first-test.html": {Build
("MOCK Win7"): ["txt", "png"]}}) |
367 | 367 |
368 self.assertEqual(self.tool.executive.calls, []) | 368 self.assertEqual(self.tool.executive.calls, []) |
369 | 369 |
370 def test_rebaseline_all(self): | 370 def test_rebaseline_all(self): |
371 self._setup_mock_builder_data() | 371 self._setup_mock_build_data() |
372 | 372 |
373 options = MockOptions(optimize=True, verbose=True, results_directory=Non
e) | 373 options = MockOptions(optimize=True, verbose=True, results_directory=Non
e) |
374 self._write("userscripts/first-test.html", "Dummy test contents") | 374 self._write("userscripts/first-test.html", "Dummy test contents") |
375 self.command._rebaseline(options, {"userscripts/first-test.html": {"MOCK
Win7": ["txt", "png"]}}) | 375 self.command._rebaseline(options, {"userscripts/first-test.html": {Build
("MOCK Win7"): ["txt", "png"]}}) |
376 | 376 |
377 # 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
() |
378 self.assertEqual(self.tool.executive.calls, | 378 self.assertEqual(self.tool.executive.calls, |
379 [ | 379 [ |
380 [['python', 'echo', 'copy-existing-baselines-intern
al', '--suffixes', 'txt,png', | 380 [['python', 'echo', 'copy-existing-baselines-intern
al', '--suffixes', 'txt,png', |
381 '--builder', 'MOCK Win7', '--test', 'userscripts/
first-test.html', '--verbose']], | 381 '--builder', 'MOCK Win7', '--test', 'userscripts/
first-test.html', '--verbose']], |
382 [['python', 'echo', 'rebaseline-test-internal', '--
suffixes', 'txt,png', | 382 [['python', 'echo', 'rebaseline-test-internal', '--
suffixes', 'txt,png', |
383 '--builder', 'MOCK Win7', '--test', 'userscripts/
first-test.html', '--verbose']], | 383 '--builder', 'MOCK Win7', '--test', 'userscripts/
first-test.html', '--verbose']], |
384 [['python', 'echo', 'optimize-baselines', '--no-mod
ify-scm', '--suffixes', 'txt,png', | 384 [['python', 'echo', 'optimize-baselines', '--no-mod
ify-scm', '--suffixes', 'txt,png', |
385 'userscripts/first-test.html', '--verbose']] | 385 'userscripts/first-test.html', '--verbose']] |
386 ]) | 386 ]) |
387 | 387 |
388 def test_rebaseline_debug(self): | 388 def test_rebaseline_debug(self): |
389 self._setup_mock_builder_data() | 389 self._setup_mock_build_data() |
390 | 390 |
391 options = MockOptions(optimize=True, verbose=True, results_directory=Non
e) | 391 options = MockOptions(optimize=True, verbose=True, results_directory=Non
e) |
392 self._write("userscripts/first-test.html", "Dummy test contents") | 392 self._write("userscripts/first-test.html", "Dummy test contents") |
393 self.command._rebaseline(options, {"userscripts/first-test.html": {"MOCK
Win7 (dbg)": ["txt", "png"]}}) | 393 self.command._rebaseline(options, {"userscripts/first-test.html": {Build
("MOCK Win7 (dbg)"): ["txt", "png"]}}) |
394 | 394 |
395 # Note that we have one run_in_parallel() call followed by a run_command
() | 395 # Note that we have one run_in_parallel() call followed by a run_command
() |
396 self.assertEqual(self.tool.executive.calls, | 396 self.assertEqual(self.tool.executive.calls, |
397 [ | 397 [ |
398 [['python', 'echo', 'copy-existing-baselines-intern
al', '--suffixes', 'txt,png', | 398 [['python', 'echo', 'copy-existing-baselines-intern
al', '--suffixes', 'txt,png', |
399 '--builder', 'MOCK Win7 (dbg)', '--test', 'usersc
ripts/first-test.html', '--verbose']], | 399 '--builder', 'MOCK Win7 (dbg)', '--test', 'usersc
ripts/first-test.html', '--verbose']], |
400 [['python', 'echo', 'rebaseline-test-internal', '--
suffixes', 'txt,png', '--builder', | 400 [['python', 'echo', 'rebaseline-test-internal', '--
suffixes', 'txt,png', '--builder', |
401 'MOCK Win7 (dbg)', '--test', 'userscripts/first-t
est.html', '--verbose']], | 401 'MOCK Win7 (dbg)', '--test', 'userscripts/first-t
est.html', '--verbose']], |
402 [['python', 'echo', 'optimize-baselines', '--no-mod
ify-scm', '--suffixes', 'txt,png', | 402 [['python', 'echo', 'optimize-baselines', '--no-mod
ify-scm', '--suffixes', 'txt,png', |
403 'userscripts/first-test.html', '--verbose']] | 403 'userscripts/first-test.html', '--verbose']] |
404 ]) | 404 ]) |
405 | 405 |
406 def test_no_optimize(self): | 406 def test_no_optimize(self): |
407 self._setup_mock_builder_data() | 407 self._setup_mock_build_data() |
408 | 408 |
409 options = MockOptions(optimize=False, verbose=True, results_directory=No
ne) | 409 options = MockOptions(optimize=False, verbose=True, results_directory=No
ne) |
410 self._write("userscripts/first-test.html", "Dummy test contents") | 410 self._write("userscripts/first-test.html", "Dummy test contents") |
411 self.command._rebaseline(options, {"userscripts/first-test.html": {"MOCK
Win7 (dbg)": ["txt", "png"]}}) | 411 self.command._rebaseline(options, {"userscripts/first-test.html": {Build
("MOCK Win7 (dbg)"): ["txt", "png"]}}) |
412 | 412 |
413 # Note that we have only one run_in_parallel() call | 413 # Note that we have only one run_in_parallel() call |
414 self.assertEqual(self.tool.executive.calls, | 414 self.assertEqual(self.tool.executive.calls, |
415 [[['python', 'echo', 'copy-existing-baselines-internal'
, '--suffixes', 'txt,png', '--builder', 'MOCK Win7 (dbg)', '--test', 'userscript
s/first-test.html', '--verbose']], | 415 [[['python', 'echo', 'copy-existing-baselines-internal'
, '--suffixes', 'txt,png', '--builder', 'MOCK Win7 (dbg)', '--test', 'userscript
s/first-test.html', '--verbose']], |
416 [['python', 'echo', 'rebaseline-test-internal', '--suf
fixes', 'txt,png', '--builder', 'MOCK Win7 (dbg)', '--test', 'userscripts/first-
test.html', '--verbose']]]) | 416 [['python', 'echo', 'rebaseline-test-internal', '--suf
fixes', 'txt,png', '--builder', 'MOCK Win7 (dbg)', '--test', 'userscripts/first-
test.html', '--verbose']]]) |
417 | 417 |
418 def test_results_directory(self): | 418 def test_results_directory(self): |
419 self._setup_mock_builder_data() | 419 self._setup_mock_build_data() |
420 | 420 |
421 options = MockOptions(optimize=False, verbose=True, results_directory='/
tmp') | 421 options = MockOptions(optimize=False, verbose=True, results_directory='/
tmp') |
422 self._write("userscripts/first-test.html", "Dummy test contents") | 422 self._write("userscripts/first-test.html", "Dummy test contents") |
423 self.command._rebaseline(options, {"userscripts/first-test.html": {"MOCK
Win7": ["txt", "png"]}}) | 423 self.command._rebaseline(options, {"userscripts/first-test.html": {Build
("MOCK Win7"): ["txt", "png"]}}) |
424 | 424 |
425 # Note that we have only one run_in_parallel() call | 425 # Note that we have only one run_in_parallel() call |
426 self.assertEqual(self.tool.executive.calls, | 426 self.assertEqual(self.tool.executive.calls, |
427 [[['python', 'echo', 'copy-existing-baselines-internal'
, '--suffixes', 'txt,png', '--builder', 'MOCK Win7', '--test', 'userscripts/firs
t-test.html', '--results-directory', '/tmp', '--verbose']], | 427 [[['python', 'echo', 'copy-existing-baselines-internal'
, '--suffixes', 'txt,png', '--builder', 'MOCK Win7', '--test', 'userscripts/firs
t-test.html', '--results-directory', '/tmp', '--verbose']], |
428 [['python', 'echo', 'rebaseline-test-internal', '--suf
fixes', 'txt,png', '--builder', 'MOCK Win7', '--test', 'userscripts/first-test.h
tml', '--results-directory', '/tmp', '--verbose']]]) | 428 [['python', 'echo', 'rebaseline-test-internal', '--suf
fixes', 'txt,png', '--builder', 'MOCK Win7', '--test', 'userscripts/first-test.h
tml', '--results-directory', '/tmp', '--verbose']]]) |
429 | 429 |
430 | 430 |
431 class TestRebaselineJsonUpdatesExpectationsFiles(BaseTestCase): | 431 class TestRebaselineJsonUpdatesExpectationsFiles(BaseTestCase): |
432 command_constructor = RebaselineJson | 432 command_constructor = RebaselineJson |
433 | 433 |
434 def setUp(self): | 434 def setUp(self): |
435 super(TestRebaselineJsonUpdatesExpectationsFiles, self).setUp() | 435 super(TestRebaselineJsonUpdatesExpectationsFiles, self).setUp() |
436 self.tool.executive = MockExecutive2() | 436 self.tool.executive = MockExecutive2() |
437 | 437 |
438 def mock_run_command(*args, **kwargs): # pylint: disable=unused-argumen
t | 438 def mock_run_command(*args, **kwargs): # pylint: disable=unused-argumen
t |
439 return '{"add": [], "remove-lines": [{"test": "userscripts/first-tes
t.html", "builder": "MOCK Mac10.11"}]}\n' | 439 return '{"add": [], "remove-lines": [{"test": "userscripts/first-tes
t.html", "builder": "MOCK Mac10.11"}]}\n' |
440 self.tool.executive.run_command = mock_run_command | 440 self.tool.executive.run_command = mock_run_command |
441 | 441 |
442 def test_rebaseline_updates_expectations_file(self): | 442 def test_rebaseline_updates_expectations_file(self): |
443 options = MockOptions(optimize=False, verbose=True, results_directory=No
ne) | 443 options = MockOptions(optimize=False, verbose=True, results_directory=No
ne) |
444 | 444 |
445 self._write(self.mac_expectations_path, | 445 self._write(self.mac_expectations_path, |
446 "Bug(x) [ Mac ] userscripts/first-test.html [ Failure ]\nbug
(z) [ Linux ] userscripts/first-test.html [ Failure ]\n") | 446 "Bug(x) [ Mac ] userscripts/first-test.html [ Failure ]\nbug
(z) [ Linux ] userscripts/first-test.html [ Failure ]\n") |
447 self._write("userscripts/first-test.html", "Dummy test contents") | 447 self._write("userscripts/first-test.html", "Dummy test contents") |
448 self._setup_mock_builder_data() | 448 self._setup_mock_build_data() |
449 | 449 |
450 self.command._rebaseline(options, {"userscripts/first-test.html": {"MOCK
Mac10.11": ["txt", "png"]}}) | 450 self.command._rebaseline(options, {"userscripts/first-test.html": {Build
("MOCK Mac10.11"): ["txt", "png"]}}) |
451 | 451 |
452 new_expectations = self._read(self.mac_expectations_path) | 452 new_expectations = self._read(self.mac_expectations_path) |
453 self.assertMultiLineEqual( | 453 self.assertMultiLineEqual( |
454 new_expectations, "Bug(x) [ Mac10.10 ] userscripts/first-test.html [
Failure ]\nbug(z) [ Linux ] userscripts/first-test.html [ Failure ]\n") | 454 new_expectations, "Bug(x) [ Mac10.10 ] userscripts/first-test.html [
Failure ]\nbug(z) [ Linux ] userscripts/first-test.html [ Failure ]\n") |
455 | 455 |
456 def test_rebaseline_updates_expectations_file_all_platforms(self): | 456 def test_rebaseline_updates_expectations_file_all_platforms(self): |
457 options = MockOptions(optimize=False, verbose=True, results_directory=No
ne) | 457 options = MockOptions(optimize=False, verbose=True, results_directory=No
ne) |
458 | 458 |
459 self._write(self.mac_expectations_path, "Bug(x) userscripts/first-test.h
tml [ Failure ]\n") | 459 self._write(self.mac_expectations_path, "Bug(x) userscripts/first-test.h
tml [ Failure ]\n") |
460 self._write("userscripts/first-test.html", "Dummy test contents") | 460 self._write("userscripts/first-test.html", "Dummy test contents") |
461 self._setup_mock_builder_data() | 461 self._setup_mock_build_data() |
462 | 462 |
463 self.command._rebaseline(options, {"userscripts/first-test.html": {"MOCK
Mac10.11": ["txt", "png"]}}) | 463 self.command._rebaseline(options, {"userscripts/first-test.html": {Build
("MOCK Mac10.11"): ["txt", "png"]}}) |
464 | 464 |
465 new_expectations = self._read(self.mac_expectations_path) | 465 new_expectations = self._read(self.mac_expectations_path) |
466 self.assertMultiLineEqual( | 466 self.assertMultiLineEqual( |
467 new_expectations, "Bug(x) [ Linux Mac10.10 Win ] userscripts/first-t
est.html [ Failure ]\n") | 467 new_expectations, "Bug(x) [ Linux Mac10.10 Win ] userscripts/first-t
est.html [ Failure ]\n") |
468 | 468 |
469 def test_rebaseline_handles_platform_skips(self): | 469 def test_rebaseline_handles_platform_skips(self): |
470 # This test is just like test_rebaseline_updates_expectations_file_all_p
latforms(), | 470 # This test is just like test_rebaseline_updates_expectations_file_all_p
latforms(), |
471 # except that if a particular port happens to SKIP a test in an override
s file, | 471 # except that if a particular port happens to SKIP a test in an override
s file, |
472 # we count that as passing, and do not think that we still need to rebas
eline it. | 472 # we count that as passing, and do not think that we still need to rebas
eline it. |
473 options = MockOptions(optimize=False, verbose=True, results_directory=No
ne) | 473 options = MockOptions(optimize=False, verbose=True, results_directory=No
ne) |
474 | 474 |
475 self._write(self.mac_expectations_path, "Bug(x) userscripts/first-test.h
tml [ Failure ]\n") | 475 self._write(self.mac_expectations_path, "Bug(x) userscripts/first-test.h
tml [ Failure ]\n") |
476 self._write("NeverFixTests", "Bug(y) [ Android ] userscripts [ WontFix ]
\n") | 476 self._write("NeverFixTests", "Bug(y) [ Android ] userscripts [ WontFix ]
\n") |
477 self._write("userscripts/first-test.html", "Dummy test contents") | 477 self._write("userscripts/first-test.html", "Dummy test contents") |
478 self._setup_mock_builder_data() | 478 self._setup_mock_build_data() |
479 | 479 |
480 self.command._rebaseline(options, {"userscripts/first-test.html": {"MOCK
Mac10.11": ["txt", "png"]}}) | 480 self.command._rebaseline(options, {"userscripts/first-test.html": {Build
("MOCK Mac10.11"): ["txt", "png"]}}) |
481 | 481 |
482 new_expectations = self._read(self.mac_expectations_path) | 482 new_expectations = self._read(self.mac_expectations_path) |
483 self.assertMultiLineEqual( | 483 self.assertMultiLineEqual( |
484 new_expectations, "Bug(x) [ Linux Mac10.10 Win ] userscripts/first-t
est.html [ Failure ]\n") | 484 new_expectations, "Bug(x) [ Linux Mac10.10 Win ] userscripts/first-t
est.html [ Failure ]\n") |
485 | 485 |
486 def test_rebaseline_handles_skips_in_file(self): | 486 def test_rebaseline_handles_skips_in_file(self): |
487 # This test is like test_Rebaseline_handles_platform_skips, except that
the | 487 # This test is like test_Rebaseline_handles_platform_skips, except that
the |
488 # Skip is in the same (generic) file rather than a platform file. In thi
s case, | 488 # Skip is in the same (generic) file rather than a platform file. In thi
s case, |
489 # the Skip line should be left unmodified. Note that the first line is n
ow | 489 # the Skip line should be left unmodified. Note that the first line is n
ow |
490 # qualified as "[Linux Mac Win]"; if it was unqualified, it would confli
ct with | 490 # qualified as "[Linux Mac Win]"; if it was unqualified, it would confli
ct with |
491 # the second line. | 491 # the second line. |
492 options = MockOptions(optimize=False, verbose=True, results_directory=No
ne) | 492 options = MockOptions(optimize=False, verbose=True, results_directory=No
ne) |
493 | 493 |
494 self._write(self.mac_expectations_path, | 494 self._write(self.mac_expectations_path, |
495 ("Bug(x) [ Linux Mac Win ] userscripts/first-test.html [ Fai
lure ]\n" | 495 ("Bug(x) [ Linux Mac Win ] userscripts/first-test.html [ Fai
lure ]\n" |
496 "Bug(y) [ Android ] userscripts/first-test.html [ Skip ]\n"
)) | 496 "Bug(y) [ Android ] userscripts/first-test.html [ Skip ]\n"
)) |
497 self._write("userscripts/first-test.html", "Dummy test contents") | 497 self._write("userscripts/first-test.html", "Dummy test contents") |
498 self._setup_mock_builder_data() | 498 self._setup_mock_build_data() |
499 | 499 |
500 self.command._rebaseline(options, {"userscripts/first-test.html": {"MOCK
Mac10.11": ["txt", "png"]}}) | 500 self.command._rebaseline(options, {"userscripts/first-test.html": {Build
("MOCK Mac10.11"): ["txt", "png"]}}) |
501 | 501 |
502 new_expectations = self._read(self.mac_expectations_path) | 502 new_expectations = self._read(self.mac_expectations_path) |
503 self.assertMultiLineEqual( | 503 self.assertMultiLineEqual( |
504 new_expectations, | 504 new_expectations, |
505 ("Bug(x) [ Linux Mac10.10 Win ] userscripts/first-test.html [ Failur
e ]\n" | 505 ("Bug(x) [ Linux Mac10.10 Win ] userscripts/first-test.html [ Failur
e ]\n" |
506 "Bug(y) [ Android ] userscripts/first-test.html [ Skip ]\n")) | 506 "Bug(y) [ Android ] userscripts/first-test.html [ Skip ]\n")) |
507 | 507 |
508 def test_rebaseline_handles_smoke_tests(self): | 508 def test_rebaseline_handles_smoke_tests(self): |
509 # This test is just like test_rebaseline_handles_platform_skips, except
that we check for | 509 # This test is just like test_rebaseline_handles_platform_skips, except
that we check for |
510 # a test not being in the SmokeTests file, instead of using overrides fi
les. | 510 # a test not being in the SmokeTests file, instead of using overrides fi
les. |
511 # If a test is not part of the smoke tests, we count that as passing on
ports that only | 511 # If a test is not part of the smoke tests, we count that as passing on
ports that only |
512 # run smoke tests, and do not think that we still need to rebaseline it. | 512 # run smoke tests, and do not think that we still need to rebaseline it. |
513 options = MockOptions(optimize=False, verbose=True, results_directory=No
ne) | 513 options = MockOptions(optimize=False, verbose=True, results_directory=No
ne) |
514 | 514 |
515 self._write(self.mac_expectations_path, "Bug(x) userscripts/first-test.h
tml [ Failure ]\n") | 515 self._write(self.mac_expectations_path, "Bug(x) userscripts/first-test.h
tml [ Failure ]\n") |
516 self._write("SmokeTests", "fast/html/article-element.html") | 516 self._write("SmokeTests", "fast/html/article-element.html") |
517 self._write("userscripts/first-test.html", "Dummy test contents") | 517 self._write("userscripts/first-test.html", "Dummy test contents") |
518 self._setup_mock_builder_data() | 518 self._setup_mock_build_data() |
519 | 519 |
520 self.command._rebaseline(options, {"userscripts/first-test.html": {"MOCK
Mac10.11": ["txt", "png"]}}) | 520 self.command._rebaseline(options, {"userscripts/first-test.html": {Build
("MOCK Mac10.11"): ["txt", "png"]}}) |
521 | 521 |
522 new_expectations = self._read(self.mac_expectations_path) | 522 new_expectations = self._read(self.mac_expectations_path) |
523 self.assertMultiLineEqual( | 523 self.assertMultiLineEqual( |
524 new_expectations, "Bug(x) [ Linux Mac10.10 Win ] userscripts/first-t
est.html [ Failure ]\n") | 524 new_expectations, "Bug(x) [ Linux Mac10.10 Win ] userscripts/first-t
est.html [ Failure ]\n") |
525 | 525 |
526 | 526 |
527 class TestRebaseline(BaseTestCase): | 527 class TestRebaseline(BaseTestCase): |
528 # This command shares most of its logic with RebaselineJson, so these tests
just test what is different. | 528 # This command shares most of its logic with RebaselineJson, so these tests
just test what is different. |
529 | 529 |
530 command_constructor = Rebaseline # AKA webkit-patch rebaseline | 530 command_constructor = Rebaseline # AKA webkit-patch rebaseline |
531 | 531 |
532 def test_rebaseline(self): | 532 def test_rebaseline(self): |
533 self.command._builders_to_pull_from = lambda: [MockBuilder('MOCK Win7')] | 533 self.command._builders_to_pull_from = lambda: [MockBuilder('MOCK Win7')] |
534 | 534 |
535 self._write("userscripts/first-test.html", "test data") | 535 self._write("userscripts/first-test.html", "test data") |
536 | 536 |
537 self._zero_out_test_expectations() | 537 self._zero_out_test_expectations() |
538 self._setup_mock_builder_data() | 538 self._setup_mock_build_data() |
539 | 539 |
540 self.command.execute(MockOptions(results_directory=False, optimize=False
, builders=None, | 540 self.command.execute(MockOptions(results_directory=False, optimize=False
, builders=None, |
541 suffixes="txt,png", verbose=True), ['us
erscripts/first-test.html'], self.tool) | 541 suffixes="txt,png", verbose=True), ['us
erscripts/first-test.html'], self.tool) |
542 | 542 |
543 self.assertEqual(self.tool.executive.calls, | 543 self.assertEqual(self.tool.executive.calls, |
544 [[['python', 'echo', 'copy-existing-baselines-internal'
, '--suffixes', 'txt,png', '--builder', 'MOCK Win7', '--test', 'userscripts/firs
t-test.html', '--verbose']], | 544 [[['python', 'echo', 'copy-existing-baselines-internal'
, '--suffixes', 'txt,png', '--builder', 'MOCK Win7', '--test', 'userscripts/firs
t-test.html', '--verbose']], |
545 [['python', 'echo', 'rebaseline-test-internal', '--suf
fixes', 'txt,png', '--builder', 'MOCK Win7', '--test', 'userscripts/first-test.h
tml', '--verbose']]]) | 545 [['python', 'echo', 'rebaseline-test-internal', '--suf
fixes', 'txt,png', '--builder', 'MOCK Win7', '--test', 'userscripts/first-test.h
tml', '--verbose']]]) |
546 | 546 |
547 def test_rebaseline_directory(self): | 547 def test_rebaseline_directory(self): |
548 self.command._builders_to_pull_from = lambda: [MockBuilder('MOCK Win7')] | 548 self.command._builders_to_pull_from = lambda: [MockBuilder('MOCK Win7')] |
549 | 549 |
550 self._write("userscripts/first-test.html", "test data") | 550 self._write("userscripts/first-test.html", "test data") |
551 self._write("userscripts/second-test.html", "test data") | 551 self._write("userscripts/second-test.html", "test data") |
552 | 552 |
553 self._setup_mock_builder_data() | 553 self._setup_mock_build_data() |
554 | 554 |
555 self.command.execute(MockOptions(results_directory=False, optimize=False
, builders=None, | 555 self.command.execute(MockOptions(results_directory=False, optimize=False
, builders=None, |
556 suffixes="txt,png", verbose=True), ['us
erscripts'], self.tool) | 556 suffixes="txt,png", verbose=True), ['us
erscripts'], self.tool) |
557 | 557 |
558 self.assertEqual(self.tool.executive.calls, | 558 self.assertEqual(self.tool.executive.calls, |
559 [ | 559 [ |
560 [ | 560 [ |
561 ['python', 'echo', 'copy-existing-baselines-int
ernal', '--suffixes', 'txt,png', | 561 ['python', 'echo', 'copy-existing-baselines-int
ernal', '--suffixes', 'txt,png', |
562 '--builder', 'MOCK Win7', '--test', 'userscrip
ts/first-test.html', '--verbose'], | 562 '--builder', 'MOCK Win7', '--test', 'userscrip
ts/first-test.html', '--verbose'], |
563 ['python', 'echo', 'copy-existing-baselines-int
ernal', '--suffixes', 'txt,png', | 563 ['python', 'echo', 'copy-existing-baselines-int
ernal', '--suffixes', 'txt,png', |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
601 | 601 |
602 def _write_test_file(self, port, path, contents): | 602 def _write_test_file(self, port, path, contents): |
603 abs_path = self.tool.filesystem.join(port.layout_tests_dir(), path) | 603 abs_path = self.tool.filesystem.join(port.layout_tests_dir(), path) |
604 self.tool.filesystem.write_text_file(abs_path, contents) | 604 self.tool.filesystem.write_text_file(abs_path, contents) |
605 | 605 |
606 def test_rebaseline_expectations(self): | 606 def test_rebaseline_expectations(self): |
607 self._zero_out_test_expectations() | 607 self._zero_out_test_expectations() |
608 | 608 |
609 self.tool.executive = MockExecutive2() | 609 self.tool.executive = MockExecutive2() |
610 | 610 |
611 def builder_data(): | 611 def build_data(): |
612 self._builder_data['MOCK Mac10.11'] = self._builder_data['MOCK Mac10
.10'] = LayoutTestResults({ | 612 self._build_data[Build('MOCK Mac10.11')] = self._build_data[Build('M
OCK Mac10.10')] = LayoutTestResults({ |
613 "tests": { | 613 "tests": { |
614 "userscripts": { | 614 "userscripts": { |
615 "another-test.html": { | 615 "another-test.html": { |
616 "expected": "PASS", | 616 "expected": "PASS", |
617 "actual": "PASS TEXT" | 617 "actual": "PASS TEXT" |
618 }, | 618 }, |
619 "images.svg": { | 619 "images.svg": { |
620 "expected": "FAIL", | 620 "expected": "FAIL", |
621 "actual": "IMAGE+TEXT" | 621 "actual": "IMAGE+TEXT" |
622 } | 622 } |
623 } | 623 } |
624 } | 624 } |
625 }) | 625 }) |
626 return self._builder_data | 626 return self._build_data |
627 | 627 |
628 self.command.builder_data = builder_data | 628 self.command.build_data = build_data |
629 | 629 |
630 self._write("userscripts/another-test.html", "Dummy test contents") | 630 self._write("userscripts/another-test.html", "Dummy test contents") |
631 self._write("userscripts/images.svg", "Dummy test contents") | 631 self._write("userscripts/images.svg", "Dummy test contents") |
632 self.command._tests_to_rebaseline = lambda port: { | 632 self.command._tests_to_rebaseline = lambda port: { |
633 'userscripts/another-test.html': set(['txt']), | 633 'userscripts/another-test.html': set(['txt']), |
634 'userscripts/images.svg': set(['png']), | 634 'userscripts/images.svg': set(['png']), |
635 'userscripts/not-actually-failing.html': set(['txt', 'png', 'wav']), | 635 'userscripts/not-actually-failing.html': set(['txt', 'png', 'wav']), |
636 } | 636 } |
637 | 637 |
638 self.command.execute(self.options, [], self.tool) | 638 self.command.execute(self.options, [], self.tool) |
(...skipping 19 matching lines...) Expand all Loading... |
658 ['python', 'echo', 'rebaseline-test-internal', '--suffixes', 'pn
g', | 658 ['python', 'echo', 'rebaseline-test-internal', '--suffixes', 'pn
g', |
659 '--builder', 'MOCK Mac10.11', '--test', 'userscripts/images.svg
'], | 659 '--builder', 'MOCK Mac10.11', '--test', 'userscripts/images.svg
'], |
660 ], | 660 ], |
661 ]) | 661 ]) |
662 | 662 |
663 def test_rebaseline_expectations_reftests(self): | 663 def test_rebaseline_expectations_reftests(self): |
664 self._zero_out_test_expectations() | 664 self._zero_out_test_expectations() |
665 | 665 |
666 self.tool.executive = MockExecutive2() | 666 self.tool.executive = MockExecutive2() |
667 | 667 |
668 def builder_data(): | 668 def build_data(): |
669 self._builder_data['MOCK Mac10.10'] = self._builder_data['MOCK Mac10
.11'] = LayoutTestResults({ | 669 self._build_data[Build('MOCK Mac10.10')] = self._build_data[Build('M
OCK Mac10.11')] = LayoutTestResults({ |
670 "tests": { | 670 "tests": { |
671 "userscripts": { | 671 "userscripts": { |
672 "reftest-text.html": { | 672 "reftest-text.html": { |
673 "expected": "PASS", | 673 "expected": "PASS", |
674 "actual": "TEXT" | 674 "actual": "TEXT" |
675 }, | 675 }, |
676 "reftest-image.html": { | 676 "reftest-image.html": { |
677 "expected": "FAIL", | 677 "expected": "FAIL", |
678 "actual": "IMAGE" | 678 "actual": "IMAGE" |
679 }, | 679 }, |
680 "reftest-image-text.html": { | 680 "reftest-image-text.html": { |
681 "expected": "FAIL", | 681 "expected": "FAIL", |
682 "actual": "IMAGE+TEXT" | 682 "actual": "IMAGE+TEXT" |
683 } | 683 } |
684 } | 684 } |
685 } | 685 } |
686 }) | 686 }) |
687 return self._builder_data | 687 return self._build_data |
688 | 688 |
689 self.command.builder_data = builder_data | 689 self.command.build_data = build_data |
690 | 690 |
691 self._write("userscripts/reftest-text.html", "Dummy test contents") | 691 self._write("userscripts/reftest-text.html", "Dummy test contents") |
692 self._write("userscripts/reftest-text-expected.html", "Dummy test conten
ts") | 692 self._write("userscripts/reftest-text-expected.html", "Dummy test conten
ts") |
693 self._write("userscripts/reftest-text-expected.html", "Dummy test conten
ts") | 693 self._write("userscripts/reftest-text-expected.html", "Dummy test conten
ts") |
694 self.command._tests_to_rebaseline = lambda port: { | 694 self.command._tests_to_rebaseline = lambda port: { |
695 'userscripts/reftest-text.html': set(['txt']), | 695 'userscripts/reftest-text.html': set(['txt']), |
696 'userscripts/reftest-image.html': set(['png']), | 696 'userscripts/reftest-image.html': set(['png']), |
697 'userscripts/reftest-image-text.html': set(['png', 'txt']), | 697 'userscripts/reftest-image-text.html': set(['png', 'txt']), |
698 } | 698 } |
699 | 699 |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
744 | 744 |
745 def test_rebaseline_without_other_expectations(self): | 745 def test_rebaseline_without_other_expectations(self): |
746 self._write("userscripts/another-test.html", "Dummy test contents") | 746 self._write("userscripts/another-test.html", "Dummy test contents") |
747 self._write(self.mac_expectations_path, "Bug(x) userscripts/another-test
.html [ Rebaseline ]\n") | 747 self._write(self.mac_expectations_path, "Bug(x) userscripts/another-test
.html [ Rebaseline ]\n") |
748 self.assertDictEqual(self.command._tests_to_rebaseline(self.mac_port), | 748 self.assertDictEqual(self.command._tests_to_rebaseline(self.mac_port), |
749 {'userscripts/another-test.html': ('png', 'wav', 't
xt')}) | 749 {'userscripts/another-test.html': ('png', 'wav', 't
xt')}) |
750 | 750 |
751 def test_rebaseline_test_passes_everywhere(self): | 751 def test_rebaseline_test_passes_everywhere(self): |
752 test_port = self.tool.port_factory.get('test') | 752 test_port = self.tool.port_factory.get('test') |
753 | 753 |
754 def builder_data(): | 754 def build_data(): |
755 self._builder_data['MOCK Mac10.10'] = self._builder_data['MOCK Mac10
.11'] = LayoutTestResults({ | 755 self._build_data[Build('MOCK Mac10.10')] = self._build_data[Build('M
OCK Mac10.11')] = LayoutTestResults({ |
756 "tests": { | 756 "tests": { |
757 "fast": { | 757 "fast": { |
758 "dom": { | 758 "dom": { |
759 "prototype-taco.html": { | 759 "prototype-taco.html": { |
760 "expected": "FAIL", | 760 "expected": "FAIL", |
761 "actual": "PASS", | 761 "actual": "PASS", |
762 "is_unexpected": True | 762 "is_unexpected": True |
763 } | 763 } |
764 } | 764 } |
765 } | 765 } |
766 } | 766 } |
767 }) | 767 }) |
768 return self._builder_data | 768 return self._build_data |
769 | 769 |
770 self.command.builder_data = builder_data | 770 self.command.build_data = build_data |
771 | 771 |
772 self.tool.filesystem.write_text_file(test_port.path_to_generic_test_expe
ctations_file(), """ | 772 self.tool.filesystem.write_text_file(test_port.path_to_generic_test_expe
ctations_file(), """ |
773 Bug(foo) fast/dom/prototype-taco.html [ Rebaseline ] | 773 Bug(foo) fast/dom/prototype-taco.html [ Rebaseline ] |
774 """) | 774 """) |
775 | 775 |
776 self._write_test_file(test_port, 'fast/dom/prototype-taco.html', "Dummy
test contents") | 776 self._write_test_file(test_port, 'fast/dom/prototype-taco.html', "Dummy
test contents") |
777 | 777 |
778 self.tool.executive = MockLineRemovingExecutive() | 778 self.tool.executive = MockLineRemovingExecutive() |
779 | 779 |
780 self.tool.builders = BuilderList({ | 780 self.tool.builders = BuilderList({ |
781 "MOCK Mac10.10": {"port_name": "test-mac-mac10.10", "specifiers": ["
Mac10.10", "Release"]}, | 781 "MOCK Mac10.10": {"port_name": "test-mac-mac10.10", "specifiers": ["
Mac10.10", "Release"]}, |
782 "MOCK Mac10.11": {"port_name": "test-mac-mac10.11", "specifiers": ["
Mac10.11", "Release"]}, | 782 "MOCK Mac10.11": {"port_name": "test-mac-mac10.11", "specifiers": ["
Mac10.11", "Release"]}, |
783 }) | 783 }) |
784 | 784 |
785 self.command.execute(self.options, [], self.tool) | 785 self.command.execute(self.options, [], self.tool) |
786 self.assertEqual(self.tool.executive.calls, []) | 786 self.assertEqual(self.tool.executive.calls, []) |
787 | 787 |
788 # The mac ports should both be removed since they're the only ones in th
e builder list. | 788 # The mac ports should both be removed since they're the only ones in th
e builder list. |
789 self.assertEqual(self.tool.filesystem.read_text_file(test_port.path_to_g
eneric_test_expectations_file()), """ | 789 self.assertEqual(self.tool.filesystem.read_text_file(test_port.path_to_g
eneric_test_expectations_file()), """ |
790 Bug(foo) [ Linux Win ] fast/dom/prototype-taco.html [ Rebaseline ] | 790 Bug(foo) [ Linux Win ] fast/dom/prototype-taco.html [ Rebaseline ] |
791 """) | 791 """) |
792 | 792 |
793 def test_rebaseline_missing(self): | 793 def test_rebaseline_missing(self): |
794 def builder_data(): | 794 def build_data(): |
795 self._builder_data['MOCK Mac10.10'] = LayoutTestResults({ | 795 self._build_data[Build('MOCK Mac10.10')] = LayoutTestResults({ |
796 "tests": { | 796 "tests": { |
797 "fast": { | 797 "fast": { |
798 "dom": { | 798 "dom": { |
799 "missing-text.html": { | 799 "missing-text.html": { |
800 "expected": "PASS", | 800 "expected": "PASS", |
801 "actual": "MISSING", | 801 "actual": "MISSING", |
802 "is_unexpected": True, | 802 "is_unexpected": True, |
803 "is_missing_text": True | 803 "is_missing_text": True |
804 }, | 804 }, |
805 "missing-text-and-image.html": { | 805 "missing-text-and-image.html": { |
806 "expected": "PASS", | 806 "expected": "PASS", |
807 "actual": "MISSING", | 807 "actual": "MISSING", |
808 "is_unexpected": True, | 808 "is_unexpected": True, |
809 "is_missing_text": True, | 809 "is_missing_text": True, |
810 "is_missing_image": True | 810 "is_missing_image": True |
811 }, | 811 }, |
812 "missing-image.html": { | 812 "missing-image.html": { |
813 "expected": "PASS", | 813 "expected": "PASS", |
814 "actual": "MISSING", | 814 "actual": "MISSING", |
815 "is_unexpected": True, | 815 "is_unexpected": True, |
816 "is_missing_image": True | 816 "is_missing_image": True |
817 } | 817 } |
818 } | 818 } |
819 } | 819 } |
820 } | 820 } |
821 }) | 821 }) |
822 return self._builder_data | 822 return self._build_data |
823 | 823 |
824 self.command.builder_data = builder_data | 824 self.command.build_data = build_data |
825 | 825 |
826 self._write('fast/dom/missing-text.html', "Dummy test contents") | 826 self._write('fast/dom/missing-text.html', "Dummy test contents") |
827 self._write('fast/dom/missing-text-and-image.html', "Dummy test contents
") | 827 self._write('fast/dom/missing-text-and-image.html', "Dummy test contents
") |
828 self._write('fast/dom/missing-image.html', "Dummy test contents") | 828 self._write('fast/dom/missing-image.html', "Dummy test contents") |
829 | 829 |
830 self.command._tests_to_rebaseline = lambda port: { | 830 self.command._tests_to_rebaseline = lambda port: { |
831 'fast/dom/missing-text.html': set(['txt', 'png']), | 831 'fast/dom/missing-text.html': set(['txt', 'png']), |
832 'fast/dom/missing-text-and-image.html': set(['txt', 'png']), | 832 'fast/dom/missing-text-and-image.html': set(['txt', 'png']), |
833 'fast/dom/missing-image.html': set(['txt', 'png']), | 833 'fast/dom/missing-image.html': set(['txt', 'png']), |
834 } | 834 } |
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1049 6469e754a1 path/to/TestExpectations (<foobarbaz1@chromium.org>
2013-04-28 04:52:41 +0000 13) Bug(foo) fast/dom/prototype-taco.html [ NeedsRe
baseline ] | 1049 6469e754a1 path/to/TestExpectations (<foobarbaz1@chromium.org>
2013-04-28 04:52:41 +0000 13) Bug(foo) fast/dom/prototype-taco.html [ NeedsRe
baseline ] |
1050 6469e754a1 path/to/TestExpectations (<foobarbaz1@chromium.org>
2013-06-14 20:18:46 +0000 11) crbug.com/24182 [ Mac10.11 ] fast/dom/prototype
-strawberry.html [ NeedsRebaseline ] | 1050 6469e754a1 path/to/TestExpectations (<foobarbaz1@chromium.org>
2013-06-14 20:18:46 +0000 11) crbug.com/24182 [ Mac10.11 ] fast/dom/prototype
-strawberry.html [ NeedsRebaseline ] |
1051 6469e754a1 path/to/TestExpectations (<foobarbaz1@chromium.org>
2013-04-28 04:52:41 +0000 12) crbug.com/24182 fast/dom/prototype-chocolate.ht
ml [ NeedsRebaseline ] | 1051 6469e754a1 path/to/TestExpectations (<foobarbaz1@chromium.org>
2013-04-28 04:52:41 +0000 12) crbug.com/24182 fast/dom/prototype-chocolate.ht
ml [ NeedsRebaseline ] |
1052 624caaaaaa path/to/TestExpectations (<foo@chromium.org>
2013-04-28 04:52:41 +0000 12) crbug.com/24182 path/to/not-cycled-through-bots
.html [ NeedsRebaseline ] | 1052 624caaaaaa path/to/TestExpectations (<foo@chromium.org>
2013-04-28 04:52:41 +0000 12) crbug.com/24182 path/to/not-cycled-through-bots
.html [ NeedsRebaseline ] |
1053 0000000000 path/to/TestExpectations (<foo@chromium.org>
2013-04-28 04:52:41 +0000 12) crbug.com/24182 path/to/locally-changed-lined.h
tml [ NeedsRebaseline ] | 1053 0000000000 path/to/TestExpectations (<foo@chromium.org>
2013-04-28 04:52:41 +0000 12) crbug.com/24182 path/to/locally-changed-lined.h
tml [ NeedsRebaseline ] |
1054 """ | 1054 """ |
1055 self.tool.scm().blame = blame | 1055 self.tool.scm().blame = blame |
1056 | 1056 |
1057 test_port = self.tool.port_factory.get('test') | 1057 test_port = self.tool.port_factory.get('test') |
1058 | 1058 |
1059 def builder_data(): | 1059 def build_data(): |
1060 # Have prototype-chocolate only fail on "MOCK Mac10.11". | 1060 # Have prototype-chocolate only fail on "MOCK Mac10.11". |
1061 self._builder_data['MOCK Mac10.11'] = LayoutTestResults({ | 1061 self._build_data[Build('MOCK Mac10.11')] = LayoutTestResults({ |
1062 "tests": { | 1062 "tests": { |
1063 "fast": { | 1063 "fast": { |
1064 "dom": { | 1064 "dom": { |
1065 "prototype-taco.html": { | 1065 "prototype-taco.html": { |
1066 "expected": "PASS", | 1066 "expected": "PASS", |
1067 "actual": "PASS TEXT", | 1067 "actual": "PASS TEXT", |
1068 "is_unexpected": True | 1068 "is_unexpected": True |
1069 }, | 1069 }, |
1070 "prototype-chocolate.html": { | 1070 "prototype-chocolate.html": { |
1071 "expected": "FAIL", | 1071 "expected": "FAIL", |
1072 "actual": "PASS" | 1072 "actual": "PASS" |
1073 }, | 1073 }, |
1074 "prototype-strawberry.html": { | 1074 "prototype-strawberry.html": { |
1075 "expected": "PASS", | 1075 "expected": "PASS", |
1076 "actual": "IMAGE PASS", | 1076 "actual": "IMAGE PASS", |
1077 "is_unexpected": True | 1077 "is_unexpected": True |
1078 } | 1078 } |
1079 } | 1079 } |
1080 } | 1080 } |
1081 } | 1081 } |
1082 }) | 1082 }) |
1083 return self._builder_data | 1083 return self._build_data |
1084 | 1084 |
1085 self.command.builder_data = builder_data | 1085 self.command.build_data = build_data |
1086 | 1086 |
1087 self.tool.filesystem.write_text_file(test_port.path_to_generic_test_expe
ctations_file(), """ | 1087 self.tool.filesystem.write_text_file(test_port.path_to_generic_test_expe
ctations_file(), """ |
1088 crbug.com/24182 [ Debug ] path/to/norebaseline.html [ Rebaseline ] | 1088 crbug.com/24182 [ Debug ] path/to/norebaseline.html [ Rebaseline ] |
1089 Bug(foo) fast/dom/prototype-taco.html [ NeedsRebaseline ] | 1089 Bug(foo) fast/dom/prototype-taco.html [ NeedsRebaseline ] |
1090 crbug.com/24182 [ Mac10.11 ] fast/dom/prototype-strawberry.html [ NeedsRebaselin
e ] | 1090 crbug.com/24182 [ Mac10.11 ] fast/dom/prototype-strawberry.html [ NeedsRebaselin
e ] |
1091 crbug.com/24182 fast/dom/prototype-chocolate.html [ NeedsRebaseline ] | 1091 crbug.com/24182 fast/dom/prototype-chocolate.html [ NeedsRebaseline ] |
1092 crbug.com/24182 path/to/not-cycled-through-bots.html [ NeedsRebaseline ] | 1092 crbug.com/24182 path/to/not-cycled-through-bots.html [ NeedsRebaseline ] |
1093 crbug.com/24182 path/to/locally-changed-lined.html [ NeedsRebaseline ] | 1093 crbug.com/24182 path/to/locally-changed-lined.html [ NeedsRebaseline ] |
1094 """) | 1094 """) |
1095 | 1095 |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1148 | 1148 |
1149 def test_execute_git_cl_hangs(self): | 1149 def test_execute_git_cl_hangs(self): |
1150 def blame(_): | 1150 def blame(_): |
1151 return """ | 1151 return """ |
1152 6469e754a1 path/to/TestExpectations (<foobarbaz1@chromium.org>
2013-04-28 04:52:41 +0000 13) Bug(foo) fast/dom/prototype-taco.html [ NeedsRe
baseline ] | 1152 6469e754a1 path/to/TestExpectations (<foobarbaz1@chromium.org>
2013-04-28 04:52:41 +0000 13) Bug(foo) fast/dom/prototype-taco.html [ NeedsRe
baseline ] |
1153 """ | 1153 """ |
1154 self.tool.scm().blame = blame | 1154 self.tool.scm().blame = blame |
1155 | 1155 |
1156 test_port = self.tool.port_factory.get('test') | 1156 test_port = self.tool.port_factory.get('test') |
1157 | 1157 |
1158 original_builder_data = self.command.builder_data | 1158 original_build_data = self.command.build_data |
1159 def builder_data(): | 1159 |
1160 original_builder_data() | 1160 def build_data(): |
| 1161 original_build_data() |
1161 # Have prototype-chocolate only fail on "MOCK Mac10.11". | 1162 # Have prototype-chocolate only fail on "MOCK Mac10.11". |
1162 self._builder_data['MOCK Mac10.11'] = LayoutTestResults({ | 1163 self._build_data[Build('MOCK Mac10.11')] = LayoutTestResults({ |
1163 "tests": { | 1164 "tests": { |
1164 "fast": { | 1165 "fast": { |
1165 "dom": { | 1166 "dom": { |
1166 "prototype-taco.html": { | 1167 "prototype-taco.html": { |
1167 "expected": "PASS", | 1168 "expected": "PASS", |
1168 "actual": "PASS TEXT", | 1169 "actual": "PASS TEXT", |
1169 "is_unexpected": True | 1170 "is_unexpected": True |
1170 } | 1171 } |
1171 } | 1172 } |
1172 } | 1173 } |
1173 } | 1174 } |
1174 }) | 1175 }) |
1175 return self._builder_data | 1176 return self._build_data |
1176 | 1177 |
1177 self.command.builder_data = builder_data | 1178 self.command.build_data = build_data |
1178 | 1179 |
1179 self.tool.filesystem.write_text_file(test_port.path_to_generic_test_expe
ctations_file(), """ | 1180 self.tool.filesystem.write_text_file(test_port.path_to_generic_test_expe
ctations_file(), """ |
1180 Bug(foo) fast/dom/prototype-taco.html [ NeedsRebaseline ] | 1181 Bug(foo) fast/dom/prototype-taco.html [ NeedsRebaseline ] |
1181 """) | 1182 """) |
1182 | 1183 |
1183 self._write_test_file(test_port, 'fast/dom/prototype-taco.html', "Dummy
test contents") | 1184 self._write_test_file(test_port, 'fast/dom/prototype-taco.html', "Dummy
test contents") |
1184 | 1185 |
1185 self.tool.builders = BuilderList({ | 1186 self.tool.builders = BuilderList({ |
1186 "MOCK Mac10.11": {"port_name": "test-mac-mac10.11", "specifiers": ["
Mac10.11", "Release"]}, | 1187 "MOCK Mac10.11": {"port_name": "test-mac-mac10.11", "specifiers": ["
Mac10.11", "Release"]}, |
1187 }) | 1188 }) |
(...skipping 19 matching lines...) Expand all Loading... |
1207 | 1208 |
1208 def test_execute_test_passes_everywhere(self): | 1209 def test_execute_test_passes_everywhere(self): |
1209 def blame(_): | 1210 def blame(_): |
1210 return """ | 1211 return """ |
1211 6469e754a1 path/to/TestExpectations (<foobarbaz1@chromium.org>
2013-04-28 04:52:41 +0000 13) Bug(foo) fast/dom/prototype-taco.html [ NeedsRe
baseline ] | 1212 6469e754a1 path/to/TestExpectations (<foobarbaz1@chromium.org>
2013-04-28 04:52:41 +0000 13) Bug(foo) fast/dom/prototype-taco.html [ NeedsRe
baseline ] |
1212 """ | 1213 """ |
1213 self.tool.scm().blame = blame | 1214 self.tool.scm().blame = blame |
1214 | 1215 |
1215 test_port = self.tool.port_factory.get('test') | 1216 test_port = self.tool.port_factory.get('test') |
1216 | 1217 |
1217 def builder_data(): | 1218 def build_data(): |
1218 self._builder_data['MOCK Mac10.10'] = self._builder_data['MOCK Mac10
.11'] = LayoutTestResults({ | 1219 self._build_data[Build('MOCK Mac10.10')] = self._build_data[Build('M
OCK Mac10.11')] = LayoutTestResults({ |
1219 "tests": { | 1220 "tests": { |
1220 "fast": { | 1221 "fast": { |
1221 "dom": { | 1222 "dom": { |
1222 "prototype-taco.html": { | 1223 "prototype-taco.html": { |
1223 "expected": "FAIL", | 1224 "expected": "FAIL", |
1224 "actual": "PASS", | 1225 "actual": "PASS", |
1225 "is_unexpected": True | 1226 "is_unexpected": True |
1226 } | 1227 } |
1227 } | 1228 } |
1228 } | 1229 } |
1229 } | 1230 } |
1230 }) | 1231 }) |
1231 return self._builder_data | 1232 return self._build_data |
1232 | 1233 |
1233 self.command.builder_data = builder_data | 1234 self.command.build_data = build_data |
1234 | 1235 |
1235 self.tool.filesystem.write_text_file(test_port.path_to_generic_test_expe
ctations_file(), """ | 1236 self.tool.filesystem.write_text_file(test_port.path_to_generic_test_expe
ctations_file(), """ |
1236 Bug(foo) fast/dom/prototype-taco.html [ NeedsRebaseline ] | 1237 Bug(foo) fast/dom/prototype-taco.html [ NeedsRebaseline ] |
1237 """) | 1238 """) |
1238 | 1239 |
1239 self._write_test_file(test_port, 'fast/dom/prototype-taco.html', "Dummy
test contents") | 1240 self._write_test_file(test_port, 'fast/dom/prototype-taco.html', "Dummy
test contents") |
1240 | 1241 |
1241 self.tool.executive = MockLineRemovingExecutive() | 1242 self.tool.executive = MockLineRemovingExecutive() |
1242 | 1243 |
1243 self.tool.builders = BuilderList({ | 1244 self.tool.builders = BuilderList({ |
(...skipping 17 matching lines...) Expand all Loading... |
1261 | 1262 |
1262 def test_execute_use_alternate_rebaseline_branch(self): | 1263 def test_execute_use_alternate_rebaseline_branch(self): |
1263 def blame(_): | 1264 def blame(_): |
1264 return """ | 1265 return """ |
1265 6469e754a1 path/to/TestExpectations (<foobarbaz1@chromium.org>
2013-04-28 04:52:41 +0000 13) Bug(foo) fast/dom/prototype-taco.html [ NeedsRe
baseline ] | 1266 6469e754a1 path/to/TestExpectations (<foobarbaz1@chromium.org>
2013-04-28 04:52:41 +0000 13) Bug(foo) fast/dom/prototype-taco.html [ NeedsRe
baseline ] |
1266 """ | 1267 """ |
1267 self.tool.scm().blame = blame | 1268 self.tool.scm().blame = blame |
1268 | 1269 |
1269 test_port = self.tool.port_factory.get('test') | 1270 test_port = self.tool.port_factory.get('test') |
1270 | 1271 |
1271 def builder_data(): | 1272 def build_data(): |
1272 self._builder_data['MOCK Win'] = LayoutTestResults({ | 1273 self._build_data[Build('MOCK Win')] = LayoutTestResults({ |
1273 "tests": { | 1274 "tests": { |
1274 "fast": { | 1275 "fast": { |
1275 "dom": { | 1276 "dom": { |
1276 "prototype-taco.html": { | 1277 "prototype-taco.html": { |
1277 "expected": "FAIL", | 1278 "expected": "FAIL", |
1278 "actual": "PASS", | 1279 "actual": "PASS", |
1279 "is_unexpected": True | 1280 "is_unexpected": True |
1280 } | 1281 } |
1281 } | 1282 } |
1282 } | 1283 } |
1283 } | 1284 } |
1284 }) | 1285 }) |
1285 return self._builder_data | 1286 return self._build_data |
1286 | 1287 |
1287 self.command.builder_data = builder_data | 1288 self.command.build_data = build_data |
1288 | 1289 |
1289 self.tool.filesystem.write_text_file(test_port.path_to_generic_test_expe
ctations_file(), """ | 1290 self.tool.filesystem.write_text_file(test_port.path_to_generic_test_expe
ctations_file(), """ |
1290 Bug(foo) fast/dom/prototype-taco.html [ NeedsRebaseline ] | 1291 Bug(foo) fast/dom/prototype-taco.html [ NeedsRebaseline ] |
1291 """) | 1292 """) |
1292 | 1293 |
1293 self._write_test_file(test_port, 'fast/dom/prototype-taco.html', "Dummy
test contents") | 1294 self._write_test_file(test_port, 'fast/dom/prototype-taco.html', "Dummy
test contents") |
1294 | 1295 |
1295 self.tool.executive = MockLineRemovingExecutive() | 1296 self.tool.executive = MockLineRemovingExecutive() |
1296 | 1297 |
1297 self.tool.builders = BuilderList({ | 1298 self.tool.builders = BuilderList({ |
(...skipping 19 matching lines...) Expand all Loading... |
1317 | 1318 |
1318 def test_execute_stuck_on_alternate_rebaseline_branch(self): | 1319 def test_execute_stuck_on_alternate_rebaseline_branch(self): |
1319 def blame(_): | 1320 def blame(_): |
1320 return """ | 1321 return """ |
1321 6469e754a1 path/to/TestExpectations (<foobarbaz1@chromium.org>
2013-04-28 04:52:41 +0000 13) Bug(foo) fast/dom/prototype-taco.html [ NeedsRe
baseline ] | 1322 6469e754a1 path/to/TestExpectations (<foobarbaz1@chromium.org>
2013-04-28 04:52:41 +0000 13) Bug(foo) fast/dom/prototype-taco.html [ NeedsRe
baseline ] |
1322 """ | 1323 """ |
1323 self.tool.scm().blame = blame | 1324 self.tool.scm().blame = blame |
1324 | 1325 |
1325 test_port = self.tool.port_factory.get('test') | 1326 test_port = self.tool.port_factory.get('test') |
1326 | 1327 |
1327 def builder_data(): | 1328 def build_data(): |
1328 self._builder_data['MOCK Win'] = LayoutTestResults({ | 1329 self._build_data[Build('MOCK Win')] = LayoutTestResults({ |
1329 "tests": { | 1330 "tests": { |
1330 "fast": { | 1331 "fast": { |
1331 "dom": { | 1332 "dom": { |
1332 "prototype-taco.html": { | 1333 "prototype-taco.html": { |
1333 "expected": "FAIL", | 1334 "expected": "FAIL", |
1334 "actual": "PASS", | 1335 "actual": "PASS", |
1335 "is_unexpected": True | 1336 "is_unexpected": True |
1336 } | 1337 } |
1337 } | 1338 } |
1338 } | 1339 } |
1339 } | 1340 } |
1340 }) | 1341 }) |
1341 return self._builder_data | 1342 return self._build_data |
1342 | 1343 |
1343 self.command.builder_data = builder_data | 1344 self.command.build_data = build_data |
1344 | 1345 |
1345 self.tool.filesystem.write_text_file(test_port.path_to_generic_test_expe
ctations_file(), """ | 1346 self.tool.filesystem.write_text_file(test_port.path_to_generic_test_expe
ctations_file(), """ |
1346 Bug(foo) fast/dom/prototype-taco.html [ NeedsRebaseline ] | 1347 Bug(foo) fast/dom/prototype-taco.html [ NeedsRebaseline ] |
1347 """) | 1348 """) |
1348 | 1349 |
1349 self._write_test_file(test_port, 'fast/dom/prototype-taco.html', "Dummy
test contents") | 1350 self._write_test_file(test_port, 'fast/dom/prototype-taco.html', "Dummy
test contents") |
1350 | 1351 |
1351 self.tool.executive = MockLineRemovingExecutive() | 1352 self.tool.executive = MockLineRemovingExecutive() |
1352 | 1353 |
1353 self.tool.builders = BuilderList({ | 1354 self.tool.builders = BuilderList({ |
(...skipping 20 matching lines...) Expand all Loading... |
1374 | 1375 |
1375 def _basic_execute_test(self, expected_executive_calls, auth_refresh_token_j
son=None, commit_author=None, dry_run=False): | 1376 def _basic_execute_test(self, expected_executive_calls, auth_refresh_token_j
son=None, commit_author=None, dry_run=False): |
1376 def blame(_): | 1377 def blame(_): |
1377 return """ | 1378 return """ |
1378 6469e754a1 path/to/TestExpectations (<foobarbaz1@chromium.org>
2013-04-28 04:52:41 +0000 13) Bug(foo) fast/dom/prototype-taco.html [ NeedsRe
baseline ] | 1379 6469e754a1 path/to/TestExpectations (<foobarbaz1@chromium.org>
2013-04-28 04:52:41 +0000 13) Bug(foo) fast/dom/prototype-taco.html [ NeedsRe
baseline ] |
1379 """ | 1380 """ |
1380 self.tool.scm().blame = blame | 1381 self.tool.scm().blame = blame |
1381 | 1382 |
1382 test_port = self.tool.port_factory.get('test') | 1383 test_port = self.tool.port_factory.get('test') |
1383 | 1384 |
1384 def builder_data(): | 1385 def build_data(): |
1385 self._builder_data['MOCK Mac10.10'] = self._builder_data['MOCK Mac10
.11'] = LayoutTestResults({ | 1386 self._build_data[Build('MOCK Mac10.10')] = self._build_data[Build('M
OCK Mac10.11')] = LayoutTestResults({ |
1386 "tests": { | 1387 "tests": { |
1387 "fast": { | 1388 "fast": { |
1388 "dom": { | 1389 "dom": { |
1389 "prototype-taco.html": { | 1390 "prototype-taco.html": { |
1390 "expected": "FAIL", | 1391 "expected": "FAIL", |
1391 "actual": "PASS", | 1392 "actual": "PASS", |
1392 "is_unexpected": True | 1393 "is_unexpected": True |
1393 } | 1394 } |
1394 } | 1395 } |
1395 } | 1396 } |
1396 } | 1397 } |
1397 }) | 1398 }) |
1398 return self._builder_data | 1399 return self._build_data |
1399 | 1400 |
1400 self.command.builder_data = builder_data | 1401 self.command.build_data = build_data |
1401 | 1402 |
1402 self.tool.filesystem.write_text_file(test_port.path_to_generic_test_expe
ctations_file(), """ | 1403 self.tool.filesystem.write_text_file(test_port.path_to_generic_test_expe
ctations_file(), """ |
1403 Bug(foo) fast/dom/prototype-taco.html [ NeedsRebaseline ] | 1404 Bug(foo) fast/dom/prototype-taco.html [ NeedsRebaseline ] |
1404 """) | 1405 """) |
1405 | 1406 |
1406 self._write_test_file(test_port, 'fast/dom/prototype-taco.html', "Dummy
test contents") | 1407 self._write_test_file(test_port, 'fast/dom/prototype-taco.html', "Dummy
test contents") |
1407 | 1408 |
1408 self.tool.executive = MockLineRemovingExecutive() | 1409 self.tool.executive = MockLineRemovingExecutive() |
1409 | 1410 |
1410 self.tool.builders = BuilderList({ | 1411 self.tool.builders = BuilderList({ |
(...skipping 18 matching lines...) Expand all Loading... |
1429 ['git', 'cl', 'upload', '-f', '--auth-refresh-token-json', RIETV
ELD_REFRESH_TOKEN], | 1430 ['git', 'cl', 'upload', '-f', '--auth-refresh-token-json', RIETV
ELD_REFRESH_TOKEN], |
1430 ['git', 'pull'], | 1431 ['git', 'pull'], |
1431 ['git', 'cl', 'land', '-f', '-v', '--auth-refresh-token-json', R
IETVELD_REFRESH_TOKEN], | 1432 ['git', 'cl', 'land', '-f', '-v', '--auth-refresh-token-json', R
IETVELD_REFRESH_TOKEN], |
1432 ['git', 'config', 'branch.auto-rebaseline-temporary-branch.rietv
eldissue'], | 1433 ['git', 'config', 'branch.auto-rebaseline-temporary-branch.rietv
eldissue'], |
1433 ], | 1434 ], |
1434 auth_refresh_token_json=RIETVELD_REFRESH_TOKEN) | 1435 auth_refresh_token_json=RIETVELD_REFRESH_TOKEN) |
1435 | 1436 |
1436 def test_execute_with_dry_run(self): | 1437 def test_execute_with_dry_run(self): |
1437 self._basic_execute_test([], dry_run=True) | 1438 self._basic_execute_test([], dry_run=True) |
1438 self.assertEqual(self.tool.scm().local_commits(), []) | 1439 self.assertEqual(self.tool.scm().local_commits(), []) |
OLD | NEW |