Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """Unit tests for classes in gtest_command.py.""" | 6 """Unit tests for classes in gtest_command.py.""" |
| 7 | 7 |
| 8 import os | |
| 9 import tempfile | |
| 8 import unittest | 10 import unittest |
| 9 | 11 |
| 10 import test_env # pylint: disable=W0611 | 12 import test_env # pylint: disable=W0611 |
| 11 | 13 |
| 14 from common import chromium_utils | |
| 15 from common import find_depot_tools # pylint: disable=W0611 | |
| 12 from common import gtest_utils | 16 from common import gtest_utils |
| 13 | 17 |
| 18 from testing_support import auto_stub | |
| 14 | 19 |
| 15 FAILURES = ['NavigationControllerTest.Reload', | 20 FAILURES = ['NavigationControllerTest.Reload', |
| 16 'NavigationControllerTest/SpdyNetworkTransTest.Constructor/0', | 21 'NavigationControllerTest/SpdyNetworkTransTest.Constructor/0', |
| 17 'BadTest.TimesOut', | 22 'BadTest.TimesOut', |
| 18 'MoreBadTest.TimesOutAndFails', | 23 'MoreBadTest.TimesOutAndFails', |
| 19 'SomeOtherTest.SwitchTypes', | 24 'SomeOtherTest.SwitchTypes', |
| 20 'SomeOtherTest.FAILS_ThisTestTimesOut'] | 25 'SomeOtherTest.FAILS_ThisTestTimesOut'] |
| 21 | 26 |
| 22 FAILS_FAILURES = ['SomeOtherTest.FAILS_Bar'] | 27 FAILS_FAILURES = ['SomeOtherTest.FAILS_Bar'] |
| 23 FLAKY_FAILURES = ['SomeOtherTest.FLAKY_Baz'] | 28 FLAKY_FAILURES = ['SomeOtherTest.FLAKY_Baz'] |
| (...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 430 Tests took 31 seconds. | 435 Tests took 31 seconds. |
| 431 | 436 |
| 432 | 437 |
| 433 ================================================================ | 438 ================================================================ |
| 434 End output from shard index 0 (machine tag: swarm12.c, id: swarm12). Return 1 | 439 End output from shard index 0 (machine tag: swarm12.c, id: swarm12). Return 1 |
| 435 ================================================================ | 440 ================================================================ |
| 436 | 441 |
| 437 """ | 442 """ |
| 438 | 443 |
| 439 | 444 |
| 440 class TestGTestLogParserTests(unittest.TestCase): | 445 class TestGTestLogParserTests(auto_stub.TestCase): |
| 441 | 446 |
| 442 def testGTestLogParserNoSharing(self): | 447 def testGTestLogParserNoSharing(self): |
| 443 # Tests for log parsing without sharding. | 448 # Tests for log parsing without sharding. |
| 444 parser = gtest_utils.GTestLogParser() | 449 parser = gtest_utils.GTestLogParser() |
| 445 for line in TEST_DATA.splitlines(): | 450 for line in TEST_DATA.splitlines(): |
| 446 parser.ProcessLine(line) | 451 parser.ProcessLine(line) |
| 447 | 452 |
| 448 self.assertEqual(0, len(parser.ParsingErrors())) | 453 self.assertEqual(0, len(parser.ParsingErrors())) |
| 449 self.assertFalse(parser.RunningTests()) | 454 self.assertFalse(parser.RunningTests()) |
| 450 | 455 |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 631 ], | 636 ], |
| 632 parser.FailureDescription('PickleTest.EncodeDecode')) | 637 parser.FailureDescription('PickleTest.EncodeDecode')) |
| 633 | 638 |
| 634 def testNestedGtests(self): | 639 def testNestedGtests(self): |
| 635 parser = gtest_utils.GTestLogParser() | 640 parser = gtest_utils.GTestLogParser() |
| 636 for line in TEST_DATA_NESTED_RUNS.splitlines(): | 641 for line in TEST_DATA_NESTED_RUNS.splitlines(): |
| 637 parser.ProcessLine(line) | 642 parser.ProcessLine(line) |
| 638 self.assertEqual(['Foo.Bar'], parser.FailedTests(True, True)) | 643 self.assertEqual(['Foo.Bar'], parser.FailedTests(True, True)) |
| 639 | 644 |
| 640 | 645 |
| 641 class TestGTestJSONParserTests(unittest.TestCase): | 646 class TestGTestJSONParserTests(auto_stub.TestCase): |
| 642 def testPassedTests(self): | 647 def testPassedTests(self): |
| 643 parser = gtest_utils.GTestJSONParser() | 648 parser = gtest_utils.GTestJSONParser() |
| 644 parser.ProcessJSONData({ | 649 parser.ProcessJSONData({ |
| 645 'disabled_tests': [], | 650 'disabled_tests': [], |
| 646 'per_iteration_data': [ | 651 'per_iteration_data': [ |
| 647 { | 652 { |
| 648 'Test.One': [{'status': 'SUCCESS', 'output_snippet': ''}], | 653 'Test.One': [{'status': 'SUCCESS', 'output_snippet': ''}], |
| 649 'Test.Two': [{'status': 'SUCCESS', 'output_snippet': ''}], | 654 'Test.Two': [{'status': 'SUCCESS', 'output_snippet': ''}], |
| 650 } | 655 } |
| 651 ] | 656 ] |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 702 'Test.One': [{'status': 'SUCCESS', 'output_snippet': ''}], | 707 'Test.One': [{'status': 'SUCCESS', 'output_snippet': ''}], |
| 703 } | 708 } |
| 704 ] | 709 ] |
| 705 }) | 710 }) |
| 706 | 711 |
| 707 self.assertEqual(['Test.One'], parser.PassedTests()) | 712 self.assertEqual(['Test.One'], parser.PassedTests()) |
| 708 self.assertEqual([], parser.FailedTests()) | 713 self.assertEqual([], parser.FailedTests()) |
| 709 self.assertEqual(0, parser.FlakyTests()) | 714 self.assertEqual(0, parser.FlakyTests()) |
| 710 self.assertEqual(1, parser.DisabledTests()) | 715 self.assertEqual(1, parser.DisabledTests()) |
| 711 | 716 |
| 717 def testIngoredFailedTests(self): | |
| 718 TEST_IGNORED_FAILED_TESTS_SPEC = """ | |
| 719 # A comment. | |
| 720 | |
| 721 http://crbug.com/12345 [ OS_WIN , OS_LINUX] Test.One | |
| 722 http://crbug.com/12345 [OS_WIN CPU_64_BITS MODE_RELEASE] Test.Two/2 | |
| 723 http://crbug.com/12345 [ OS_MACOSX, OS_WIN CPU_64_BITS ] Perf/Test.Three | |
| 724 http://crbug.com/12345 [ invalid.platform.spec ] Test.Four | |
| 725 http://crbug.com/12345 [ OS_WIN CPU_32_BITS MODE_RELEASE ] Test.Five | |
| 726 invalid line | |
| 727 """ | |
| 728 | |
| 729 _, spec_filename = tempfile.mkstemp() | |
| 730 spec_fd = open(spec_filename, 'w') | |
| 731 spec_fd.write(TEST_IGNORED_FAILED_TESTS_SPEC) | |
| 732 spec_fd.close() | |
| 733 | |
| 734 self.mock(chromium_utils, 'FindUpward', lambda *_: spec_filename) | |
| 735 parser = gtest_utils.GTestJSONParser() | |
| 736 | |
| 737 try: | |
| 738 parser.ProcessJSONData({ | |
| 739 'disabled_tests': ['Test.Six'], | |
| 740 'per_iteration_data': [ | |
| 741 { | |
| 742 'Test.One': [{'status': 'FAILURE', 'output_snippet': ''}], | |
| 743 'Test.Two/2': [{'status': 'FAILURE', 'output_snippet': ''}], | |
| 744 'Perf/Test.Three': [{'status': 'FAILURE', 'output_snippet': ''}], | |
| 745 'Test.Four': [{'status': 'FAILURE', 'output_snippet': ''}], | |
| 746 'Test.Five': [{'status': 'FAILURE', 'output_snippet': ''}], | |
| 747 } | |
| 748 ], | |
| 749 'global_tags': ['OS_WIN', 'CPU_64_BITS', 'MODE_RELEASE', 'OTHER_FLAG'] | |
| 750 }, '/fake/path/to/build') | |
| 751 finally: | |
| 752 os.remove(spec_filename) | |
|
eseidel
2014/07/09 16:07:02
It's really unfortunate that this test touches the
Sergiy Byelozyorov
2014/07/09 17:23:42
I wish I could mock 'open' function with self.mock
| |
| 753 | |
| 754 self.assertEqual(['Test.Five', 'Test.Four'], parser.FailedTests()) | |
| 755 self.assertEqual(['Perf/Test.Three', 'Test.One', 'Test.Two/2'], | |
| 756 parser.IgnoredFailedTests()) | |
| 757 | |
| 758 # pylint: disable=R0201 | |
| 759 def testDoesNotThrowExceptionOnMissingIgnoredFailedTestsFile(self): | |
| 760 parser = gtest_utils.GTestJSONParser() | |
| 761 parser.ProcessJSONData({'per_iteration_data': []}, tempfile.gettempdir()) | |
| 762 | |
| 712 def testCompressList(self): | 763 def testCompressList(self): |
| 713 CompressList = gtest_utils.CompressList | 764 CompressList = gtest_utils.CompressList |
| 714 self.assertEqual(['foo'], CompressList([1, 2, 3, 4], 0, 'foo')) | 765 self.assertEqual(['foo'], CompressList([1, 2, 3, 4], 0, 'foo')) |
| 715 self.assertEqual(['foo', 4], CompressList([1, 2, 3, 4], 1, 'foo')) | 766 self.assertEqual(['foo', 4], CompressList([1, 2, 3, 4], 1, 'foo')) |
| 716 self.assertEqual([1, 'foo', 4], CompressList([1, 2, 3, 4], 2, 'foo')) | 767 self.assertEqual([1, 'foo', 4], CompressList([1, 2, 3, 4], 2, 'foo')) |
| 717 self.assertEqual([1, 'foo', 3, 4], CompressList([1, 2, 3, 4], 3, 'foo')) | 768 self.assertEqual([1, 'foo', 3, 4], CompressList([1, 2, 3, 4], 3, 'foo')) |
| 718 self.assertEqual([1, 2, 3, 4], CompressList([1, 2, 3, 4], 4, 'foo')) | 769 self.assertEqual([1, 2, 3, 4], CompressList([1, 2, 3, 4], 4, 'foo')) |
| 719 self.assertEqual([1, 2, 3, 4], CompressList([1, 2, 3, 4], 5, 'foo')) | 770 self.assertEqual([1, 2, 3, 4], CompressList([1, 2, 3, 4], 5, 'foo')) |
| 720 self.assertEqual([1, 2, 3, 4], CompressList([1, 2, 3, 4], 6, 'foo')) | 771 self.assertEqual([1, 2, 3, 4], CompressList([1, 2, 3, 4], 6, 'foo')) |
| 721 | 772 |
| 722 | 773 |
| 723 if __name__ == '__main__': | 774 if __name__ == '__main__': |
| 724 unittest.main() | 775 unittest.main() |
| OLD | NEW |