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

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

Issue 2765863003: Refactoring: Replace test_prefix_list variables with TestBaselineSet objects. (Closed)
Patch Set: fix typo, return set from _builders_to_fetch_from Created 3 years, 9 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
« no previous file with comments | « third_party/WebKit/Tools/Scripts/webkitpy/tool/commands/rebaseline_cl_unittest.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 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 optparse 5 import optparse
6 import unittest 6 import unittest
7 7
8 from webkitpy.common.net.buildbot import Build 8 from webkitpy.common.net.buildbot import Build
9 from webkitpy.common.net.layout_test_results import LayoutTestResults 9 from webkitpy.common.net.layout_test_results import LayoutTestResults
10 from webkitpy.common.system.executive_mock import MockExecutive 10 from webkitpy.common.system.executive_mock import MockExecutive
11 from webkitpy.common.system.output_capture import OutputCapture 11 from webkitpy.common.system.output_capture import OutputCapture
12 from webkitpy.layout_tests.builder_list import BuilderList 12 from webkitpy.layout_tests.builder_list import BuilderList
13 from webkitpy.layout_tests.port.factory_mock import MockPortFactory
13 from webkitpy.tool.commands.rebaseline import ( 14 from webkitpy.tool.commands.rebaseline import (
14 AbstractParallelRebaselineCommand, CopyExistingBaselinesInternal, 15 AbstractParallelRebaselineCommand, CopyExistingBaselinesInternal,
15 Rebaseline, RebaselineExpectations, RebaselineJson, RebaselineTest 16 Rebaseline, RebaselineExpectations, RebaselineJson, RebaselineTest,
17 TestBaselineSet
16 ) 18 )
17 from webkitpy.tool.mock_tool import MockWebKitPatch 19 from webkitpy.tool.mock_tool import MockWebKitPatch
18 20
19 21
20 # pylint: disable=protected-access 22 # pylint: disable=protected-access
21 class BaseTestCase(unittest.TestCase): 23 class BaseTestCase(unittest.TestCase):
24
22 WEB_PREFIX = 'https://storage.googleapis.com/chromium-layout-test-archives/M OCK_Mac10_11/results/layout-test-results' 25 WEB_PREFIX = 'https://storage.googleapis.com/chromium-layout-test-archives/M OCK_Mac10_11/results/layout-test-results'
23 26
24 command_constructor = None 27 command_constructor = lambda: None
25 28
26 def setUp(self): 29 def setUp(self):
27 self.tool = MockWebKitPatch() 30 self.tool = MockWebKitPatch()
28 # Lint warns that command_constructor might not be set, but this is inte ntional; pylint: disable=not-callable 31 self.command = None
29 self.command = self.command_constructor() 32 self.command = self.command_constructor()
30 self.command._tool = self.tool 33 self.command._tool = self.tool
31 self.tool.builders = BuilderList({ 34 self.tool.builders = BuilderList({
32 'MOCK Mac10.10 (dbg)': {'port_name': 'test-mac-mac10.10', 'specifier s': ['Mac10.10', 'Debug']}, 35 'MOCK Mac10.10 (dbg)': {'port_name': 'test-mac-mac10.10', 'specifier s': ['Mac10.10', 'Debug']},
33 'MOCK Mac10.10': {'port_name': 'test-mac-mac10.10', 'specifiers': [' Mac10.10', 'Release']}, 36 'MOCK Mac10.10': {'port_name': 'test-mac-mac10.10', 'specifiers': [' Mac10.10', 'Release']},
34 'MOCK Mac10.11 (dbg)': {'port_name': 'test-mac-mac10.11', 'specifier s': ['Mac10.11', 'Debug']}, 37 'MOCK Mac10.11 (dbg)': {'port_name': 'test-mac-mac10.11', 'specifier s': ['Mac10.11', 'Debug']},
35 'MOCK Mac10.11 ASAN': {'port_name': 'test-mac-mac10.11', 'specifiers ': ['Mac10.11', 'Release']}, 38 'MOCK Mac10.11 ASAN': {'port_name': 'test-mac-mac10.11', 'specifiers ': ['Mac10.11', 'Release']},
36 'MOCK Mac10.11': {'port_name': 'test-mac-mac10.11', 'specifiers': [' Mac10.11', 'Release']}, 39 'MOCK Mac10.11': {'port_name': 'test-mac-mac10.11', 'specifiers': [' Mac10.11', 'Release']},
37 'MOCK Precise': {'port_name': 'test-linux-precise', 'specifiers': [' Precise', 'Release']}, 40 'MOCK Precise': {'port_name': 'test-linux-precise', 'specifiers': [' Precise', 'Release']},
38 'MOCK Trusty': {'port_name': 'test-linux-trusty', 'specifiers': ['Tr usty', 'Release']}, 41 'MOCK Trusty': {'port_name': 'test-linux-trusty', 'specifiers': ['Tr usty', 'Release']},
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 self.assertMultiLineEqual( 321 self.assertMultiLineEqual(
319 out, '{"remove-lines": [{"test": "failures/expected/image.html", "bu ilder": "MOCK Win10"}]}\n') 322 out, '{"remove-lines": [{"test": "failures/expected/image.html", "bu ilder": "MOCK Win10"}]}\n')
320 323
321 324
322 class TestAbstractParallelRebaselineCommand(BaseTestCase): 325 class TestAbstractParallelRebaselineCommand(BaseTestCase):
323 command_constructor = AbstractParallelRebaselineCommand 326 command_constructor = AbstractParallelRebaselineCommand
324 327
325 def test_builders_to_fetch_from(self): 328 def test_builders_to_fetch_from(self):
326 builders_to_fetch = self.command._builders_to_fetch_from( 329 builders_to_fetch = self.command._builders_to_fetch_from(
327 ['MOCK Win10', 'MOCK Win7 (dbg)(1)', 'MOCK Win7 (dbg)(2)', 'MOCK Win 7']) 330 ['MOCK Win10', 'MOCK Win7 (dbg)(1)', 'MOCK Win7 (dbg)(2)', 'MOCK Win 7'])
328 self.assertEqual(builders_to_fetch, ['MOCK Win7', 'MOCK Win10']) 331 self.assertEqual(builders_to_fetch, {'MOCK Win7', 'MOCK Win10'})
329 332
330 def test_all_baseline_paths(self): 333 def test_possible_baseline_paths(self):
331 test_prefix_list = { 334 test_baseline_set = TestBaselineSet(self.tool)
332 'passes/text.html': [ 335 test_baseline_set.add('passes/text.html', Build('MOCK Win7'))
333 Build('MOCK Win7'), 336 test_baseline_set.add('passes/text.html', Build('MOCK Win10'))
334 Build('MOCK Win10'), 337
335 ]
336 }
337 # pylint: disable=protected-access 338 # pylint: disable=protected-access
338 baseline_paths = self.command._all_baseline_paths(test_prefix_list) 339 baseline_paths = self.command._possible_baseline_paths(test_baseline_set )
339 self.assertEqual(baseline_paths, [ 340 self.assertEqual(baseline_paths, [
340 '/test.checkout/LayoutTests/passes/text-expected.png', 341 '/test.checkout/LayoutTests/passes/text-expected.png',
341 '/test.checkout/LayoutTests/passes/text-expected.txt', 342 '/test.checkout/LayoutTests/passes/text-expected.txt',
342 '/test.checkout/LayoutTests/passes/text-expected.wav', 343 '/test.checkout/LayoutTests/passes/text-expected.wav',
343 '/test.checkout/LayoutTests/platform/test-win-win10/passes/text-expe cted.png', 344 '/test.checkout/LayoutTests/platform/test-win-win10/passes/text-expe cted.png',
344 '/test.checkout/LayoutTests/platform/test-win-win10/passes/text-expe cted.txt', 345 '/test.checkout/LayoutTests/platform/test-win-win10/passes/text-expe cted.txt',
345 '/test.checkout/LayoutTests/platform/test-win-win10/passes/text-expe cted.wav', 346 '/test.checkout/LayoutTests/platform/test-win-win10/passes/text-expe cted.wav',
346 '/test.checkout/LayoutTests/platform/test-win-win7/passes/text-expec ted.png', 347 '/test.checkout/LayoutTests/platform/test-win-win7/passes/text-expec ted.png',
347 '/test.checkout/LayoutTests/platform/test-win-win7/passes/text-expec ted.txt', 348 '/test.checkout/LayoutTests/platform/test-win-win7/passes/text-expec ted.txt',
348 '/test.checkout/LayoutTests/platform/test-win-win7/passes/text-expec ted.wav', 349 '/test.checkout/LayoutTests/platform/test-win-win7/passes/text-expec ted.wav',
349 ]) 350 ])
350 351
351 def test_remove_all_pass_testharness_baselines(self): 352 def test_remove_all_pass_testharness_baselines(self):
352 self.tool.filesystem.write_text_file( 353 self.tool.filesystem.write_text_file(
353 '/test.checkout/LayoutTests/passes/text-expected.txt', 354 '/test.checkout/LayoutTests/passes/text-expected.txt',
354 ('This is a testharness.js-based test.\n' 355 ('This is a testharness.js-based test.\n'
355 'PASS: foo\n' 356 'PASS: foo\n'
356 'Harness: the test ran to completion.\n')) 357 'Harness: the test ran to completion.\n'))
357 test_prefix_list = { 358 test_baseline_set = TestBaselineSet(self.tool)
358 'passes/text.html': [ 359 test_baseline_set.add('passes/text.html', Build('MOCK Win7'))
359 Build('MOCK Win7'), 360 test_baseline_set.add('passes/text.html', Build('MOCK Win10'))
360 Build('MOCK Win10'), 361 self.command._remove_all_pass_testharness_baselines(test_baseline_set)
361 ]
362 }
363 self.command._remove_all_pass_testharness_baselines(test_prefix_list)
364 self.assertFalse(self.tool.filesystem.exists( 362 self.assertFalse(self.tool.filesystem.exists(
365 '/test.checkout/LayoutTests/passes/text-expected.txt')) 363 '/test.checkout/LayoutTests/passes/text-expected.txt'))
366 364
367 365
368 class TestRebaselineJson(BaseTestCase): 366 class TestRebaselineJson(BaseTestCase):
369 command_constructor = RebaselineJson 367 command_constructor = RebaselineJson
370 368
371 def setUp(self): 369 def setUp(self):
372 super(TestRebaselineJson, self).setUp() 370 super(TestRebaselineJson, self).setUp()
373 self.tool.executive = MockExecutive() 371 self.tool.executive = MockExecutive()
(...skipping 18 matching lines...) Expand all
392 'first-test.html': { 390 'first-test.html': {
393 'expected': 'NEEDSREBASELINE', 391 'expected': 'NEEDSREBASELINE',
394 'actual': 'PASS' 392 'actual': 'PASS'
395 } 393 }
396 } 394 }
397 } 395 }
398 })) 396 }))
399 397
400 self._write(self.mac_expectations_path, 'Bug(x) userscripts/first-test.h tml [ Failure ]\n') 398 self._write(self.mac_expectations_path, 'Bug(x) userscripts/first-test.h tml [ Failure ]\n')
401 self._write('userscripts/first-test.html', 'Dummy test contents') 399 self._write('userscripts/first-test.html', 'Dummy test contents')
402 self.command.rebaseline(self.options(), {'userscripts/first-test.html': {Build('MOCK Win7'): ['txt', 'png']}}) 400 test_baseline_set = TestBaselineSet(self.tool)
401 test_baseline_set.add('userscripts/first-test.html', Build('MOCK Win7'))
402 self.command.rebaseline(self.options(), test_baseline_set)
403 403
404 self.assertEqual(self.tool.executive.calls, []) 404 self.assertEqual(self.tool.executive.calls, [])
405 405
406 def test_rebaseline_all(self): 406 def test_rebaseline_all(self):
407 self._setup_mock_build_data() 407 self._setup_mock_build_data()
408 408
409 self._write('userscripts/first-test.html', 'Dummy test contents') 409 self._write('userscripts/first-test.html', 'Dummy test contents')
410 self.command.rebaseline(self.options(), {'userscripts/first-test.html': {Build('MOCK Win7'): ['txt', 'png']}}) 410 test_baseline_set = TestBaselineSet(self.tool)
411 test_baseline_set.add('userscripts/first-test.html', Build('MOCK Win7'))
412 self.command.rebaseline(self.options(), test_baseline_set)
411 413
412 # Note that we have one run_in_parallel() call followed by a run_command ()
413 self.assertEqual( 414 self.assertEqual(
414 self.tool.executive.calls, 415 self.tool.executive.calls,
415 [ 416 [
416 [['python', 'echo', 'copy-existing-baselines-internal', '--suffi xes', 'txt,png', 417 [['python', 'echo', 'copy-existing-baselines-internal', '--suffi xes', 'txt,png',
417 '--builder', 'MOCK Win7', '--test', 'userscripts/first-test.ht ml', '--verbose']], 418 '--builder', 'MOCK Win7', '--test', 'userscripts/first-test.ht ml', '--verbose']],
418 [['python', 'echo', 'rebaseline-test-internal', '--suffixes', 't xt,png', 419 [['python', 'echo', 'rebaseline-test-internal', '--suffixes', 't xt,png',
419 '--builder', 'MOCK Win7', '--test', 'userscripts/first-test.ht ml', '--verbose']], 420 '--builder', 'MOCK Win7', '--test', 'userscripts/first-test.ht ml', '--verbose']],
420 [['python', 'echo', 'optimize-baselines', '--suffixes', 'txt,png ', 421 [['python', 'echo', 'optimize-baselines', '--suffixes', 'txt,png ',
421 'userscripts/first-test.html', '--verbose']] 422 'userscripts/first-test.html', '--verbose']]
422 ]) 423 ])
423 424
424 def test_rebaseline_debug(self): 425 def test_rebaseline_debug(self):
425 self._setup_mock_build_data() 426 self._setup_mock_build_data()
427 self._write('userscripts/first-test.html', 'Dummy test contents')
428 test_baseline_set = TestBaselineSet(self.tool)
429 test_baseline_set.add('userscripts/first-test.html', Build('MOCK Win7 (d bg)'))
426 430
427 self._write('userscripts/first-test.html', 'Dummy test contents') 431 self.command.rebaseline(self.options(), test_baseline_set)
428 self.command.rebaseline(self.options(), {'userscripts/first-test.html': {Build('MOCK Win7 (dbg)'): ['txt', 'png']}})
429 432
430 # Note that we have one run_in_parallel() call followed by a run_command ()
431 self.assertEqual( 433 self.assertEqual(
432 self.tool.executive.calls, 434 self.tool.executive.calls,
433 [ 435 [
434 [['python', 'echo', 'copy-existing-baselines-internal', '--suffi xes', 'txt,png', 436 [['python', 'echo', 'copy-existing-baselines-internal', '--suffi xes', 'txt,png',
435 '--builder', 'MOCK Win7 (dbg)', '--test', 'userscripts/first-t est.html', '--verbose']], 437 '--builder', 'MOCK Win7 (dbg)', '--test', 'userscripts/first-t est.html', '--verbose']],
436 [['python', 'echo', 'rebaseline-test-internal', '--suffixes', 't xt,png', '--builder', 438 [['python', 'echo', 'rebaseline-test-internal', '--suffixes', 't xt,png', '--builder',
437 'MOCK Win7 (dbg)', '--test', 'userscripts/first-test.html', '- -verbose']], 439 'MOCK Win7 (dbg)', '--test', 'userscripts/first-test.html', '- -verbose']],
438 [['python', 'echo', 'optimize-baselines', '--suffixes', 'txt,png ', 440 [['python', 'echo', 'optimize-baselines', '--suffixes', 'txt,png ',
439 'userscripts/first-test.html', '--verbose']] 441 'userscripts/first-test.html', '--verbose']]
440 ]) 442 ])
441 443
442 def test_no_optimize(self): 444 def test_no_optimize(self):
443 self._setup_mock_build_data() 445 self._setup_mock_build_data()
444 self._write('userscripts/first-test.html', 'Dummy test contents') 446 self._write('userscripts/first-test.html', 'Dummy test contents')
445 self.command.rebaseline( 447 test_baseline_set = TestBaselineSet(self.tool)
446 self.options(optimize=False), 448 test_baseline_set.add('userscripts/first-test.html', Build('MOCK Win7'))
447 {'userscripts/first-test.html': {Build('MOCK Win7'): ['txt', 'png']} }) 449 self.command.rebaseline(self.options(optimize=False), test_baseline_set)
448 450
449 # Note that we have only one run_in_parallel() call
450 self.assertEqual( 451 self.assertEqual(
451 self.tool.executive.calls, 452 self.tool.executive.calls,
452 [ 453 [
453 [['python', 'echo', 'copy-existing-baselines-internal', '--suffi xes', 'txt,png', 454 [['python', 'echo', 'copy-existing-baselines-internal', '--suffi xes', 'txt,png',
454 '--builder', 'MOCK Win7', '--test', 'userscripts/first-test.ht ml', '--verbose']], 455 '--builder', 'MOCK Win7', '--test', 'userscripts/first-test.ht ml', '--verbose']],
455 [['python', 'echo', 'rebaseline-test-internal', '--suffixes', 't xt,png', 456 [['python', 'echo', 'rebaseline-test-internal', '--suffixes', 't xt,png',
456 '--builder', 'MOCK Win7', '--test', 'userscripts/first-test.ht ml', '--verbose']] 457 '--builder', 'MOCK Win7', '--test', 'userscripts/first-test.ht ml', '--verbose']]
457 ]) 458 ])
458 459
459 def test_results_directory(self): 460 def test_results_directory(self):
460 self._setup_mock_build_data() 461 self._setup_mock_build_data()
461 self._write('userscripts/first-test.html', 'Dummy test contents') 462 self._write('userscripts/first-test.html', 'Dummy test contents')
462 self.command.rebaseline( 463 test_baseline_set = TestBaselineSet(self.tool)
463 self.options(optimize=False, results_directory='/tmp'), 464 test_baseline_set.add('userscripts/first-test.html', Build('MOCK Win7'))
464 {'userscripts/first-test.html': {Build('MOCK Win7'): ['txt', 'png']} }) 465 self.command.rebaseline(self.options(optimize=False, results_directory=' /tmp'), test_baseline_set)
465 466
466 # Note that we have only one run_in_parallel() call
467 self.assertEqual( 467 self.assertEqual(
468 self.tool.executive.calls, 468 self.tool.executive.calls,
469 [ 469 [
470 [['python', 'echo', 'copy-existing-baselines-internal', '--suffi xes', 'txt,png', 470 [['python', 'echo', 'copy-existing-baselines-internal', '--suffi xes', 'txt,png',
471 '--builder', 'MOCK Win7', '--test', 'userscripts/first-test.ht ml', '--verbose']], 471 '--builder', 'MOCK Win7', '--test', 'userscripts/first-test.ht ml', '--verbose']],
472 [['python', 'echo', 'rebaseline-test-internal', '--suffixes', 't xt,png', 472 [['python', 'echo', 'rebaseline-test-internal', '--suffixes', 't xt,png',
473 '--builder', 'MOCK Win7', '--test', 'userscripts/first-test.ht ml', '--verbose', '--results-directory', '/tmp']] 473 '--builder', 'MOCK Win7', '--test', 'userscripts/first-test.ht ml', '--verbose', '--results-directory', '/tmp']]
474 ]) 474 ])
475 475
476 def test_unstaged_baselines(self): 476 def test_unstaged_baselines(self):
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
509 'results_directory': None 509 'results_directory': None
510 }) 510 })
511 511
512 def test_rebaseline_updates_expectations_file(self): 512 def test_rebaseline_updates_expectations_file(self):
513 self._write( 513 self._write(
514 self.mac_expectations_path, 514 self.mac_expectations_path,
515 ('Bug(x) [ Mac ] userscripts/first-test.html [ Failure ]\n' 515 ('Bug(x) [ Mac ] userscripts/first-test.html [ Failure ]\n'
516 'bug(z) [ Linux ] userscripts/first-test.html [ Failure ]\n')) 516 'bug(z) [ Linux ] userscripts/first-test.html [ Failure ]\n'))
517 self._write('userscripts/first-test.html', 'Dummy test contents') 517 self._write('userscripts/first-test.html', 'Dummy test contents')
518 self._setup_mock_build_data() 518 self._setup_mock_build_data()
519 test_baseline_set = TestBaselineSet(self.tool)
520 test_baseline_set.add('userscripts/first-test.html', Build('MOCK Mac10.1 1'))
519 521
520 self.command.rebaseline( 522 self.command.rebaseline(self.options(), test_baseline_set)
521 self.options(),
522 {'userscripts/first-test.html': {Build('MOCK Mac10.11'): ['txt', 'pn g']}})
523 523
524 new_expectations = self._read(self.mac_expectations_path) 524 new_expectations = self._read(self.mac_expectations_path)
525 self.assertMultiLineEqual( 525 self.assertMultiLineEqual(
526 new_expectations, 526 new_expectations,
527 ('Bug(x) [ Mac10.10 ] userscripts/first-test.html [ Failure ]\n' 527 ('Bug(x) [ Mac10.10 ] userscripts/first-test.html [ Failure ]\n'
528 'bug(z) [ Linux ] userscripts/first-test.html [ Failure ]\n')) 528 'bug(z) [ Linux ] userscripts/first-test.html [ Failure ]\n'))
529 529
530 def test_rebaseline_updates_expectations_file_all_platforms(self): 530 def test_rebaseline_updates_expectations_file_all_platforms(self):
531 self._write(self.mac_expectations_path, 'Bug(x) userscripts/first-test.h tml [ Failure ]\n') 531 self._write(self.mac_expectations_path, 'Bug(x) userscripts/first-test.h tml [ Failure ]\n')
532 self._write('userscripts/first-test.html', 'Dummy test contents') 532 self._write('userscripts/first-test.html', 'Dummy test contents')
533 self._setup_mock_build_data() 533 self._setup_mock_build_data()
534 self.command.rebaseline( 534 test_baseline_set = TestBaselineSet(self.tool)
535 self.options(), 535 test_baseline_set.add('userscripts/first-test.html', Build('MOCK Mac10.1 1'))
536 {'userscripts/first-test.html': {Build('MOCK Mac10.11'): ['txt', 'pn g']}}) 536
537 self.command.rebaseline(self.options(), test_baseline_set)
538
537 new_expectations = self._read(self.mac_expectations_path) 539 new_expectations = self._read(self.mac_expectations_path)
538 self.assertMultiLineEqual( 540 self.assertMultiLineEqual(
539 new_expectations, 'Bug(x) [ Linux Mac10.10 Win ] userscripts/first-t est.html [ Failure ]\n') 541 new_expectations, 'Bug(x) [ Linux Mac10.10 Win ] userscripts/first-t est.html [ Failure ]\n')
540 542
541 def test_rebaseline_handles_platform_skips(self): 543 def test_rebaseline_handles_platform_skips(self):
542 # This test is just like test_rebaseline_updates_expectations_file_all_p latforms(), 544 # This test is just like test_rebaseline_updates_expectations_file_all_p latforms(),
543 # except that if a particular port happens to SKIP a test in an override s file, 545 # except that if a particular port happens to SKIP a test in an override s file,
544 # we count that as passing, and do not think that we still need to rebas eline it. 546 # we count that as passing, and do not think that we still need to rebas eline it.
545 self._write(self.mac_expectations_path, 'Bug(x) userscripts/first-test.h tml [ Failure ]\n') 547 self._write(self.mac_expectations_path, 'Bug(x) userscripts/first-test.h tml [ Failure ]\n')
546 self._write('NeverFixTests', 'Bug(y) [ Android ] userscripts [ WontFix ] \n') 548 self._write('NeverFixTests', 'Bug(y) [ Android ] userscripts [ WontFix ] \n')
547 self._write('userscripts/first-test.html', 'Dummy test contents') 549 self._write('userscripts/first-test.html', 'Dummy test contents')
548 self._setup_mock_build_data() 550 self._setup_mock_build_data()
551 test_baseline_set = TestBaselineSet(self.tool)
552 test_baseline_set.add('userscripts/first-test.html', Build('MOCK Mac10.1 1'))
549 553
550 self.command.rebaseline( 554 self.command.rebaseline(self.options(), test_baseline_set)
551 self.options(),
552 {'userscripts/first-test.html': {Build('MOCK Mac10.11'): ['txt', 'pn g']}})
553 555
554 new_expectations = self._read(self.mac_expectations_path) 556 new_expectations = self._read(self.mac_expectations_path)
555 self.assertMultiLineEqual( 557 self.assertMultiLineEqual(
556 new_expectations, 'Bug(x) [ Linux Mac10.10 Win ] userscripts/first-t est.html [ Failure ]\n') 558 new_expectations, 'Bug(x) [ Linux Mac10.10 Win ] userscripts/first-t est.html [ Failure ]\n')
557 559
558 def test_rebaseline_handles_skips_in_file(self): 560 def test_rebaseline_handles_skips_in_file(self):
559 # This test is like test_Rebaseline_handles_platform_skips, except that the 561 # This test is like test_Rebaseline_handles_platform_skips, except that the
560 # Skip is in the same (generic) file rather than a platform file. In thi s case, 562 # Skip is in the same (generic) file rather than a platform file. In thi s case,
561 # the Skip line should be left unmodified. Note that the first line is n ow 563 # the Skip line should be left unmodified. Note that the first line is n ow
562 # qualified as "[Linux Mac Win]"; if it was unqualified, it would confli ct with 564 # qualified as "[Linux Mac Win]"; if it was unqualified, it would confli ct with
563 # the second line. 565 # the second line.
564 self._write(self.mac_expectations_path, 566 self._write(self.mac_expectations_path,
565 ('Bug(x) [ Linux Mac Win ] userscripts/first-test.html [ Fai lure ]\n' 567 ('Bug(x) [ Linux Mac Win ] userscripts/first-test.html [ Fai lure ]\n'
566 'Bug(y) [ Android ] userscripts/first-test.html [ Skip ]\n' )) 568 'Bug(y) [ Android ] userscripts/first-test.html [ Skip ]\n' ))
567 self._write('userscripts/first-test.html', 'Dummy test contents') 569 self._write('userscripts/first-test.html', 'Dummy test contents')
568 self._setup_mock_build_data() 570 self._setup_mock_build_data()
571 test_baseline_set = TestBaselineSet(self.tool)
572 test_baseline_set.add('userscripts/first-test.html', Build('MOCK Mac10.1 1'))
569 573
570 self.command.rebaseline( 574 self.command.rebaseline(self.options(), test_baseline_set)
571 self.options(),
572 {'userscripts/first-test.html': {Build('MOCK Mac10.11'): ['txt', 'pn g']}})
573 575
574 new_expectations = self._read(self.mac_expectations_path) 576 new_expectations = self._read(self.mac_expectations_path)
575 self.assertMultiLineEqual( 577 self.assertMultiLineEqual(
576 new_expectations, 578 new_expectations,
577 ('Bug(x) [ Linux Mac10.10 Win ] userscripts/first-test.html [ Failur e ]\n' 579 ('Bug(x) [ Linux Mac10.10 Win ] userscripts/first-test.html [ Failur e ]\n'
578 'Bug(y) [ Android ] userscripts/first-test.html [ Skip ]\n')) 580 'Bug(y) [ Android ] userscripts/first-test.html [ Skip ]\n'))
579 581
580 def test_rebaseline_handles_smoke_tests(self): 582 def test_rebaseline_handles_smoke_tests(self):
581 # This test is just like test_rebaseline_handles_platform_skips, except that we check for 583 # This test is just like test_rebaseline_handles_platform_skips, except that we check for
582 # a test not being in the SmokeTests file, instead of using overrides fi les. 584 # a test not being in the SmokeTests file, instead of using overrides fi les.
583 # If a test is not part of the smoke tests, we count that as passing on ports that only 585 # If a test is not part of the smoke tests, we count that as passing on ports that only
584 # run smoke tests, and do not think that we still need to rebaseline it. 586 # run smoke tests, and do not think that we still need to rebaseline it.
585 self._write(self.mac_expectations_path, 'Bug(x) userscripts/first-test.h tml [ Failure ]\n') 587 self._write(self.mac_expectations_path, 'Bug(x) userscripts/first-test.h tml [ Failure ]\n')
586 self._write('SmokeTests', 'fast/html/article-element.html') 588 self._write('SmokeTests', 'fast/html/article-element.html')
587 self._write('userscripts/first-test.html', 'Dummy test contents') 589 self._write('userscripts/first-test.html', 'Dummy test contents')
588 self._setup_mock_build_data() 590 self._setup_mock_build_data()
591 test_baseline_set = TestBaselineSet(self.tool)
592 test_baseline_set.add('userscripts/first-test.html', Build('MOCK Mac10.1 1'))
589 593
590 self.command.rebaseline( 594 self.command.rebaseline(self.options(), test_baseline_set)
591 self.options(),
592 {'userscripts/first-test.html': {Build('MOCK Mac10.11'): ['txt', 'pn g']}})
593 595
594 new_expectations = self._read(self.mac_expectations_path) 596 new_expectations = self._read(self.mac_expectations_path)
595 self.assertMultiLineEqual( 597 self.assertMultiLineEqual(
596 new_expectations, 'Bug(x) [ Linux Mac10.10 Win ] userscripts/first-t est.html [ Failure ]\n') 598 new_expectations, 'Bug(x) [ Linux Mac10.10 Win ] userscripts/first-t est.html [ Failure ]\n')
597 599
598 600
599 class TestRebaseline(BaseTestCase): 601 class TestRebaseline(BaseTestCase):
600 # This command shares most of its logic with RebaselineJson, so these tests just test what is different. 602 # This command shares most of its logic with RebaselineJson, so these tests just test what is different.
601 603
602 command_constructor = Rebaseline # AKA webkit-patch rebaseline 604 command_constructor = Rebaseline # AKA webkit-patch rebaseline
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
781 [ 783 [
782 ['python', 'echo', 'rebaseline-test-internal', '--suffixes', 'tx t', 784 ['python', 'echo', 'rebaseline-test-internal', '--suffixes', 'tx t',
783 '--builder', 'MOCK Mac10.10', '--test', 'userscripts/reftest-te xt.html'], 785 '--builder', 'MOCK Mac10.10', '--test', 'userscripts/reftest-te xt.html'],
784 ['python', 'echo', 'rebaseline-test-internal', '--suffixes', 'tx t', 786 ['python', 'echo', 'rebaseline-test-internal', '--suffixes', 'tx t',
785 '--builder', 'MOCK Mac10.11', '--test', 'userscripts/reftest-te xt.html'], 787 '--builder', 'MOCK Mac10.11', '--test', 'userscripts/reftest-te xt.html'],
786 ], 788 ],
787 ]) 789 ])
788 790
789 def test_rebaseline_expectations_noop(self): 791 def test_rebaseline_expectations_noop(self):
790 self._zero_out_test_expectations() 792 self._zero_out_test_expectations()
791 793 self.command.execute(self.options(), [], self.tool)
792 oc = OutputCapture() 794 self.assertEqual(self.tool.filesystem.written_files, {})
793 try:
794 oc.capture_output()
795 self.command.execute(self.options(), [], self.tool)
796 finally:
797 _, _, logs = oc.restore_output()
798 self.assertEqual(self.tool.filesystem.written_files, {})
799 self.assertEqual(logs, 'Did not find any tests marked Rebaseline.\n' )
800 795
801 def disabled_test_overrides_are_included_correctly(self): 796 def disabled_test_overrides_are_included_correctly(self):
802 # TODO(qyearsley): Fix or remove this test method. 797 # TODO(qyearsley): Fix or remove this test method.
803 # This tests that any tests marked as REBASELINE in the overrides are fo und, but 798 # This tests that any tests marked as REBASELINE in the overrides are fo und, but
804 # that the overrides do not get written into the main file. 799 # that the overrides do not get written into the main file.
805 self._zero_out_test_expectations() 800 self._zero_out_test_expectations()
806 801
807 self._write(self.mac_expectations_path, '') 802 self._write(self.mac_expectations_path, '')
808 self.mac_port.expectations_dict = lambda: { 803 self.mac_port.expectations_dict = lambda: {
809 self.mac_expectations_path: '', 804 self.mac_expectations_path: '',
(...skipping 21 matching lines...) Expand all
831 'prototype-taco.html': { 826 'prototype-taco.html': {
832 'expected': 'FAIL', 827 'expected': 'FAIL',
833 'actual': 'PASS', 828 'actual': 'PASS',
834 'is_unexpected': True 829 'is_unexpected': True
835 } 830 }
836 } 831 }
837 } 832 }
838 } 833 }
839 })) 834 }))
840 835
841 self.tool.filesystem.write_text_file(test_port.path_to_generic_test_expe ctations_file(), """ 836 self.tool.filesystem.write_text_file(
842 Bug(foo) fast/dom/prototype-taco.html [ Rebaseline ] 837 test_port.path_to_generic_test_expectations_file(),
843 """) 838 'Bug(foo) fast/dom/prototype-taco.html [ Rebaseline ]\n')
844 839
845 self._write_test_file(test_port, 'fast/dom/prototype-taco.html', 'Dummy test contents') 840 self._write_test_file(test_port, 'fast/dom/prototype-taco.html', 'Dummy test contents')
846 841
847 self.tool.executive = MockLineRemovingExecutive() 842 self.tool.executive = MockLineRemovingExecutive()
848 843
849 self.tool.builders = BuilderList({ 844 self.tool.builders = BuilderList({
850 'MOCK Mac10.10': {'port_name': 'test-mac-mac10.10', 'specifiers': [' Mac10.10', 'Release']}, 845 'MOCK Mac10.10': {'port_name': 'test-mac-mac10.10', 'specifiers': [' Mac10.10', 'Release']},
851 'MOCK Mac10.11': {'port_name': 'test-mac-mac10.11', 'specifiers': [' Mac10.11', 'Release']}, 846 'MOCK Mac10.11': {'port_name': 'test-mac-mac10.11', 'specifiers': [' Mac10.11', 'Release']},
852 }) 847 })
853 848
854 self.command.execute(self.options(), [], self.tool) 849 self.command.execute(self.options(), [], self.tool)
855 self.assertEqual(self.tool.executive.calls, []) 850 self.assertEqual(self.tool.executive.calls, [])
856 851
857 # The mac ports should both be removed since they're the only ones in th e builder list. 852 # The mac ports should both be removed since they're the only ones in th e builder list.
858 self.assertEqual(self.tool.filesystem.read_text_file(test_port.path_to_g eneric_test_expectations_file()), """ 853 self.assertEqual(
859 Bug(foo) [ Linux Win ] fast/dom/prototype-taco.html [ Rebaseline ] 854 self.tool.filesystem.read_text_file(test_port.path_to_generic_test_e xpectations_file()),
860 """) 855 'Bug(foo) [ Linux Win ] fast/dom/prototype-taco.html [ Rebaseline ]\ n')
861 856
862 def test_rebaseline_missing(self): 857 def test_rebaseline_missing(self):
863 self.tool.buildbot.set_results(Build('MOCK Mac10.10'), LayoutTestResults ({ 858 self.tool.buildbot.set_results(Build('MOCK Mac10.10'), LayoutTestResults ({
864 'tests': { 859 'tests': {
865 'fast': { 860 'fast': {
866 'dom': { 861 'dom': {
867 'missing-text.html': { 862 'missing-text.html': {
868 'expected': 'PASS', 863 'expected': 'PASS',
869 'actual': 'MISSING', 864 'actual': 'MISSING',
870 'is_unexpected': True, 865 'is_unexpected': True,
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
930 for cmd_line, cwd in commands: 925 for cmd_line, cwd in commands:
931 out = self.run_command(cmd_line, cwd=cwd) 926 out = self.run_command(cmd_line, cwd=cwd)
932 if 'rebaseline-test-internal' in cmd_line: 927 if 'rebaseline-test-internal' in cmd_line:
933 out = '{"remove-lines": [{"test": "%s", "builder": "%s"}]}\n' % (cmd_line[8], cmd_line[6]) 928 out = '{"remove-lines": [{"test": "%s", "builder": "%s"}]}\n' % (cmd_line[8], cmd_line[6])
934 command_outputs.append([0, out, '']) 929 command_outputs.append([0, out, ''])
935 930
936 new_calls = self.calls[num_previous_calls:] 931 new_calls = self.calls[num_previous_calls:]
937 self.calls = self.calls[:num_previous_calls] 932 self.calls = self.calls[:num_previous_calls]
938 self.calls.append(new_calls) 933 self.calls.append(new_calls)
939 return command_outputs 934 return command_outputs
935
936
937 class TestBaselineSetTest(unittest.TestCase):
938
939 def setUp(self):
940 host = MockWebKitPatch()
941 host.port_factory = MockPortFactory(host)
942 port = host.port_factory.get()
943 base_dir = port.layout_tests_dir()
944 host.filesystem.write_text_file(base_dir + '/a/x.html', '<html>')
945 host.filesystem.write_text_file(base_dir + '/a/y.html', '<html>')
946 host.filesystem.write_text_file(base_dir + '/a/z.html', '<html>')
947 host.builders = BuilderList({
948 'MOCK Mac10.12': {'port_name': 'test-mac-mac10.12', 'specifiers': [' Mac10.12', 'Release']},
949 'MOCK Trusty': {'port_name': 'test-linux-trusty', 'specifiers': ['Tr usty', 'Release']},
950 'MOCK Win10': {'port_name': 'test-win-win10', 'specifiers': ['Win10' , 'Release']},
951 })
952 self.host = host
953
954 def test_add_and_iter_tests(self):
955 test_baseline_set = TestBaselineSet(host=self.host)
956 test_baseline_set.add('a', Build('MOCK Trusty'))
957 test_baseline_set.add('a/z.html', Build('MOCK Win10'))
958 self.assertEqual(
959 list(test_baseline_set),
960 [
961 ('a/x.html', Build(builder_name='MOCK Trusty')),
962 ('a/y.html', Build(builder_name='MOCK Trusty')),
963 ('a/z.html', Build(builder_name='MOCK Trusty')),
964 ('a/z.html', Build(builder_name='MOCK Win10')),
965 ])
966
967 def test_str_empty(self):
968 test_baseline_set = TestBaselineSet(host=self.host)
969 self.assertEqual(str(test_baseline_set), '<Empty TestBaselineSet>')
970
971 def test_str_basic(self):
972 test_baseline_set = TestBaselineSet(host=self.host)
973 test_baseline_set.add('a/x.html', Build('MOCK Mac10.12'))
974 test_baseline_set.add('a/x.html', Build('MOCK Win10'))
975 self.assertEqual(
976 str(test_baseline_set),
977 ('<TestBaselineSet with:\n'
978 ' a/x.html: Build(builder_name=\'MOCK Mac10.12\', build_number=Non e)\n'
979 ' a/x.html: Build(builder_name=\'MOCK Win10\', build_number=None)> '))
OLDNEW
« no previous file with comments | « third_party/WebKit/Tools/Scripts/webkitpy/tool/commands/rebaseline_cl_unittest.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698