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 |