| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  | import unittest | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from .support import LoggingResult | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Test_FunctionTestCase(unittest.TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # "Return the number of tests represented by the this test object. For | 
					
						
							|  |  |  |     # TestCase instances, this will always be 1" | 
					
						
							|  |  |  |     def test_countTestCases(self): | 
					
						
							|  |  |  |         test = unittest.FunctionTestCase(lambda: None) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.assertEqual(test.countTestCases(), 1) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # "When a setUp() method is defined, the test runner will run that method | 
					
						
							|  |  |  |     # prior to each test. Likewise, if a tearDown() method is defined, the | 
					
						
							|  |  |  |     # test runner will invoke that method after each test. In the example, | 
					
						
							|  |  |  |     # setUp() was used to create a fresh sequence for each test." | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     # Make sure the proper call order is maintained, even if setUp() raises | 
					
						
							|  |  |  |     # an exception. | 
					
						
							|  |  |  |     def test_run_call_order__error_in_setUp(self): | 
					
						
							|  |  |  |         events = [] | 
					
						
							|  |  |  |         result = LoggingResult(events) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def setUp(): | 
					
						
							|  |  |  |             events.append('setUp') | 
					
						
							|  |  |  |             raise RuntimeError('raised by setUp') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def test(): | 
					
						
							|  |  |  |             events.append('test') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def tearDown(): | 
					
						
							|  |  |  |             events.append('tearDown') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         expected = ['startTest', 'setUp', 'addError', 'stopTest'] | 
					
						
							|  |  |  |         unittest.FunctionTestCase(test, setUp, tearDown).run(result) | 
					
						
							|  |  |  |         self.assertEqual(events, expected) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # "When a setUp() method is defined, the test runner will run that method | 
					
						
							|  |  |  |     # prior to each test. Likewise, if a tearDown() method is defined, the | 
					
						
							|  |  |  |     # test runner will invoke that method after each test. In the example, | 
					
						
							|  |  |  |     # setUp() was used to create a fresh sequence for each test." | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     # Make sure the proper call order is maintained, even if the test raises | 
					
						
							|  |  |  |     # an error (as opposed to a failure). | 
					
						
							|  |  |  |     def test_run_call_order__error_in_test(self): | 
					
						
							|  |  |  |         events = [] | 
					
						
							|  |  |  |         result = LoggingResult(events) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def setUp(): | 
					
						
							|  |  |  |             events.append('setUp') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def test(): | 
					
						
							|  |  |  |             events.append('test') | 
					
						
							|  |  |  |             raise RuntimeError('raised by test') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def tearDown(): | 
					
						
							|  |  |  |             events.append('tearDown') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-12-19 03:19:47 +00:00
										 |  |  |         expected = ['startTest', 'setUp', 'test', 'tearDown', | 
					
						
							|  |  |  |                     'addError', 'stopTest'] | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |         unittest.FunctionTestCase(test, setUp, tearDown).run(result) | 
					
						
							|  |  |  |         self.assertEqual(events, expected) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # "When a setUp() method is defined, the test runner will run that method | 
					
						
							|  |  |  |     # prior to each test. Likewise, if a tearDown() method is defined, the | 
					
						
							|  |  |  |     # test runner will invoke that method after each test. In the example, | 
					
						
							|  |  |  |     # setUp() was used to create a fresh sequence for each test." | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     # Make sure the proper call order is maintained, even if the test signals | 
					
						
							|  |  |  |     # a failure (as opposed to an error). | 
					
						
							|  |  |  |     def test_run_call_order__failure_in_test(self): | 
					
						
							|  |  |  |         events = [] | 
					
						
							|  |  |  |         result = LoggingResult(events) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def setUp(): | 
					
						
							|  |  |  |             events.append('setUp') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def test(): | 
					
						
							|  |  |  |             events.append('test') | 
					
						
							|  |  |  |             self.fail('raised by test') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def tearDown(): | 
					
						
							|  |  |  |             events.append('tearDown') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-12-19 03:19:47 +00:00
										 |  |  |         expected = ['startTest', 'setUp', 'test', 'tearDown', | 
					
						
							|  |  |  |                     'addFailure', 'stopTest'] | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |         unittest.FunctionTestCase(test, setUp, tearDown).run(result) | 
					
						
							|  |  |  |         self.assertEqual(events, expected) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # "When a setUp() method is defined, the test runner will run that method | 
					
						
							|  |  |  |     # prior to each test. Likewise, if a tearDown() method is defined, the | 
					
						
							|  |  |  |     # test runner will invoke that method after each test. In the example, | 
					
						
							|  |  |  |     # setUp() was used to create a fresh sequence for each test." | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     # Make sure the proper call order is maintained, even if tearDown() raises | 
					
						
							|  |  |  |     # an exception. | 
					
						
							|  |  |  |     def test_run_call_order__error_in_tearDown(self): | 
					
						
							|  |  |  |         events = [] | 
					
						
							|  |  |  |         result = LoggingResult(events) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def setUp(): | 
					
						
							|  |  |  |             events.append('setUp') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def test(): | 
					
						
							|  |  |  |             events.append('test') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def tearDown(): | 
					
						
							|  |  |  |             events.append('tearDown') | 
					
						
							|  |  |  |             raise RuntimeError('raised by tearDown') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         expected = ['startTest', 'setUp', 'test', 'tearDown', 'addError', | 
					
						
							|  |  |  |                     'stopTest'] | 
					
						
							|  |  |  |         unittest.FunctionTestCase(test, setUp, tearDown).run(result) | 
					
						
							|  |  |  |         self.assertEqual(events, expected) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # "Return a string identifying the specific test case." | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     # Because of the vague nature of the docs, I'm not going to lock this | 
					
						
							|  |  |  |     # test down too much. Really all that can be asserted is that the id() | 
					
						
							|  |  |  |     # will be a string (either 8-byte or unicode -- again, because the docs | 
					
						
							|  |  |  |     # just say "string") | 
					
						
							|  |  |  |     def test_id(self): | 
					
						
							|  |  |  |         test = unittest.FunctionTestCase(lambda: None) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.assertIsInstance(test.id(), str) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # "Returns a one-line description of the test, or None if no description | 
					
						
							|  |  |  |     # has been provided. The default implementation of this method returns | 
					
						
							|  |  |  |     # the first line of the test method's docstring, if available, or None." | 
					
						
							|  |  |  |     def test_shortDescription__no_docstring(self): | 
					
						
							|  |  |  |         test = unittest.FunctionTestCase(lambda: None) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.assertEqual(test.shortDescription(), None) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # "Returns a one-line description of the test, or None if no description | 
					
						
							|  |  |  |     # has been provided. The default implementation of this method returns | 
					
						
							|  |  |  |     # the first line of the test method's docstring, if available, or None." | 
					
						
							|  |  |  |     def test_shortDescription__singleline_docstring(self): | 
					
						
							|  |  |  |         desc = "this tests foo" | 
					
						
							|  |  |  |         test = unittest.FunctionTestCase(lambda: None, description=desc) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.assertEqual(test.shortDescription(), "this tests foo") | 
					
						
							| 
									
										
										
										
											2013-09-13 23:52:46 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == "__main__": | 
					
						
							|  |  |  |     unittest.main() |