| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  | import unittest | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-21 10:27:59 +02:00
										 |  |  | from test.test_unittest.support import LoggingResult | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Test_TestSkipping(unittest.TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_skipping(self): | 
					
						
							|  |  |  |         class Foo(unittest.TestCase): | 
					
						
							| 
									
										
										
										
											2021-08-22 10:33:52 +03:00
										 |  |  |             def defaultTestResult(self): | 
					
						
							|  |  |  |                 return LoggingResult(events) | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |             def test_skip_me(self): | 
					
						
							|  |  |  |                 self.skipTest("skip") | 
					
						
							|  |  |  |         events = [] | 
					
						
							|  |  |  |         result = LoggingResult(events) | 
					
						
							|  |  |  |         test = Foo("test_skip_me") | 
					
						
							| 
									
										
										
										
											2021-08-30 16:16:25 +03:00
										 |  |  |         self.assertIs(test.run(result), result) | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |         self.assertEqual(events, ['startTest', 'addSkip', 'stopTest']) | 
					
						
							|  |  |  |         self.assertEqual(result.skipped, [(test, "skip")]) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-22 10:33:52 +03:00
										 |  |  |         events = [] | 
					
						
							| 
									
										
										
										
											2021-08-30 16:16:25 +03:00
										 |  |  |         result = test.run() | 
					
						
							| 
									
										
										
										
											2021-08-22 10:33:52 +03:00
										 |  |  |         self.assertEqual(events, ['startTestRun', 'startTest', 'addSkip', | 
					
						
							|  |  |  |                                   'stopTest', 'stopTestRun']) | 
					
						
							| 
									
										
										
										
											2021-08-30 16:16:25 +03:00
										 |  |  |         self.assertEqual(result.skipped, [(test, "skip")]) | 
					
						
							|  |  |  |         self.assertEqual(result.testsRun, 1) | 
					
						
							| 
									
										
										
										
											2021-08-22 10:33:52 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |         # Try letting setUp skip the test now. | 
					
						
							|  |  |  |         class Foo(unittest.TestCase): | 
					
						
							| 
									
										
										
										
											2021-08-22 10:33:52 +03:00
										 |  |  |             def defaultTestResult(self): | 
					
						
							|  |  |  |                 return LoggingResult(events) | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |             def setUp(self): | 
					
						
							|  |  |  |                 self.skipTest("testing") | 
					
						
							|  |  |  |             def test_nothing(self): pass | 
					
						
							|  |  |  |         events = [] | 
					
						
							|  |  |  |         result = LoggingResult(events) | 
					
						
							|  |  |  |         test = Foo("test_nothing") | 
					
						
							| 
									
										
										
										
											2021-08-30 16:16:25 +03:00
										 |  |  |         self.assertIs(test.run(result), result) | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |         self.assertEqual(events, ['startTest', 'addSkip', 'stopTest']) | 
					
						
							|  |  |  |         self.assertEqual(result.skipped, [(test, "testing")]) | 
					
						
							|  |  |  |         self.assertEqual(result.testsRun, 1) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-22 10:33:52 +03:00
										 |  |  |         events = [] | 
					
						
							| 
									
										
										
										
											2021-08-30 16:16:25 +03:00
										 |  |  |         result = test.run() | 
					
						
							| 
									
										
										
										
											2021-08-22 10:33:52 +03:00
										 |  |  |         self.assertEqual(events, ['startTestRun', 'startTest', 'addSkip', | 
					
						
							|  |  |  |                                   'stopTest', 'stopTestRun']) | 
					
						
							| 
									
										
										
										
											2021-08-30 16:16:25 +03:00
										 |  |  |         self.assertEqual(result.skipped, [(test, "testing")]) | 
					
						
							|  |  |  |         self.assertEqual(result.testsRun, 1) | 
					
						
							| 
									
										
										
										
											2021-08-22 10:33:52 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-20 20:16:47 +01:00
										 |  |  |     def test_skipping_subtests(self): | 
					
						
							|  |  |  |         class Foo(unittest.TestCase): | 
					
						
							| 
									
										
										
										
											2021-08-22 10:33:52 +03:00
										 |  |  |             def defaultTestResult(self): | 
					
						
							|  |  |  |                 return LoggingResult(events) | 
					
						
							| 
									
										
										
										
											2013-03-20 20:16:47 +01:00
										 |  |  |             def test_skip_me(self): | 
					
						
							|  |  |  |                 with self.subTest(a=1): | 
					
						
							|  |  |  |                     with self.subTest(b=2): | 
					
						
							|  |  |  |                         self.skipTest("skip 1") | 
					
						
							|  |  |  |                     self.skipTest("skip 2") | 
					
						
							|  |  |  |                 self.skipTest("skip 3") | 
					
						
							|  |  |  |         events = [] | 
					
						
							|  |  |  |         result = LoggingResult(events) | 
					
						
							|  |  |  |         test = Foo("test_skip_me") | 
					
						
							| 
									
										
										
										
											2021-08-30 16:16:25 +03:00
										 |  |  |         self.assertIs(test.run(result), result) | 
					
						
							| 
									
										
										
										
											2013-03-20 20:16:47 +01:00
										 |  |  |         self.assertEqual(events, ['startTest', 'addSkip', 'addSkip', | 
					
						
							|  |  |  |                                   'addSkip', 'stopTest']) | 
					
						
							|  |  |  |         self.assertEqual(len(result.skipped), 3) | 
					
						
							|  |  |  |         subtest, msg = result.skipped[0] | 
					
						
							|  |  |  |         self.assertEqual(msg, "skip 1") | 
					
						
							|  |  |  |         self.assertIsInstance(subtest, unittest.TestCase) | 
					
						
							|  |  |  |         self.assertIsNot(subtest, test) | 
					
						
							|  |  |  |         subtest, msg = result.skipped[1] | 
					
						
							|  |  |  |         self.assertEqual(msg, "skip 2") | 
					
						
							|  |  |  |         self.assertIsInstance(subtest, unittest.TestCase) | 
					
						
							|  |  |  |         self.assertIsNot(subtest, test) | 
					
						
							|  |  |  |         self.assertEqual(result.skipped[2], (test, "skip 3")) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-22 10:33:52 +03:00
										 |  |  |         events = [] | 
					
						
							| 
									
										
										
										
											2021-08-30 16:16:25 +03:00
										 |  |  |         result = test.run() | 
					
						
							| 
									
										
										
										
											2021-08-22 10:33:52 +03:00
										 |  |  |         self.assertEqual(events, | 
					
						
							|  |  |  |                          ['startTestRun', 'startTest', 'addSkip', 'addSkip', | 
					
						
							|  |  |  |                           'addSkip', 'stopTest', 'stopTestRun']) | 
					
						
							| 
									
										
										
										
											2021-08-30 16:16:25 +03:00
										 |  |  |         self.assertEqual([msg for subtest, msg in result.skipped], | 
					
						
							|  |  |  |                          ['skip 1', 'skip 2', 'skip 3']) | 
					
						
							| 
									
										
										
										
											2021-08-22 10:33:52 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |     def test_skipping_decorators(self): | 
					
						
							|  |  |  |         op_table = ((unittest.skipUnless, False, True), | 
					
						
							|  |  |  |                     (unittest.skipIf, True, False)) | 
					
						
							|  |  |  |         for deco, do_skip, dont_skip in op_table: | 
					
						
							|  |  |  |             class Foo(unittest.TestCase): | 
					
						
							| 
									
										
										
										
											2021-08-22 10:33:52 +03:00
										 |  |  |                 def defaultTestResult(self): | 
					
						
							|  |  |  |                     return LoggingResult(events) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |                 @deco(do_skip, "testing") | 
					
						
							|  |  |  |                 def test_skip(self): pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 @deco(dont_skip, "testing") | 
					
						
							|  |  |  |                 def test_dont_skip(self): pass | 
					
						
							|  |  |  |             test_do_skip = Foo("test_skip") | 
					
						
							|  |  |  |             test_dont_skip = Foo("test_dont_skip") | 
					
						
							| 
									
										
										
										
											2021-08-22 10:33:52 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |             suite = unittest.TestSuite([test_do_skip, test_dont_skip]) | 
					
						
							|  |  |  |             events = [] | 
					
						
							|  |  |  |             result = LoggingResult(events) | 
					
						
							| 
									
										
										
										
											2021-08-30 16:16:25 +03:00
										 |  |  |             self.assertIs(suite.run(result), result) | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |             self.assertEqual(len(result.skipped), 1) | 
					
						
							| 
									
										
										
										
											2024-02-04 17:27:42 +02:00
										 |  |  |             expected = ['startTest', 'addSkip', 'stopTest', | 
					
						
							|  |  |  |                         'startTest', 'addSuccess', 'stopTest'] | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |             self.assertEqual(events, expected) | 
					
						
							| 
									
										
										
										
											2024-02-04 17:27:42 +02:00
										 |  |  |             self.assertEqual(result.testsRun, 2) | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |             self.assertEqual(result.skipped, [(test_do_skip, "testing")]) | 
					
						
							|  |  |  |             self.assertTrue(result.wasSuccessful()) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-22 10:33:52 +03:00
										 |  |  |             events = [] | 
					
						
							| 
									
										
										
										
											2021-08-30 16:16:25 +03:00
										 |  |  |             result = test_do_skip.run() | 
					
						
							| 
									
										
										
										
											2024-02-04 17:27:42 +02:00
										 |  |  |             self.assertEqual(events, ['startTestRun', 'startTest', 'addSkip', | 
					
						
							| 
									
										
										
										
											2021-08-22 10:33:52 +03:00
										 |  |  |                                       'stopTest', 'stopTestRun']) | 
					
						
							| 
									
										
										
										
											2021-08-30 16:16:25 +03:00
										 |  |  |             self.assertEqual(result.skipped, [(test_do_skip, "testing")]) | 
					
						
							| 
									
										
										
										
											2021-08-22 10:33:52 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |             events = [] | 
					
						
							| 
									
										
										
										
											2021-08-30 16:16:25 +03:00
										 |  |  |             result = test_dont_skip.run() | 
					
						
							| 
									
										
										
										
											2021-08-22 10:33:52 +03:00
										 |  |  |             self.assertEqual(events, ['startTestRun', 'startTest', 'addSuccess', | 
					
						
							|  |  |  |                                       'stopTest', 'stopTestRun']) | 
					
						
							| 
									
										
										
										
											2021-08-30 16:16:25 +03:00
										 |  |  |             self.assertEqual(result.skipped, []) | 
					
						
							| 
									
										
										
										
											2021-08-22 10:33:52 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |     def test_skip_class(self): | 
					
						
							|  |  |  |         @unittest.skip("testing") | 
					
						
							|  |  |  |         class Foo(unittest.TestCase): | 
					
						
							| 
									
										
										
										
											2021-08-22 10:33:52 +03:00
										 |  |  |             def defaultTestResult(self): | 
					
						
							|  |  |  |                 return LoggingResult(events) | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |             def test_1(self): | 
					
						
							|  |  |  |                 record.append(1) | 
					
						
							| 
									
										
										
										
											2021-08-22 10:33:52 +03:00
										 |  |  |         events = [] | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |         record = [] | 
					
						
							| 
									
										
										
										
											2021-08-22 10:33:52 +03:00
										 |  |  |         result = LoggingResult(events) | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |         test = Foo("test_1") | 
					
						
							|  |  |  |         suite = unittest.TestSuite([test]) | 
					
						
							| 
									
										
										
										
											2021-08-30 16:16:25 +03:00
										 |  |  |         self.assertIs(suite.run(result), result) | 
					
						
							| 
									
										
										
										
											2024-02-04 17:27:42 +02:00
										 |  |  |         self.assertEqual(events, ['startTest', 'addSkip', 'stopTest']) | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |         self.assertEqual(result.skipped, [(test, "testing")]) | 
					
						
							|  |  |  |         self.assertEqual(record, []) | 
					
						
							| 
									
										
										
										
											2021-08-22 10:33:52 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |         events = [] | 
					
						
							| 
									
										
										
										
											2021-08-30 16:16:25 +03:00
										 |  |  |         result = test.run() | 
					
						
							| 
									
										
										
										
											2024-02-04 17:27:42 +02:00
										 |  |  |         self.assertEqual(events, ['startTestRun', 'startTest', 'addSkip', | 
					
						
							| 
									
										
										
										
											2021-08-22 10:33:52 +03:00
										 |  |  |                                   'stopTest', 'stopTestRun']) | 
					
						
							| 
									
										
										
										
											2021-08-30 16:16:25 +03:00
										 |  |  |         self.assertEqual(result.skipped, [(test, "testing")]) | 
					
						
							| 
									
										
										
										
											2021-08-22 10:33:52 +03:00
										 |  |  |         self.assertEqual(record, []) | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-25 14:56:46 +02:00
										 |  |  |     def test_skip_non_unittest_class(self): | 
					
						
							|  |  |  |         @unittest.skip("testing") | 
					
						
							|  |  |  |         class Mixin: | 
					
						
							|  |  |  |             def test_1(self): | 
					
						
							|  |  |  |                 record.append(1) | 
					
						
							|  |  |  |         class Foo(Mixin, unittest.TestCase): | 
					
						
							|  |  |  |             pass | 
					
						
							|  |  |  |         record = [] | 
					
						
							|  |  |  |         result = unittest.TestResult() | 
					
						
							|  |  |  |         test = Foo("test_1") | 
					
						
							|  |  |  |         suite = unittest.TestSuite([test]) | 
					
						
							| 
									
										
										
										
											2021-08-30 16:16:25 +03:00
										 |  |  |         self.assertIs(suite.run(result), result) | 
					
						
							| 
									
										
										
										
											2012-04-25 14:56:46 +02:00
										 |  |  |         self.assertEqual(result.skipped, [(test, "testing")]) | 
					
						
							|  |  |  |         self.assertEqual(record, []) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-05 10:34:14 +03:00
										 |  |  |     def test_skip_in_setup(self): | 
					
						
							|  |  |  |         class Foo(unittest.TestCase): | 
					
						
							|  |  |  |             def setUp(self): | 
					
						
							|  |  |  |                 self.skipTest("skip") | 
					
						
							|  |  |  |             def test_skip_me(self): | 
					
						
							|  |  |  |                 self.fail("shouldn't come here") | 
					
						
							|  |  |  |         events = [] | 
					
						
							|  |  |  |         result = LoggingResult(events) | 
					
						
							|  |  |  |         test = Foo("test_skip_me") | 
					
						
							|  |  |  |         self.assertIs(test.run(result), result) | 
					
						
							|  |  |  |         self.assertEqual(events, ['startTest', 'addSkip', 'stopTest']) | 
					
						
							|  |  |  |         self.assertEqual(result.skipped, [(test, "skip")]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_skip_in_cleanup(self): | 
					
						
							|  |  |  |         class Foo(unittest.TestCase): | 
					
						
							|  |  |  |             def test_skip_me(self): | 
					
						
							|  |  |  |                 pass | 
					
						
							|  |  |  |             def tearDown(self): | 
					
						
							|  |  |  |                 self.skipTest("skip") | 
					
						
							|  |  |  |         events = [] | 
					
						
							|  |  |  |         result = LoggingResult(events) | 
					
						
							|  |  |  |         test = Foo("test_skip_me") | 
					
						
							|  |  |  |         self.assertIs(test.run(result), result) | 
					
						
							|  |  |  |         self.assertEqual(events, ['startTest', 'addSkip', 'stopTest']) | 
					
						
							|  |  |  |         self.assertEqual(result.skipped, [(test, "skip")]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_failure_and_skip_in_cleanup(self): | 
					
						
							|  |  |  |         class Foo(unittest.TestCase): | 
					
						
							|  |  |  |             def test_skip_me(self): | 
					
						
							|  |  |  |                 self.fail("fail") | 
					
						
							|  |  |  |             def tearDown(self): | 
					
						
							|  |  |  |                 self.skipTest("skip") | 
					
						
							|  |  |  |         events = [] | 
					
						
							|  |  |  |         result = LoggingResult(events) | 
					
						
							|  |  |  |         test = Foo("test_skip_me") | 
					
						
							|  |  |  |         self.assertIs(test.run(result), result) | 
					
						
							| 
									
										
										
										
											2021-09-19 15:24:38 +03:00
										 |  |  |         self.assertEqual(events, ['startTest', 'addFailure', 'addSkip', 'stopTest']) | 
					
						
							| 
									
										
										
										
											2021-09-05 10:34:14 +03:00
										 |  |  |         self.assertEqual(result.skipped, [(test, "skip")]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_skipping_and_fail_in_cleanup(self): | 
					
						
							|  |  |  |         class Foo(unittest.TestCase): | 
					
						
							|  |  |  |             def test_skip_me(self): | 
					
						
							|  |  |  |                 self.skipTest("skip") | 
					
						
							|  |  |  |             def tearDown(self): | 
					
						
							|  |  |  |                 self.fail("fail") | 
					
						
							|  |  |  |         events = [] | 
					
						
							|  |  |  |         result = LoggingResult(events) | 
					
						
							|  |  |  |         test = Foo("test_skip_me") | 
					
						
							|  |  |  |         self.assertIs(test.run(result), result) | 
					
						
							|  |  |  |         self.assertEqual(events, ['startTest', 'addSkip', 'addFailure', 'stopTest']) | 
					
						
							|  |  |  |         self.assertEqual(result.skipped, [(test, "skip")]) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |     def test_expected_failure(self): | 
					
						
							|  |  |  |         class Foo(unittest.TestCase): | 
					
						
							|  |  |  |             @unittest.expectedFailure | 
					
						
							|  |  |  |             def test_die(self): | 
					
						
							|  |  |  |                 self.fail("help me!") | 
					
						
							|  |  |  |         events = [] | 
					
						
							|  |  |  |         result = LoggingResult(events) | 
					
						
							|  |  |  |         test = Foo("test_die") | 
					
						
							| 
									
										
										
										
											2021-08-30 16:16:25 +03:00
										 |  |  |         self.assertIs(test.run(result), result) | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |         self.assertEqual(events, | 
					
						
							|  |  |  |                          ['startTest', 'addExpectedFailure', 'stopTest']) | 
					
						
							| 
									
										
										
										
											2021-09-05 10:34:14 +03:00
										 |  |  |         self.assertFalse(result.failures) | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |         self.assertEqual(result.expectedFailures[0][0], test) | 
					
						
							| 
									
										
										
										
											2021-09-05 10:34:14 +03:00
										 |  |  |         self.assertFalse(result.unexpectedSuccesses) | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |         self.assertTrue(result.wasSuccessful()) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-28 10:34:51 +12:00
										 |  |  |     def test_expected_failure_with_wrapped_class(self): | 
					
						
							|  |  |  |         @unittest.expectedFailure | 
					
						
							|  |  |  |         class Foo(unittest.TestCase): | 
					
						
							|  |  |  |             def test_1(self): | 
					
						
							|  |  |  |                 self.assertTrue(False) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         events = [] | 
					
						
							|  |  |  |         result = LoggingResult(events) | 
					
						
							|  |  |  |         test = Foo("test_1") | 
					
						
							| 
									
										
										
										
											2021-08-30 16:16:25 +03:00
										 |  |  |         self.assertIs(test.run(result), result) | 
					
						
							| 
									
										
										
										
											2015-08-28 10:34:51 +12:00
										 |  |  |         self.assertEqual(events, | 
					
						
							|  |  |  |                          ['startTest', 'addExpectedFailure', 'stopTest']) | 
					
						
							| 
									
										
										
										
											2021-09-05 10:34:14 +03:00
										 |  |  |         self.assertFalse(result.failures) | 
					
						
							| 
									
										
										
										
											2015-08-28 10:34:51 +12:00
										 |  |  |         self.assertEqual(result.expectedFailures[0][0], test) | 
					
						
							| 
									
										
										
										
											2021-09-05 10:34:14 +03:00
										 |  |  |         self.assertFalse(result.unexpectedSuccesses) | 
					
						
							| 
									
										
										
										
											2015-08-28 10:34:51 +12:00
										 |  |  |         self.assertTrue(result.wasSuccessful()) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_expected_failure_with_wrapped_subclass(self): | 
					
						
							|  |  |  |         class Foo(unittest.TestCase): | 
					
						
							|  |  |  |             def test_1(self): | 
					
						
							|  |  |  |                 self.assertTrue(False) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         @unittest.expectedFailure | 
					
						
							|  |  |  |         class Bar(Foo): | 
					
						
							|  |  |  |             pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         events = [] | 
					
						
							|  |  |  |         result = LoggingResult(events) | 
					
						
							|  |  |  |         test = Bar("test_1") | 
					
						
							| 
									
										
										
										
											2021-08-30 16:16:25 +03:00
										 |  |  |         self.assertIs(test.run(result), result) | 
					
						
							| 
									
										
										
										
											2015-08-28 10:34:51 +12:00
										 |  |  |         self.assertEqual(events, | 
					
						
							|  |  |  |                          ['startTest', 'addExpectedFailure', 'stopTest']) | 
					
						
							| 
									
										
										
										
											2021-09-05 10:34:14 +03:00
										 |  |  |         self.assertFalse(result.failures) | 
					
						
							| 
									
										
										
										
											2015-08-28 10:34:51 +12:00
										 |  |  |         self.assertEqual(result.expectedFailures[0][0], test) | 
					
						
							| 
									
										
										
										
											2021-09-05 10:34:14 +03:00
										 |  |  |         self.assertFalse(result.unexpectedSuccesses) | 
					
						
							| 
									
										
										
										
											2015-08-28 10:34:51 +12:00
										 |  |  |         self.assertTrue(result.wasSuccessful()) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-20 20:16:47 +01:00
										 |  |  |     def test_expected_failure_subtests(self): | 
					
						
							|  |  |  |         # A failure in any subtest counts as the expected failure of the | 
					
						
							|  |  |  |         # whole test. | 
					
						
							|  |  |  |         class Foo(unittest.TestCase): | 
					
						
							|  |  |  |             @unittest.expectedFailure | 
					
						
							|  |  |  |             def test_die(self): | 
					
						
							|  |  |  |                 with self.subTest(): | 
					
						
							|  |  |  |                     # This one succeeds | 
					
						
							|  |  |  |                     pass | 
					
						
							|  |  |  |                 with self.subTest(): | 
					
						
							|  |  |  |                     self.fail("help me!") | 
					
						
							|  |  |  |                 with self.subTest(): | 
					
						
							|  |  |  |                     # This one doesn't get executed | 
					
						
							|  |  |  |                     self.fail("shouldn't come here") | 
					
						
							|  |  |  |         events = [] | 
					
						
							|  |  |  |         result = LoggingResult(events) | 
					
						
							|  |  |  |         test = Foo("test_die") | 
					
						
							| 
									
										
										
										
											2021-08-30 16:16:25 +03:00
										 |  |  |         self.assertIs(test.run(result), result) | 
					
						
							| 
									
										
										
										
											2013-03-20 20:16:47 +01:00
										 |  |  |         self.assertEqual(events, | 
					
						
							|  |  |  |                          ['startTest', 'addSubTestSuccess', | 
					
						
							|  |  |  |                           'addExpectedFailure', 'stopTest']) | 
					
						
							| 
									
										
										
										
											2021-09-05 10:34:14 +03:00
										 |  |  |         self.assertFalse(result.failures) | 
					
						
							| 
									
										
										
										
											2013-03-20 20:16:47 +01:00
										 |  |  |         self.assertEqual(len(result.expectedFailures), 1) | 
					
						
							|  |  |  |         self.assertIs(result.expectedFailures[0][0], test) | 
					
						
							| 
									
										
										
										
											2021-09-05 10:34:14 +03:00
										 |  |  |         self.assertFalse(result.unexpectedSuccesses) | 
					
						
							|  |  |  |         self.assertTrue(result.wasSuccessful()) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_expected_failure_and_fail_in_cleanup(self): | 
					
						
							|  |  |  |         class Foo(unittest.TestCase): | 
					
						
							|  |  |  |             @unittest.expectedFailure | 
					
						
							|  |  |  |             def test_die(self): | 
					
						
							|  |  |  |                 self.fail("help me!") | 
					
						
							|  |  |  |             def tearDown(self): | 
					
						
							|  |  |  |                 self.fail("bad tearDown") | 
					
						
							|  |  |  |         events = [] | 
					
						
							|  |  |  |         result = LoggingResult(events) | 
					
						
							|  |  |  |         test = Foo("test_die") | 
					
						
							|  |  |  |         self.assertIs(test.run(result), result) | 
					
						
							|  |  |  |         self.assertEqual(events, | 
					
						
							|  |  |  |                          ['startTest', 'addFailure', 'stopTest']) | 
					
						
							|  |  |  |         self.assertEqual(len(result.failures), 1) | 
					
						
							|  |  |  |         self.assertIn('AssertionError: bad tearDown', result.failures[0][1]) | 
					
						
							|  |  |  |         self.assertFalse(result.expectedFailures) | 
					
						
							|  |  |  |         self.assertFalse(result.unexpectedSuccesses) | 
					
						
							|  |  |  |         self.assertFalse(result.wasSuccessful()) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_expected_failure_and_skip_in_cleanup(self): | 
					
						
							|  |  |  |         class Foo(unittest.TestCase): | 
					
						
							|  |  |  |             @unittest.expectedFailure | 
					
						
							|  |  |  |             def test_die(self): | 
					
						
							|  |  |  |                 self.fail("help me!") | 
					
						
							|  |  |  |             def tearDown(self): | 
					
						
							|  |  |  |                 self.skipTest("skip") | 
					
						
							|  |  |  |         events = [] | 
					
						
							|  |  |  |         result = LoggingResult(events) | 
					
						
							|  |  |  |         test = Foo("test_die") | 
					
						
							|  |  |  |         self.assertIs(test.run(result), result) | 
					
						
							|  |  |  |         self.assertEqual(events, | 
					
						
							|  |  |  |                          ['startTest', 'addSkip', 'stopTest']) | 
					
						
							|  |  |  |         self.assertFalse(result.failures) | 
					
						
							|  |  |  |         self.assertFalse(result.expectedFailures) | 
					
						
							|  |  |  |         self.assertFalse(result.unexpectedSuccesses) | 
					
						
							|  |  |  |         self.assertEqual(result.skipped, [(test, "skip")]) | 
					
						
							| 
									
										
										
										
											2013-03-20 20:16:47 +01:00
										 |  |  |         self.assertTrue(result.wasSuccessful()) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |     def test_unexpected_success(self): | 
					
						
							|  |  |  |         class Foo(unittest.TestCase): | 
					
						
							|  |  |  |             @unittest.expectedFailure | 
					
						
							|  |  |  |             def test_die(self): | 
					
						
							|  |  |  |                 pass | 
					
						
							|  |  |  |         events = [] | 
					
						
							|  |  |  |         result = LoggingResult(events) | 
					
						
							|  |  |  |         test = Foo("test_die") | 
					
						
							| 
									
										
										
										
											2021-08-30 16:16:25 +03:00
										 |  |  |         self.assertIs(test.run(result), result) | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |         self.assertEqual(events, | 
					
						
							|  |  |  |                          ['startTest', 'addUnexpectedSuccess', 'stopTest']) | 
					
						
							|  |  |  |         self.assertFalse(result.failures) | 
					
						
							| 
									
										
										
										
											2021-09-05 10:34:14 +03:00
										 |  |  |         self.assertFalse(result.expectedFailures) | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |         self.assertEqual(result.unexpectedSuccesses, [test]) | 
					
						
							| 
									
										
										
										
											2014-01-20 01:11:18 -08:00
										 |  |  |         self.assertFalse(result.wasSuccessful()) | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-20 20:16:47 +01:00
										 |  |  |     def test_unexpected_success_subtests(self): | 
					
						
							|  |  |  |         # Success in all subtests counts as the unexpected success of | 
					
						
							|  |  |  |         # the whole test. | 
					
						
							|  |  |  |         class Foo(unittest.TestCase): | 
					
						
							|  |  |  |             @unittest.expectedFailure | 
					
						
							|  |  |  |             def test_die(self): | 
					
						
							|  |  |  |                 with self.subTest(): | 
					
						
							|  |  |  |                     # This one succeeds | 
					
						
							|  |  |  |                     pass | 
					
						
							|  |  |  |                 with self.subTest(): | 
					
						
							|  |  |  |                     # So does this one | 
					
						
							|  |  |  |                     pass | 
					
						
							|  |  |  |         events = [] | 
					
						
							|  |  |  |         result = LoggingResult(events) | 
					
						
							|  |  |  |         test = Foo("test_die") | 
					
						
							| 
									
										
										
										
											2021-08-30 16:16:25 +03:00
										 |  |  |         self.assertIs(test.run(result), result) | 
					
						
							| 
									
										
										
										
											2013-03-20 20:16:47 +01:00
										 |  |  |         self.assertEqual(events, | 
					
						
							|  |  |  |                          ['startTest', | 
					
						
							|  |  |  |                           'addSubTestSuccess', 'addSubTestSuccess', | 
					
						
							|  |  |  |                           'addUnexpectedSuccess', 'stopTest']) | 
					
						
							|  |  |  |         self.assertFalse(result.failures) | 
					
						
							| 
									
										
										
										
											2021-09-05 10:34:14 +03:00
										 |  |  |         self.assertFalse(result.expectedFailures) | 
					
						
							| 
									
										
										
										
											2013-03-20 20:16:47 +01:00
										 |  |  |         self.assertEqual(result.unexpectedSuccesses, [test]) | 
					
						
							| 
									
										
										
										
											2014-01-20 01:11:18 -08:00
										 |  |  |         self.assertFalse(result.wasSuccessful()) | 
					
						
							| 
									
										
										
										
											2013-03-20 20:16:47 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-05 10:34:14 +03:00
										 |  |  |     def test_unexpected_success_and_fail_in_cleanup(self): | 
					
						
							|  |  |  |         class Foo(unittest.TestCase): | 
					
						
							|  |  |  |             @unittest.expectedFailure | 
					
						
							|  |  |  |             def test_die(self): | 
					
						
							|  |  |  |                 pass | 
					
						
							|  |  |  |             def tearDown(self): | 
					
						
							|  |  |  |                 self.fail("bad tearDown") | 
					
						
							|  |  |  |         events = [] | 
					
						
							|  |  |  |         result = LoggingResult(events) | 
					
						
							|  |  |  |         test = Foo("test_die") | 
					
						
							|  |  |  |         self.assertIs(test.run(result), result) | 
					
						
							|  |  |  |         self.assertEqual(events, | 
					
						
							|  |  |  |                          ['startTest', 'addFailure', 'stopTest']) | 
					
						
							|  |  |  |         self.assertEqual(len(result.failures), 1) | 
					
						
							|  |  |  |         self.assertIn('AssertionError: bad tearDown', result.failures[0][1]) | 
					
						
							|  |  |  |         self.assertFalse(result.expectedFailures) | 
					
						
							|  |  |  |         self.assertFalse(result.unexpectedSuccesses) | 
					
						
							|  |  |  |         self.assertFalse(result.wasSuccessful()) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_unexpected_success_and_skip_in_cleanup(self): | 
					
						
							|  |  |  |         class Foo(unittest.TestCase): | 
					
						
							|  |  |  |             @unittest.expectedFailure | 
					
						
							|  |  |  |             def test_die(self): | 
					
						
							|  |  |  |                 pass | 
					
						
							|  |  |  |             def tearDown(self): | 
					
						
							|  |  |  |                 self.skipTest("skip") | 
					
						
							|  |  |  |         events = [] | 
					
						
							|  |  |  |         result = LoggingResult(events) | 
					
						
							|  |  |  |         test = Foo("test_die") | 
					
						
							|  |  |  |         self.assertIs(test.run(result), result) | 
					
						
							|  |  |  |         self.assertEqual(events, | 
					
						
							|  |  |  |                          ['startTest', 'addSkip', 'stopTest']) | 
					
						
							|  |  |  |         self.assertFalse(result.failures) | 
					
						
							|  |  |  |         self.assertFalse(result.expectedFailures) | 
					
						
							|  |  |  |         self.assertFalse(result.unexpectedSuccesses) | 
					
						
							|  |  |  |         self.assertEqual(result.skipped, [(test, "skip")]) | 
					
						
							|  |  |  |         self.assertTrue(result.wasSuccessful()) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |     def test_skip_doesnt_run_setup(self): | 
					
						
							|  |  |  |         class Foo(unittest.TestCase): | 
					
						
							|  |  |  |             wasSetUp = False | 
					
						
							|  |  |  |             wasTornDown = False | 
					
						
							|  |  |  |             def setUp(self): | 
					
						
							|  |  |  |                 Foo.wasSetUp = True | 
					
						
							|  |  |  |             def tornDown(self): | 
					
						
							|  |  |  |                 Foo.wasTornDown = True | 
					
						
							|  |  |  |             @unittest.skip('testing') | 
					
						
							|  |  |  |             def test_1(self): | 
					
						
							|  |  |  |                 pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         result = unittest.TestResult() | 
					
						
							|  |  |  |         test = Foo("test_1") | 
					
						
							|  |  |  |         suite = unittest.TestSuite([test]) | 
					
						
							| 
									
										
										
										
											2021-08-30 16:16:25 +03:00
										 |  |  |         self.assertIs(suite.run(result), result) | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |         self.assertEqual(result.skipped, [(test, "testing")]) | 
					
						
							|  |  |  |         self.assertFalse(Foo.wasSetUp) | 
					
						
							|  |  |  |         self.assertFalse(Foo.wasTornDown) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_decorated_skip(self): | 
					
						
							|  |  |  |         def decorator(func): | 
					
						
							|  |  |  |             def inner(*a): | 
					
						
							|  |  |  |                 return func(*a) | 
					
						
							|  |  |  |             return inner | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         class Foo(unittest.TestCase): | 
					
						
							|  |  |  |             @decorator | 
					
						
							|  |  |  |             @unittest.skip('testing') | 
					
						
							|  |  |  |             def test_1(self): | 
					
						
							|  |  |  |                 pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         result = unittest.TestResult() | 
					
						
							|  |  |  |         test = Foo("test_1") | 
					
						
							|  |  |  |         suite = unittest.TestSuite([test]) | 
					
						
							| 
									
										
										
										
											2021-08-30 16:16:25 +03:00
										 |  |  |         self.assertIs(suite.run(result), result) | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |         self.assertEqual(result.skipped, [(test, "testing")]) | 
					
						
							| 
									
										
										
										
											2013-09-13 23:52:46 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-09 22:06:48 +08:00
										 |  |  |     def test_skip_without_reason(self): | 
					
						
							|  |  |  |         class Foo(unittest.TestCase): | 
					
						
							|  |  |  |             @unittest.skip | 
					
						
							|  |  |  |             def test_1(self): | 
					
						
							|  |  |  |                 pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         result = unittest.TestResult() | 
					
						
							|  |  |  |         test = Foo("test_1") | 
					
						
							|  |  |  |         suite = unittest.TestSuite([test]) | 
					
						
							| 
									
										
										
										
											2021-08-30 16:16:25 +03:00
										 |  |  |         self.assertIs(suite.run(result), result) | 
					
						
							| 
									
										
										
										
											2019-09-09 22:06:48 +08:00
										 |  |  |         self.assertEqual(result.skipped, [(test, "")]) | 
					
						
							| 
									
										
										
										
											2013-09-13 23:52:46 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-18 15:34:22 +03:00
										 |  |  |     def test_debug_skipping(self): | 
					
						
							|  |  |  |         class Foo(unittest.TestCase): | 
					
						
							|  |  |  |             def setUp(self): | 
					
						
							|  |  |  |                 events.append("setUp") | 
					
						
							|  |  |  |             def tearDown(self): | 
					
						
							|  |  |  |                 events.append("tearDown") | 
					
						
							|  |  |  |             def test1(self): | 
					
						
							|  |  |  |                 self.skipTest('skipping exception') | 
					
						
							|  |  |  |                 events.append("test1") | 
					
						
							|  |  |  |             @unittest.skip("skipping decorator") | 
					
						
							|  |  |  |             def test2(self): | 
					
						
							|  |  |  |                 events.append("test2") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         events = [] | 
					
						
							|  |  |  |         test = Foo("test1") | 
					
						
							|  |  |  |         with self.assertRaises(unittest.SkipTest) as cm: | 
					
						
							|  |  |  |             test.debug() | 
					
						
							|  |  |  |         self.assertIn("skipping exception", str(cm.exception)) | 
					
						
							|  |  |  |         self.assertEqual(events, ["setUp"]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         events = [] | 
					
						
							|  |  |  |         test = Foo("test2") | 
					
						
							|  |  |  |         with self.assertRaises(unittest.SkipTest) as cm: | 
					
						
							|  |  |  |             test.debug() | 
					
						
							|  |  |  |         self.assertIn("skipping decorator", str(cm.exception)) | 
					
						
							|  |  |  |         self.assertEqual(events, []) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_debug_skipping_class(self): | 
					
						
							|  |  |  |         @unittest.skip("testing") | 
					
						
							|  |  |  |         class Foo(unittest.TestCase): | 
					
						
							|  |  |  |             def setUp(self): | 
					
						
							|  |  |  |                 events.append("setUp") | 
					
						
							|  |  |  |             def tearDown(self): | 
					
						
							|  |  |  |                 events.append("tearDown") | 
					
						
							|  |  |  |             def test(self): | 
					
						
							|  |  |  |                 events.append("test") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         events = [] | 
					
						
							|  |  |  |         test = Foo("test") | 
					
						
							|  |  |  |         with self.assertRaises(unittest.SkipTest) as cm: | 
					
						
							|  |  |  |             test.debug() | 
					
						
							|  |  |  |         self.assertIn("testing", str(cm.exception)) | 
					
						
							|  |  |  |         self.assertEqual(events, []) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_debug_skipping_subtests(self): | 
					
						
							|  |  |  |         class Foo(unittest.TestCase): | 
					
						
							|  |  |  |             def setUp(self): | 
					
						
							|  |  |  |                 events.append("setUp") | 
					
						
							|  |  |  |             def tearDown(self): | 
					
						
							|  |  |  |                 events.append("tearDown") | 
					
						
							|  |  |  |             def test(self): | 
					
						
							|  |  |  |                 with self.subTest(a=1): | 
					
						
							|  |  |  |                     events.append('subtest') | 
					
						
							|  |  |  |                     self.skipTest("skip subtest") | 
					
						
							|  |  |  |                     events.append('end subtest') | 
					
						
							|  |  |  |                 events.append('end test') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         events = [] | 
					
						
							|  |  |  |         result = LoggingResult(events) | 
					
						
							|  |  |  |         test = Foo("test") | 
					
						
							|  |  |  |         with self.assertRaises(unittest.SkipTest) as cm: | 
					
						
							|  |  |  |             test.debug() | 
					
						
							|  |  |  |         self.assertIn("skip subtest", str(cm.exception)) | 
					
						
							|  |  |  |         self.assertEqual(events, ['setUp', 'subtest']) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-13 23:52:46 +02:00
										 |  |  | if __name__ == "__main__": | 
					
						
							|  |  |  |     unittest.main() |