]> git.proxmox.com Git - mirror_edk2.git/blame - AppPkg/Applications/Python/Python-2.7.2/Lib/unittest/test/test_setups.py
EmbeddedPkg: Extend NvVarStoreFormattedLib LIBRARY_CLASS
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.2 / Lib / unittest / test / test_setups.py
CommitLineData
4710c53d 1import sys\r
2\r
3from cStringIO import StringIO\r
4\r
5import unittest\r
6\r
7\r
8def resultFactory(*_):\r
9 return unittest.TestResult()\r
10\r
11\r
12class TestSetups(unittest.TestCase):\r
13\r
14 def getRunner(self):\r
15 return unittest.TextTestRunner(resultclass=resultFactory,\r
16 stream=StringIO())\r
17 def runTests(self, *cases):\r
18 suite = unittest.TestSuite()\r
19 for case in cases:\r
20 tests = unittest.defaultTestLoader.loadTestsFromTestCase(case)\r
21 suite.addTests(tests)\r
22\r
23 runner = self.getRunner()\r
24\r
25 # creating a nested suite exposes some potential bugs\r
26 realSuite = unittest.TestSuite()\r
27 realSuite.addTest(suite)\r
28 # adding empty suites to the end exposes potential bugs\r
29 suite.addTest(unittest.TestSuite())\r
30 realSuite.addTest(unittest.TestSuite())\r
31 return runner.run(realSuite)\r
32\r
33 def test_setup_class(self):\r
34 class Test(unittest.TestCase):\r
35 setUpCalled = 0\r
36 @classmethod\r
37 def setUpClass(cls):\r
38 Test.setUpCalled += 1\r
39 unittest.TestCase.setUpClass()\r
40 def test_one(self):\r
41 pass\r
42 def test_two(self):\r
43 pass\r
44\r
45 result = self.runTests(Test)\r
46\r
47 self.assertEqual(Test.setUpCalled, 1)\r
48 self.assertEqual(result.testsRun, 2)\r
49 self.assertEqual(len(result.errors), 0)\r
50\r
51 def test_teardown_class(self):\r
52 class Test(unittest.TestCase):\r
53 tearDownCalled = 0\r
54 @classmethod\r
55 def tearDownClass(cls):\r
56 Test.tearDownCalled += 1\r
57 unittest.TestCase.tearDownClass()\r
58 def test_one(self):\r
59 pass\r
60 def test_two(self):\r
61 pass\r
62\r
63 result = self.runTests(Test)\r
64\r
65 self.assertEqual(Test.tearDownCalled, 1)\r
66 self.assertEqual(result.testsRun, 2)\r
67 self.assertEqual(len(result.errors), 0)\r
68\r
69 def test_teardown_class_two_classes(self):\r
70 class Test(unittest.TestCase):\r
71 tearDownCalled = 0\r
72 @classmethod\r
73 def tearDownClass(cls):\r
74 Test.tearDownCalled += 1\r
75 unittest.TestCase.tearDownClass()\r
76 def test_one(self):\r
77 pass\r
78 def test_two(self):\r
79 pass\r
80\r
81 class Test2(unittest.TestCase):\r
82 tearDownCalled = 0\r
83 @classmethod\r
84 def tearDownClass(cls):\r
85 Test2.tearDownCalled += 1\r
86 unittest.TestCase.tearDownClass()\r
87 def test_one(self):\r
88 pass\r
89 def test_two(self):\r
90 pass\r
91\r
92 result = self.runTests(Test, Test2)\r
93\r
94 self.assertEqual(Test.tearDownCalled, 1)\r
95 self.assertEqual(Test2.tearDownCalled, 1)\r
96 self.assertEqual(result.testsRun, 4)\r
97 self.assertEqual(len(result.errors), 0)\r
98\r
99 def test_error_in_setupclass(self):\r
100 class BrokenTest(unittest.TestCase):\r
101 @classmethod\r
102 def setUpClass(cls):\r
103 raise TypeError('foo')\r
104 def test_one(self):\r
105 pass\r
106 def test_two(self):\r
107 pass\r
108\r
109 result = self.runTests(BrokenTest)\r
110\r
111 self.assertEqual(result.testsRun, 0)\r
112 self.assertEqual(len(result.errors), 1)\r
113 error, _ = result.errors[0]\r
114 self.assertEqual(str(error),\r
115 'setUpClass (%s.BrokenTest)' % __name__)\r
116\r
117 def test_error_in_teardown_class(self):\r
118 class Test(unittest.TestCase):\r
119 tornDown = 0\r
120 @classmethod\r
121 def tearDownClass(cls):\r
122 Test.tornDown += 1\r
123 raise TypeError('foo')\r
124 def test_one(self):\r
125 pass\r
126 def test_two(self):\r
127 pass\r
128\r
129 class Test2(unittest.TestCase):\r
130 tornDown = 0\r
131 @classmethod\r
132 def tearDownClass(cls):\r
133 Test2.tornDown += 1\r
134 raise TypeError('foo')\r
135 def test_one(self):\r
136 pass\r
137 def test_two(self):\r
138 pass\r
139\r
140 result = self.runTests(Test, Test2)\r
141 self.assertEqual(result.testsRun, 4)\r
142 self.assertEqual(len(result.errors), 2)\r
143 self.assertEqual(Test.tornDown, 1)\r
144 self.assertEqual(Test2.tornDown, 1)\r
145\r
146 error, _ = result.errors[0]\r
147 self.assertEqual(str(error),\r
148 'tearDownClass (%s.Test)' % __name__)\r
149\r
150 def test_class_not_torndown_when_setup_fails(self):\r
151 class Test(unittest.TestCase):\r
152 tornDown = False\r
153 @classmethod\r
154 def setUpClass(cls):\r
155 raise TypeError\r
156 @classmethod\r
157 def tearDownClass(cls):\r
158 Test.tornDown = True\r
159 raise TypeError('foo')\r
160 def test_one(self):\r
161 pass\r
162\r
163 self.runTests(Test)\r
164 self.assertFalse(Test.tornDown)\r
165\r
166 def test_class_not_setup_or_torndown_when_skipped(self):\r
167 class Test(unittest.TestCase):\r
168 classSetUp = False\r
169 tornDown = False\r
170 @classmethod\r
171 def setUpClass(cls):\r
172 Test.classSetUp = True\r
173 @classmethod\r
174 def tearDownClass(cls):\r
175 Test.tornDown = True\r
176 def test_one(self):\r
177 pass\r
178\r
179 Test = unittest.skip("hop")(Test)\r
180 self.runTests(Test)\r
181 self.assertFalse(Test.classSetUp)\r
182 self.assertFalse(Test.tornDown)\r
183\r
184 def test_setup_teardown_order_with_pathological_suite(self):\r
185 results = []\r
186\r
187 class Module1(object):\r
188 @staticmethod\r
189 def setUpModule():\r
190 results.append('Module1.setUpModule')\r
191 @staticmethod\r
192 def tearDownModule():\r
193 results.append('Module1.tearDownModule')\r
194\r
195 class Module2(object):\r
196 @staticmethod\r
197 def setUpModule():\r
198 results.append('Module2.setUpModule')\r
199 @staticmethod\r
200 def tearDownModule():\r
201 results.append('Module2.tearDownModule')\r
202\r
203 class Test1(unittest.TestCase):\r
204 @classmethod\r
205 def setUpClass(cls):\r
206 results.append('setup 1')\r
207 @classmethod\r
208 def tearDownClass(cls):\r
209 results.append('teardown 1')\r
210 def testOne(self):\r
211 results.append('Test1.testOne')\r
212 def testTwo(self):\r
213 results.append('Test1.testTwo')\r
214\r
215 class Test2(unittest.TestCase):\r
216 @classmethod\r
217 def setUpClass(cls):\r
218 results.append('setup 2')\r
219 @classmethod\r
220 def tearDownClass(cls):\r
221 results.append('teardown 2')\r
222 def testOne(self):\r
223 results.append('Test2.testOne')\r
224 def testTwo(self):\r
225 results.append('Test2.testTwo')\r
226\r
227 class Test3(unittest.TestCase):\r
228 @classmethod\r
229 def setUpClass(cls):\r
230 results.append('setup 3')\r
231 @classmethod\r
232 def tearDownClass(cls):\r
233 results.append('teardown 3')\r
234 def testOne(self):\r
235 results.append('Test3.testOne')\r
236 def testTwo(self):\r
237 results.append('Test3.testTwo')\r
238\r
239 Test1.__module__ = Test2.__module__ = 'Module'\r
240 Test3.__module__ = 'Module2'\r
241 sys.modules['Module'] = Module1\r
242 sys.modules['Module2'] = Module2\r
243\r
244 first = unittest.TestSuite((Test1('testOne'),))\r
245 second = unittest.TestSuite((Test1('testTwo'),))\r
246 third = unittest.TestSuite((Test2('testOne'),))\r
247 fourth = unittest.TestSuite((Test2('testTwo'),))\r
248 fifth = unittest.TestSuite((Test3('testOne'),))\r
249 sixth = unittest.TestSuite((Test3('testTwo'),))\r
250 suite = unittest.TestSuite((first, second, third, fourth, fifth, sixth))\r
251\r
252 runner = self.getRunner()\r
253 result = runner.run(suite)\r
254 self.assertEqual(result.testsRun, 6)\r
255 self.assertEqual(len(result.errors), 0)\r
256\r
257 self.assertEqual(results,\r
258 ['Module1.setUpModule', 'setup 1',\r
259 'Test1.testOne', 'Test1.testTwo', 'teardown 1',\r
260 'setup 2', 'Test2.testOne', 'Test2.testTwo',\r
261 'teardown 2', 'Module1.tearDownModule',\r
262 'Module2.setUpModule', 'setup 3',\r
263 'Test3.testOne', 'Test3.testTwo',\r
264 'teardown 3', 'Module2.tearDownModule'])\r
265\r
266 def test_setup_module(self):\r
267 class Module(object):\r
268 moduleSetup = 0\r
269 @staticmethod\r
270 def setUpModule():\r
271 Module.moduleSetup += 1\r
272\r
273 class Test(unittest.TestCase):\r
274 def test_one(self):\r
275 pass\r
276 def test_two(self):\r
277 pass\r
278 Test.__module__ = 'Module'\r
279 sys.modules['Module'] = Module\r
280\r
281 result = self.runTests(Test)\r
282 self.assertEqual(Module.moduleSetup, 1)\r
283 self.assertEqual(result.testsRun, 2)\r
284 self.assertEqual(len(result.errors), 0)\r
285\r
286 def test_error_in_setup_module(self):\r
287 class Module(object):\r
288 moduleSetup = 0\r
289 moduleTornDown = 0\r
290 @staticmethod\r
291 def setUpModule():\r
292 Module.moduleSetup += 1\r
293 raise TypeError('foo')\r
294 @staticmethod\r
295 def tearDownModule():\r
296 Module.moduleTornDown += 1\r
297\r
298 class Test(unittest.TestCase):\r
299 classSetUp = False\r
300 classTornDown = False\r
301 @classmethod\r
302 def setUpClass(cls):\r
303 Test.classSetUp = True\r
304 @classmethod\r
305 def tearDownClass(cls):\r
306 Test.classTornDown = True\r
307 def test_one(self):\r
308 pass\r
309 def test_two(self):\r
310 pass\r
311\r
312 class Test2(unittest.TestCase):\r
313 def test_one(self):\r
314 pass\r
315 def test_two(self):\r
316 pass\r
317 Test.__module__ = 'Module'\r
318 Test2.__module__ = 'Module'\r
319 sys.modules['Module'] = Module\r
320\r
321 result = self.runTests(Test, Test2)\r
322 self.assertEqual(Module.moduleSetup, 1)\r
323 self.assertEqual(Module.moduleTornDown, 0)\r
324 self.assertEqual(result.testsRun, 0)\r
325 self.assertFalse(Test.classSetUp)\r
326 self.assertFalse(Test.classTornDown)\r
327 self.assertEqual(len(result.errors), 1)\r
328 error, _ = result.errors[0]\r
329 self.assertEqual(str(error), 'setUpModule (Module)')\r
330\r
331 def test_testcase_with_missing_module(self):\r
332 class Test(unittest.TestCase):\r
333 def test_one(self):\r
334 pass\r
335 def test_two(self):\r
336 pass\r
337 Test.__module__ = 'Module'\r
338 sys.modules.pop('Module', None)\r
339\r
340 result = self.runTests(Test)\r
341 self.assertEqual(result.testsRun, 2)\r
342\r
343 def test_teardown_module(self):\r
344 class Module(object):\r
345 moduleTornDown = 0\r
346 @staticmethod\r
347 def tearDownModule():\r
348 Module.moduleTornDown += 1\r
349\r
350 class Test(unittest.TestCase):\r
351 def test_one(self):\r
352 pass\r
353 def test_two(self):\r
354 pass\r
355 Test.__module__ = 'Module'\r
356 sys.modules['Module'] = Module\r
357\r
358 result = self.runTests(Test)\r
359 self.assertEqual(Module.moduleTornDown, 1)\r
360 self.assertEqual(result.testsRun, 2)\r
361 self.assertEqual(len(result.errors), 0)\r
362\r
363 def test_error_in_teardown_module(self):\r
364 class Module(object):\r
365 moduleTornDown = 0\r
366 @staticmethod\r
367 def tearDownModule():\r
368 Module.moduleTornDown += 1\r
369 raise TypeError('foo')\r
370\r
371 class Test(unittest.TestCase):\r
372 classSetUp = False\r
373 classTornDown = False\r
374 @classmethod\r
375 def setUpClass(cls):\r
376 Test.classSetUp = True\r
377 @classmethod\r
378 def tearDownClass(cls):\r
379 Test.classTornDown = True\r
380 def test_one(self):\r
381 pass\r
382 def test_two(self):\r
383 pass\r
384\r
385 class Test2(unittest.TestCase):\r
386 def test_one(self):\r
387 pass\r
388 def test_two(self):\r
389 pass\r
390 Test.__module__ = 'Module'\r
391 Test2.__module__ = 'Module'\r
392 sys.modules['Module'] = Module\r
393\r
394 result = self.runTests(Test, Test2)\r
395 self.assertEqual(Module.moduleTornDown, 1)\r
396 self.assertEqual(result.testsRun, 4)\r
397 self.assertTrue(Test.classSetUp)\r
398 self.assertTrue(Test.classTornDown)\r
399 self.assertEqual(len(result.errors), 1)\r
400 error, _ = result.errors[0]\r
401 self.assertEqual(str(error), 'tearDownModule (Module)')\r
402\r
403 def test_skiptest_in_setupclass(self):\r
404 class Test(unittest.TestCase):\r
405 @classmethod\r
406 def setUpClass(cls):\r
407 raise unittest.SkipTest('foo')\r
408 def test_one(self):\r
409 pass\r
410 def test_two(self):\r
411 pass\r
412\r
413 result = self.runTests(Test)\r
414 self.assertEqual(result.testsRun, 0)\r
415 self.assertEqual(len(result.errors), 0)\r
416 self.assertEqual(len(result.skipped), 1)\r
417 skipped = result.skipped[0][0]\r
418 self.assertEqual(str(skipped), 'setUpClass (%s.Test)' % __name__)\r
419\r
420 def test_skiptest_in_setupmodule(self):\r
421 class Test(unittest.TestCase):\r
422 def test_one(self):\r
423 pass\r
424 def test_two(self):\r
425 pass\r
426\r
427 class Module(object):\r
428 @staticmethod\r
429 def setUpModule():\r
430 raise unittest.SkipTest('foo')\r
431\r
432 Test.__module__ = 'Module'\r
433 sys.modules['Module'] = Module\r
434\r
435 result = self.runTests(Test)\r
436 self.assertEqual(result.testsRun, 0)\r
437 self.assertEqual(len(result.errors), 0)\r
438 self.assertEqual(len(result.skipped), 1)\r
439 skipped = result.skipped[0][0]\r
440 self.assertEqual(str(skipped), 'setUpModule (Module)')\r
441\r
442 def test_suite_debug_executes_setups_and_teardowns(self):\r
443 ordering = []\r
444\r
445 class Module(object):\r
446 @staticmethod\r
447 def setUpModule():\r
448 ordering.append('setUpModule')\r
449 @staticmethod\r
450 def tearDownModule():\r
451 ordering.append('tearDownModule')\r
452\r
453 class Test(unittest.TestCase):\r
454 @classmethod\r
455 def setUpClass(cls):\r
456 ordering.append('setUpClass')\r
457 @classmethod\r
458 def tearDownClass(cls):\r
459 ordering.append('tearDownClass')\r
460 def test_something(self):\r
461 ordering.append('test_something')\r
462\r
463 Test.__module__ = 'Module'\r
464 sys.modules['Module'] = Module\r
465\r
466 suite = unittest.defaultTestLoader.loadTestsFromTestCase(Test)\r
467 suite.debug()\r
468 expectedOrder = ['setUpModule', 'setUpClass', 'test_something', 'tearDownClass', 'tearDownModule']\r
469 self.assertEqual(ordering, expectedOrder)\r
470\r
471 def test_suite_debug_propagates_exceptions(self):\r
472 class Module(object):\r
473 @staticmethod\r
474 def setUpModule():\r
475 if phase == 0:\r
476 raise Exception('setUpModule')\r
477 @staticmethod\r
478 def tearDownModule():\r
479 if phase == 1:\r
480 raise Exception('tearDownModule')\r
481\r
482 class Test(unittest.TestCase):\r
483 @classmethod\r
484 def setUpClass(cls):\r
485 if phase == 2:\r
486 raise Exception('setUpClass')\r
487 @classmethod\r
488 def tearDownClass(cls):\r
489 if phase == 3:\r
490 raise Exception('tearDownClass')\r
491 def test_something(self):\r
492 if phase == 4:\r
493 raise Exception('test_something')\r
494\r
495 Test.__module__ = 'Module'\r
496 sys.modules['Module'] = Module\r
497\r
498 _suite = unittest.defaultTestLoader.loadTestsFromTestCase(Test)\r
499 suite = unittest.TestSuite()\r
500 suite.addTest(_suite)\r
501\r
502 messages = ('setUpModule', 'tearDownModule', 'setUpClass', 'tearDownClass', 'test_something')\r
503 for phase, msg in enumerate(messages):\r
504 with self.assertRaisesRegexp(Exception, msg):\r
505 suite.debug()\r
506\r
507if __name__ == '__main__':\r
508 unittest.main()\r