14710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport unittest 24710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 34710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport sys 44710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom .support import LoggingResult, TestEquality 54710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 64710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 74710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm### Support code for Test_TestSuite 84710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm################################################################ 94710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass Test(object): 114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Foo(unittest.TestCase): 124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_1(self): pass 134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_2(self): pass 144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_3(self): pass 154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def runTest(self): pass 164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef _mk_TestSuite(*names): 184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return unittest.TestSuite(Test.Foo(n) for n in names) 194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm################################################################ 214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass Test_TestSuite(unittest.TestCase, TestEquality): 244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### Set up attributes needed by inherited tests 264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ################################################################ 274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Used by TestEquality.test_eq 294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm eq_pairs = [(unittest.TestSuite(), unittest.TestSuite()), 304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (unittest.TestSuite(), unittest.TestSuite([])), 314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (_mk_TestSuite('test_1'), _mk_TestSuite('test_1'))] 324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Used by TestEquality.test_ne 344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ne_pairs = [(unittest.TestSuite(), _mk_TestSuite('test_1')), 354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (unittest.TestSuite([]), _mk_TestSuite('test_1')), 364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (_mk_TestSuite('test_1', 'test_2'), _mk_TestSuite('test_1', 'test_3')), 374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (_mk_TestSuite('test_1'), _mk_TestSuite('test_2'))] 384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ################################################################ 404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### /Set up attributes needed by inherited tests 414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### Tests for TestSuite.__init__ 434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ################################################################ 444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "class TestSuite([tests])" 464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # The tests iterable should be optional 484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_init__tests_optional(self): 494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite = unittest.TestSuite() 504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(suite.countTestCases(), 0) 524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "class TestSuite([tests])" 544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # ... 554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "If tests is given, it must be an iterable of individual test cases 564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # or other test suites that will be used to build the suite initially" 574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # TestSuite should deal with empty tests iterables by allowing the 594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # creation of an empty suite 604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_init__empty_tests(self): 614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite = unittest.TestSuite([]) 624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(suite.countTestCases(), 0) 644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "class TestSuite([tests])" 664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # ... 674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "If tests is given, it must be an iterable of individual test cases 684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # or other test suites that will be used to build the suite initially" 694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # TestSuite should allow any iterable to provide tests 714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_init__tests_from_any_iterable(self): 724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def tests(): 734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm yield unittest.FunctionTestCase(lambda: None) 744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm yield unittest.FunctionTestCase(lambda: None) 754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite_1 = unittest.TestSuite(tests()) 774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(suite_1.countTestCases(), 2) 784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite_2 = unittest.TestSuite(suite_1) 804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(suite_2.countTestCases(), 2) 814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite_3 = unittest.TestSuite(set(suite_1)) 834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(suite_3.countTestCases(), 2) 844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "class TestSuite([tests])" 864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # ... 874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "If tests is given, it must be an iterable of individual test cases 884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # or other test suites that will be used to build the suite initially" 894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Does TestSuite() also allow other TestSuite() instances to be present 914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # in the tests iterable? 924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_init__TestSuite_instances_in_tests(self): 934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def tests(): 944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ftc = unittest.FunctionTestCase(lambda: None) 954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm yield unittest.TestSuite([ftc]) 964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm yield unittest.FunctionTestCase(lambda: None) 974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite = unittest.TestSuite(tests()) 994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(suite.countTestCases(), 2) 1004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ################################################################ 1024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ### /Tests for TestSuite.__init__ 1034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Container types should support the iter protocol 1054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_iter(self): 1064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test1 = unittest.FunctionTestCase(lambda: None) 1074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test2 = unittest.FunctionTestCase(lambda: None) 1084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite = unittest.TestSuite((test1, test2)) 1094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(list(suite), [test1, test2]) 1114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "Return the number of tests represented by the this test object. 1134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # ...this method is also implemented by the TestSuite class, which can 1144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # return larger [greater than 1] values" 1154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 1164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Presumably an empty TestSuite returns 0? 1174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_countTestCases_zero_simple(self): 1184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite = unittest.TestSuite() 1194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(suite.countTestCases(), 0) 1214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "Return the number of tests represented by the this test object. 1234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # ...this method is also implemented by the TestSuite class, which can 1244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # return larger [greater than 1] values" 1254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 1264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Presumably an empty TestSuite (even if it contains other empty 1274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # TestSuite instances) returns 0? 1284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_countTestCases_zero_nested(self): 1294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Test1(unittest.TestCase): 1304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test(self): 1314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 1324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite = unittest.TestSuite([unittest.TestSuite()]) 1344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(suite.countTestCases(), 0) 1364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "Return the number of tests represented by the this test object. 1384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # ...this method is also implemented by the TestSuite class, which can 1394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # return larger [greater than 1] values" 1404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_countTestCases_simple(self): 1414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test1 = unittest.FunctionTestCase(lambda: None) 1424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test2 = unittest.FunctionTestCase(lambda: None) 1434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite = unittest.TestSuite((test1, test2)) 1444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(suite.countTestCases(), 2) 1464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "Return the number of tests represented by the this test object. 1484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # ...this method is also implemented by the TestSuite class, which can 1494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # return larger [greater than 1] values" 1504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 1514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Make sure this holds for nested TestSuite instances, too 1524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_countTestCases_nested(self): 1534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Test1(unittest.TestCase): 1544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test1(self): pass 1554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test2(self): pass 1564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test2 = unittest.FunctionTestCase(lambda: None) 1584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test3 = unittest.FunctionTestCase(lambda: None) 1594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm child = unittest.TestSuite((Test1('test2'), test2)) 1604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parent = unittest.TestSuite((test3, child, Test1('test1'))) 1614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(parent.countTestCases(), 4) 1634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "Run the tests associated with this suite, collecting the result into 1654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # the test result object passed as result." 1664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 1674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # And if there are no tests? What then? 1684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_run__empty_suite(self): 1694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm events = [] 1704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = LoggingResult(events) 1714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite = unittest.TestSuite() 1734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite.run(result) 1754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(events, []) 1774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "Note that unlike TestCase.run(), TestSuite.run() requires the 1794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "result object to be passed in." 1804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_run__requires_result(self): 1814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite = unittest.TestSuite() 1824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 1844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite.run() 1854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except TypeError: 1864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 1874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: 1884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.fail("Failed to raise TypeError") 1894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "Run the tests associated with this suite, collecting the result into 1914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # the test result object passed as result." 1924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_run(self): 1934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm events = [] 1944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = LoggingResult(events) 1954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class LoggingCase(unittest.TestCase): 1974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def run(self, result): 1984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm events.append('run %s' % self._testMethodName) 1994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test1(self): pass 2014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test2(self): pass 2024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm tests = [LoggingCase('test1'), LoggingCase('test2')] 2044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm unittest.TestSuite(tests).run(result) 2064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(events, ['run test1', 'run test2']) 2084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "Add a TestCase ... to the suite" 2104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_addTest__TestCase(self): 2114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Foo(unittest.TestCase): 2124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test(self): pass 2134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test = Foo('test') 2154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite = unittest.TestSuite() 2164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite.addTest(test) 2184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(suite.countTestCases(), 1) 2204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(list(suite), [test]) 2214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "Add a ... TestSuite to the suite" 2234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_addTest__TestSuite(self): 2244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Foo(unittest.TestCase): 2254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test(self): pass 2264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite_2 = unittest.TestSuite([Foo('test')]) 2284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite = unittest.TestSuite() 2304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite.addTest(suite_2) 2314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(suite.countTestCases(), 1) 2334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(list(suite), [suite_2]) 2344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "Add all the tests from an iterable of TestCase and TestSuite 2364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # instances to this test suite." 2374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 2384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "This is equivalent to iterating over tests, calling addTest() for 2394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # each element" 2404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_addTests(self): 2414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Foo(unittest.TestCase): 2424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_1(self): pass 2434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_2(self): pass 2444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test_1 = Foo('test_1') 2464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test_2 = Foo('test_2') 2474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm inner_suite = unittest.TestSuite([test_2]) 2484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def gen(): 2504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm yield test_1 2514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm yield test_2 2524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm yield inner_suite 2534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite_1 = unittest.TestSuite() 2554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite_1.addTests(gen()) 2564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(list(suite_1), list(gen())) 2584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "This is equivalent to iterating over tests, calling addTest() for 2604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # each element" 2614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite_2 = unittest.TestSuite() 2624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for t in gen(): 2634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite_2.addTest(t) 2644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(suite_1, suite_2) 2664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "Add all the tests from an iterable of TestCase and TestSuite 2684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # instances to this test suite." 2694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 2704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # What happens if it doesn't get an iterable? 2714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_addTest__noniterable(self): 2724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite = unittest.TestSuite() 2734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 2754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite.addTests(5) 2764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except TypeError: 2774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 2784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: 2794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.fail("Failed to raise TypeError") 2804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_addTest__noncallable(self): 2824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite = unittest.TestSuite() 2834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(TypeError, suite.addTest, 5) 2844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_addTest__casesuiteclass(self): 2864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite = unittest.TestSuite() 2874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(TypeError, suite.addTest, Test_TestSuite) 2884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(TypeError, suite.addTest, unittest.TestSuite) 2894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_addTests__string(self): 2914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite = unittest.TestSuite() 2924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(TypeError, suite.addTests, "foo") 2934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_function_in_suite(self): 2954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def f(_): 2964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 2974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite = unittest.TestSuite() 2984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite.addTest(f) 2994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # when the bug is fixed this line will not crash 3014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite.run(unittest.TestResult()) 3024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_basetestsuite(self): 3064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Test(unittest.TestCase): 3074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm wasSetUp = False 3084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm wasTornDown = False 3094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm @classmethod 3104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def setUpClass(cls): 3114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cls.wasSetUp = True 3124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm @classmethod 3134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def tearDownClass(cls): 3144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cls.wasTornDown = True 3154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testPass(self): 3164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 3174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testFail(self): 3184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm fail 3194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Module(object): 3204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm wasSetUp = False 3214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm wasTornDown = False 3224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm @staticmethod 3234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def setUpModule(): 3244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Module.wasSetUp = True 3254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm @staticmethod 3264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def tearDownModule(): 3274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Module.wasTornDown = True 3284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Test.__module__ = 'Module' 3304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm sys.modules['Module'] = Module 3314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.addCleanup(sys.modules.pop, 'Module') 3324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite = unittest.BaseTestSuite() 3344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite.addTests([Test('testPass'), Test('testFail')]) 3354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(suite.countTestCases(), 2) 3364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = unittest.TestResult() 3384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite.run(result) 3394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertFalse(Module.wasSetUp) 3404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertFalse(Module.wasTornDown) 3414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertFalse(Test.wasSetUp) 3424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertFalse(Test.wasTornDown) 3434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(len(result.errors), 1) 3444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(len(result.failures), 0) 3454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(result.testsRun, 2) 3464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_overriding_call(self): 3494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class MySuite(unittest.TestSuite): 3504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm called = False 3514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __call__(self, *args, **kw): 3524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.called = True 3534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm unittest.TestSuite.__call__(self, *args, **kw) 3544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite = MySuite() 3564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = unittest.TestResult() 3574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm wrapper = unittest.TestSuite() 3584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm wrapper.addTest(suite) 3594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm wrapper(result) 3604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTrue(suite.called) 3614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # reusing results should be permitted even if abominable 3634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertFalse(result._testRunEntered) 3644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmif __name__ == '__main__': 3674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm unittest.main() 368