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