| OLD | NEW |
| 1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 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 math | 5 import math |
| 6 import os | 6 import os |
| 7 import StringIO | 7 import StringIO |
| 8 import sys | 8 import sys |
| 9 import unittest | 9 import unittest |
| 10 | 10 |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 127 class MixedStateStorySet(story_module.StorySet): | 127 class MixedStateStorySet(story_module.StorySet): |
| 128 @property | 128 @property |
| 129 def allow_mixed_story_states(self): | 129 def allow_mixed_story_states(self): |
| 130 return True | 130 return True |
| 131 | 131 |
| 132 def SetupStorySet(allow_multiple_story_states, story_state_list): | 132 def SetupStorySet(allow_multiple_story_states, story_state_list): |
| 133 if allow_multiple_story_states: | 133 if allow_multiple_story_states: |
| 134 story_set = MixedStateStorySet() | 134 story_set = MixedStateStorySet() |
| 135 else: | 135 else: |
| 136 story_set = story_module.StorySet() | 136 story_set = story_module.StorySet() |
| 137 for i, story_state in enumerate(story_state_list): | 137 for story_state in story_state_list: |
| 138 story_set.AddStory(DummyLocalStory(story_state, | 138 story_set.AddStory(DummyLocalStory(story_state)) |
| 139 name='story%d' % i)) | |
| 140 return story_set | 139 return story_set |
| 141 | 140 |
| 142 def _GetOptionForUnittest(): | 141 def _GetOptionForUnittest(): |
| 143 options = options_for_unittests.GetCopy() | 142 options = options_for_unittests.GetCopy() |
| 144 options.output_formats = ['none'] | 143 options.output_formats = ['none'] |
| 145 options.suppress_gtest_report = False | 144 options.suppress_gtest_report = False |
| 146 parser = options.CreateParser() | 145 parser = options.CreateParser() |
| 147 story_runner.AddCommandLineArgs(parser) | 146 story_runner.AddCommandLineArgs(parser) |
| 148 options.MergeDefaultValues(parser.get_default_values()) | 147 options.MergeDefaultValues(parser.get_default_values()) |
| 149 story_runner.ProcessCommandLineArgs(parser, options) | 148 story_runner.ProcessCommandLineArgs(parser, options) |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 290 | 289 |
| 291 manager = mock.MagicMock() | 290 manager = mock.MagicMock() |
| 292 test.WillRunStory = mock.MagicMock() | 291 test.WillRunStory = mock.MagicMock() |
| 293 test.Measure = mock.MagicMock() | 292 test.Measure = mock.MagicMock() |
| 294 test.DidRunStory = mock.MagicMock() | 293 test.DidRunStory = mock.MagicMock() |
| 295 manager.attach_mock(test.WillRunStory, TEST_WILL_RUN_STORY) | 294 manager.attach_mock(test.WillRunStory, TEST_WILL_RUN_STORY) |
| 296 manager.attach_mock(test.Measure, TEST_MEASURE) | 295 manager.attach_mock(test.Measure, TEST_MEASURE) |
| 297 manager.attach_mock(test.DidRunStory, TEST_DID_RUN_STORY) | 296 manager.attach_mock(test.DidRunStory, TEST_DID_RUN_STORY) |
| 298 | 297 |
| 299 story_set = story_module.StorySet() | 298 story_set = story_module.StorySet() |
| 300 story_set.AddStory(DummyLocalStory(TestSharedTbmState, name='foo')) | 299 story_set.AddStory(DummyLocalStory(TestSharedTbmState)) |
| 301 story_set.AddStory(DummyLocalStory(TestSharedTbmState, name='bar')) | 300 story_set.AddStory(DummyLocalStory(TestSharedTbmState)) |
| 302 story_set.AddStory(DummyLocalStory(TestSharedTbmState, name='baz')) | 301 story_set.AddStory(DummyLocalStory(TestSharedTbmState)) |
| 303 story_runner.Run( | 302 story_runner.Run( |
| 304 test, story_set, self.options, self.results) | 303 test, story_set, self.options, self.results) |
| 305 self.assertEquals(0, len(self.results.failures)) | 304 self.assertEquals(0, len(self.results.failures)) |
| 306 self.assertEquals(3, GetNumberOfSuccessfulPageRuns(self.results)) | 305 self.assertEquals(3, GetNumberOfSuccessfulPageRuns(self.results)) |
| 307 | 306 |
| 308 self.assertEquals(3*EXPECTED_CALLS_IN_ORDER, | 307 self.assertEquals(3*EXPECTED_CALLS_IN_ORDER, |
| 309 [call[0] for call in manager.mock_calls]) | 308 [call[0] for call in manager.mock_calls]) |
| 310 | 309 |
| 311 def testCallOrderBetweenStoryTestAndSharedState(self): | 310 def testCallOrderBetweenStoryTestAndSharedState(self): |
| 312 """Check that the call order between StoryTest and SharedState is correct. | 311 """Check that the call order between StoryTest and SharedState is correct. |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 368 class TestSharedStateForTearDown(TestSharedState): | 367 class TestSharedStateForTearDown(TestSharedState): |
| 369 num_of_tear_downs = 0 | 368 num_of_tear_downs = 0 |
| 370 | 369 |
| 371 def RunStory(self, results): | 370 def RunStory(self, results): |
| 372 pass | 371 pass |
| 373 | 372 |
| 374 def TearDownState(self): | 373 def TearDownState(self): |
| 375 TestSharedStateForTearDown.num_of_tear_downs += 1 | 374 TestSharedStateForTearDown.num_of_tear_downs += 1 |
| 376 | 375 |
| 377 story_set = story_module.StorySet() | 376 story_set = story_module.StorySet() |
| 378 story_set.AddStory(DummyLocalStory(TestSharedStateForTearDown, name='foo')) | 377 story_set.AddStory(DummyLocalStory(TestSharedStateForTearDown)) |
| 379 story_set.AddStory(DummyLocalStory(TestSharedStateForTearDown, name='bar')) | 378 story_set.AddStory(DummyLocalStory(TestSharedStateForTearDown)) |
| 380 story_set.AddStory(DummyLocalStory(TestSharedStateForTearDown, name='baz')) | 379 story_set.AddStory(DummyLocalStory(TestSharedStateForTearDown)) |
| 381 | 380 |
| 382 TestSharedStateForTearDown.num_of_tear_downs = 0 | 381 TestSharedStateForTearDown.num_of_tear_downs = 0 |
| 383 story_runner.Run(mock.MagicMock(), story_set, self.options, self.results) | 382 story_runner.Run(mock.MagicMock(), story_set, self.options, self.results) |
| 384 self.assertEquals(TestSharedStateForTearDown.num_of_tear_downs, 1) | 383 self.assertEquals(TestSharedStateForTearDown.num_of_tear_downs, 1) |
| 385 | 384 |
| 386 TestSharedStateForTearDown.num_of_tear_downs = 0 | 385 TestSharedStateForTearDown.num_of_tear_downs = 0 |
| 387 story_runner.Run(mock.MagicMock(), story_set, self.options, self.results, | 386 story_runner.Run(mock.MagicMock(), story_set, self.options, self.results, |
| 388 tear_down_after_story=True) | 387 tear_down_after_story=True) |
| 389 self.assertEquals(TestSharedStateForTearDown.num_of_tear_downs, 3) | 388 self.assertEquals(TestSharedStateForTearDown.num_of_tear_downs, 3) |
| 390 | 389 |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 483 | 482 |
| 484 def RunPage(self, *_): | 483 def RunPage(self, *_): |
| 485 old_run_count = self.run_count | 484 old_run_count = self.run_count |
| 486 self.run_count += 1 | 485 self.run_count += 1 |
| 487 if old_run_count == 1: | 486 if old_run_count == 1: |
| 488 raise UnknownException('FooBarzException') | 487 raise UnknownException('FooBarzException') |
| 489 | 488 |
| 490 def ValidateAndMeasurePage(self, page, tab, results): | 489 def ValidateAndMeasurePage(self, page, tab, results): |
| 491 pass | 490 pass |
| 492 | 491 |
| 493 s1 = DummyLocalStory(TestSharedPageState, name='foo') | 492 s1 = DummyLocalStory(TestSharedPageState) |
| 494 s2 = DummyLocalStory(TestSharedPageState, name='bar') | 493 s2 = DummyLocalStory(TestSharedPageState) |
| 495 story_set.AddStory(s1) | 494 story_set.AddStory(s1) |
| 496 story_set.AddStory(s2) | 495 story_set.AddStory(s2) |
| 497 test = Test() | 496 test = Test() |
| 498 with self.assertRaises(UnknownException): | 497 with self.assertRaises(UnknownException): |
| 499 story_runner.Run( | 498 story_runner.Run( |
| 500 test, story_set, self.options, self.results) | 499 test, story_set, self.options, self.results) |
| 501 self.assertEqual(set([s2]), self.results.pages_that_failed) | 500 self.assertEqual(set([s2]), self.results.pages_that_failed) |
| 502 self.assertEqual(set([s1]), self.results.pages_that_succeeded) | 501 self.assertEqual(set([s1]), self.results.pages_that_succeeded) |
| 503 self.assertIn('FooBarzException', self.fake_stdout.getvalue()) | 502 self.assertIn('FooBarzException', self.fake_stdout.getvalue()) |
| 504 | 503 |
| 505 def testRaiseBrowserGoneExceptionFromRunPage(self): | 504 def testRaiseBrowserGoneExceptionFromRunPage(self): |
| 506 self.SuppressExceptionFormatting() | 505 self.SuppressExceptionFormatting() |
| 507 story_set = story_module.StorySet() | 506 story_set = story_module.StorySet() |
| 508 | 507 |
| 509 class Test(legacy_page_test.LegacyPageTest): | 508 class Test(legacy_page_test.LegacyPageTest): |
| 510 def __init__(self, *args): | 509 def __init__(self, *args): |
| 511 super(Test, self).__init__(*args) | 510 super(Test, self).__init__(*args) |
| 512 self.run_count = 0 | 511 self.run_count = 0 |
| 513 | 512 |
| 514 def RunPage(self, *_): | 513 def RunPage(self, *_): |
| 515 old_run_count = self.run_count | 514 old_run_count = self.run_count |
| 516 self.run_count += 1 | 515 self.run_count += 1 |
| 517 if old_run_count == 0: | 516 if old_run_count == 0: |
| 518 raise exceptions.BrowserGoneException( | 517 raise exceptions.BrowserGoneException( |
| 519 None, 'i am a browser crash message') | 518 None, 'i am a browser crash message') |
| 520 | 519 |
| 521 def ValidateAndMeasurePage(self, page, tab, results): | 520 def ValidateAndMeasurePage(self, page, tab, results): |
| 522 pass | 521 pass |
| 523 | 522 |
| 524 story_set.AddStory(DummyLocalStory(TestSharedPageState, name='foo')) | 523 story_set.AddStory(DummyLocalStory(TestSharedPageState)) |
| 525 story_set.AddStory(DummyLocalStory(TestSharedPageState, name='bar')) | 524 story_set.AddStory(DummyLocalStory(TestSharedPageState)) |
| 526 test = Test() | 525 test = Test() |
| 527 story_runner.Run( | 526 story_runner.Run( |
| 528 test, story_set, self.options, self.results) | 527 test, story_set, self.options, self.results) |
| 529 self.assertEquals(2, test.run_count) | 528 self.assertEquals(2, test.run_count) |
| 530 self.assertEquals(1, len(self.results.failures)) | 529 self.assertEquals(1, len(self.results.failures)) |
| 531 self.assertEquals(1, GetNumberOfSuccessfulPageRuns(self.results)) | 530 self.assertEquals(1, GetNumberOfSuccessfulPageRuns(self.results)) |
| 532 | 531 |
| 533 def testAppCrashThenRaiseInTearDownFatal(self): | 532 def testAppCrashThenRaiseInTearDownFatal(self): |
| 534 self.SuppressExceptionFormatting() | 533 self.SuppressExceptionFormatting() |
| 535 story_set = story_module.StorySet() | 534 story_set = story_module.StorySet() |
| (...skipping 19 matching lines...) Expand all Loading... |
| 555 def RunPage(self, *_): | 554 def RunPage(self, *_): |
| 556 old_run_count = self.run_count | 555 old_run_count = self.run_count |
| 557 self.run_count += 1 | 556 self.run_count += 1 |
| 558 if old_run_count == 0: | 557 if old_run_count == 0: |
| 559 unit_test_events.append('app-crash') | 558 unit_test_events.append('app-crash') |
| 560 raise exceptions.AppCrashException | 559 raise exceptions.AppCrashException |
| 561 | 560 |
| 562 def ValidateAndMeasurePage(self, page, tab, results): | 561 def ValidateAndMeasurePage(self, page, tab, results): |
| 563 pass | 562 pass |
| 564 | 563 |
| 565 story_set.AddStory(DummyLocalStory(TestTearDownSharedState, name='foo')) | 564 story_set.AddStory(DummyLocalStory(TestTearDownSharedState)) |
| 566 story_set.AddStory(DummyLocalStory(TestTearDownSharedState, name='bar')) | 565 story_set.AddStory(DummyLocalStory(TestTearDownSharedState)) |
| 567 test = Test() | 566 test = Test() |
| 568 | 567 |
| 569 with self.assertRaises(DidRunTestError): | 568 with self.assertRaises(DidRunTestError): |
| 570 story_runner.Run( | 569 story_runner.Run( |
| 571 test, story_set, self.options, self.results) | 570 test, story_set, self.options, self.results) |
| 572 self.assertEqual(['app-crash', 'dump-state', 'tear-down-state'], | 571 self.assertEqual(['app-crash', 'dump-state', 'tear-down-state'], |
| 573 unit_test_events) | 572 unit_test_events) |
| 574 # The AppCrashException gets added as a failure. | 573 # The AppCrashException gets added as a failure. |
| 575 self.assertEquals(1, len(self.results.failures)) | 574 self.assertEquals(1, len(self.results.failures)) |
| 576 | 575 |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 716 def CanRunStory(self, story): | 715 def CanRunStory(self, story): |
| 717 return True | 716 return True |
| 718 | 717 |
| 719 def TearDownState(self): | 718 def TearDownState(self): |
| 720 pass | 719 pass |
| 721 | 720 |
| 722 def DumpStateUponFailure(self, story, results): | 721 def DumpStateUponFailure(self, story, results): |
| 723 pass | 722 pass |
| 724 | 723 |
| 725 class FailingStory(story_module.Story): | 724 class FailingStory(story_module.Story): |
| 726 def __init__(self, name): | 725 def __init__(self): |
| 727 super(FailingStory, self).__init__( | 726 super(FailingStory, self).__init__( |
| 728 shared_state_class=SimpleSharedState, | 727 shared_state_class=SimpleSharedState, |
| 729 is_local=True, name=name) | 728 is_local=True) |
| 730 self.was_run = False | 729 self.was_run = False |
| 731 | 730 |
| 732 def Run(self, shared_state): | 731 def Run(self, shared_state): |
| 733 self.was_run = True | 732 self.was_run = True |
| 734 raise legacy_page_test.Failure | 733 raise legacy_page_test.Failure |
| 735 | 734 |
| 736 @property | 735 @property |
| 737 def url(self): | 736 def url(self): |
| 738 return 'data:,' | 737 return 'data:,' |
| 739 | 738 |
| 740 self.SuppressExceptionFormatting() | 739 self.SuppressExceptionFormatting() |
| 741 | 740 |
| 742 story_set = story_module.StorySet() | 741 story_set = story_module.StorySet() |
| 743 for i in range(num_failing_stories): | 742 for _ in range(num_failing_stories): |
| 744 story_set.AddStory(FailingStory(name='failing%d' % i)) | 743 story_set.AddStory(FailingStory()) |
| 745 | 744 |
| 746 options = _GetOptionForUnittest() | 745 options = _GetOptionForUnittest() |
| 747 options.output_formats = ['none'] | 746 options.output_formats = ['none'] |
| 748 options.suppress_gtest_report = True | 747 options.suppress_gtest_report = True |
| 749 if options_max_failures: | 748 if options_max_failures: |
| 750 options.max_failures = options_max_failures | 749 options.max_failures = options_max_failures |
| 751 | 750 |
| 752 results = results_options.CreateResults(EmptyMetadataForTest(), options) | 751 results = results_options.CreateResults(EmptyMetadataForTest(), options) |
| 753 story_runner.Run( | 752 story_runner.Run( |
| 754 DummyTest(), story_set, options, | 753 DummyTest(), story_set, options, |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 989 mock.call.test.WillRunStory(root_mock.state.platform), | 988 mock.call.test.WillRunStory(root_mock.state.platform), |
| 990 mock.call.state.WillRunStory(root_mock.story), | 989 mock.call.state.WillRunStory(root_mock.story), |
| 991 mock.call.state.CanRunStory(root_mock.story), | 990 mock.call.state.CanRunStory(root_mock.story), |
| 992 mock.call.state.RunStory(root_mock.results), | 991 mock.call.state.RunStory(root_mock.results), |
| 993 mock.call.test.Measure(root_mock.state.platform, root_mock.results), | 992 mock.call.test.Measure(root_mock.state.platform, root_mock.results), |
| 994 mock.call.state.DumpStateUponFailure(root_mock.story, root_mock.results), | 993 mock.call.state.DumpStateUponFailure(root_mock.story, root_mock.results), |
| 995 mock.call.results.AddValue(FailureValueMatcher('foo')), | 994 mock.call.results.AddValue(FailureValueMatcher('foo')), |
| 996 mock.call.state.DidRunStory(root_mock.results), | 995 mock.call.state.DidRunStory(root_mock.results), |
| 997 mock.call.test.DidRunStory(root_mock.state.platform) | 996 mock.call.test.DidRunStory(root_mock.state.platform) |
| 998 ]) | 997 ]) |
| OLD | NEW |