• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1import asyncio
2import unittest
3
4
5def tearDownModule():
6    asyncio.set_event_loop_policy(None)
7
8
9class TestAsyncCase(unittest.TestCase):
10    def test_full_cycle(self):
11        events = []
12
13        class Test(unittest.IsolatedAsyncioTestCase):
14            def setUp(self):
15                self.assertEqual(events, [])
16                events.append('setUp')
17
18            async def asyncSetUp(self):
19                self.assertEqual(events, ['setUp'])
20                events.append('asyncSetUp')
21
22            async def test_func(self):
23                self.assertEqual(events, ['setUp',
24                                          'asyncSetUp'])
25                events.append('test')
26                self.addAsyncCleanup(self.on_cleanup)
27
28            async def asyncTearDown(self):
29                self.assertEqual(events, ['setUp',
30                                          'asyncSetUp',
31                                          'test'])
32                events.append('asyncTearDown')
33
34            def tearDown(self):
35                self.assertEqual(events, ['setUp',
36                                          'asyncSetUp',
37                                          'test',
38                                          'asyncTearDown'])
39                events.append('tearDown')
40
41            async def on_cleanup(self):
42                self.assertEqual(events, ['setUp',
43                                          'asyncSetUp',
44                                          'test',
45                                          'asyncTearDown',
46                                          'tearDown'])
47                events.append('cleanup')
48
49        test = Test("test_func")
50        test.run()
51        self.assertEqual(events, ['setUp',
52                                  'asyncSetUp',
53                                  'test',
54                                  'asyncTearDown',
55                                  'tearDown',
56                                  'cleanup'])
57
58    def test_exception_in_setup(self):
59        events = []
60
61        class Test(unittest.IsolatedAsyncioTestCase):
62            async def asyncSetUp(self):
63                events.append('asyncSetUp')
64                raise Exception()
65
66            async def test_func(self):
67                events.append('test')
68                self.addAsyncCleanup(self.on_cleanup)
69
70            async def asyncTearDown(self):
71                events.append('asyncTearDown')
72
73            async def on_cleanup(self):
74                events.append('cleanup')
75
76
77        test = Test("test_func")
78        test.run()
79        self.assertEqual(events, ['asyncSetUp'])
80
81    def test_exception_in_test(self):
82        events = []
83
84        class Test(unittest.IsolatedAsyncioTestCase):
85            async def asyncSetUp(self):
86                events.append('asyncSetUp')
87
88            async def test_func(self):
89                events.append('test')
90                raise Exception()
91                self.addAsyncCleanup(self.on_cleanup)
92
93            async def asyncTearDown(self):
94                events.append('asyncTearDown')
95
96            async def on_cleanup(self):
97                events.append('cleanup')
98
99        test = Test("test_func")
100        test.run()
101        self.assertEqual(events, ['asyncSetUp', 'test', 'asyncTearDown'])
102
103    def test_exception_in_test_after_adding_cleanup(self):
104        events = []
105
106        class Test(unittest.IsolatedAsyncioTestCase):
107            async def asyncSetUp(self):
108                events.append('asyncSetUp')
109
110            async def test_func(self):
111                events.append('test')
112                self.addAsyncCleanup(self.on_cleanup)
113                raise Exception()
114
115            async def asyncTearDown(self):
116                events.append('asyncTearDown')
117
118            async def on_cleanup(self):
119                events.append('cleanup')
120
121        test = Test("test_func")
122        test.run()
123        self.assertEqual(events, ['asyncSetUp', 'test', 'asyncTearDown', 'cleanup'])
124
125    def test_exception_in_tear_down(self):
126        events = []
127
128        class Test(unittest.IsolatedAsyncioTestCase):
129            async def asyncSetUp(self):
130                events.append('asyncSetUp')
131
132            async def test_func(self):
133                events.append('test')
134                self.addAsyncCleanup(self.on_cleanup)
135
136            async def asyncTearDown(self):
137                events.append('asyncTearDown')
138                raise Exception()
139
140            async def on_cleanup(self):
141                events.append('cleanup')
142
143        test = Test("test_func")
144        test.run()
145        self.assertEqual(events, ['asyncSetUp', 'test', 'asyncTearDown', 'cleanup'])
146
147
148    def test_exception_in_tear_clean_up(self):
149        events = []
150
151        class Test(unittest.IsolatedAsyncioTestCase):
152            async def asyncSetUp(self):
153                events.append('asyncSetUp')
154
155            async def test_func(self):
156                events.append('test')
157                self.addAsyncCleanup(self.on_cleanup)
158
159            async def asyncTearDown(self):
160                events.append('asyncTearDown')
161
162            async def on_cleanup(self):
163                events.append('cleanup')
164                raise Exception()
165
166        test = Test("test_func")
167        test.run()
168        self.assertEqual(events, ['asyncSetUp', 'test', 'asyncTearDown', 'cleanup'])
169
170    def test_cleanups_interleave_order(self):
171        events = []
172
173        class Test(unittest.IsolatedAsyncioTestCase):
174            async def test_func(self):
175                self.addAsyncCleanup(self.on_sync_cleanup, 1)
176                self.addAsyncCleanup(self.on_async_cleanup, 2)
177                self.addAsyncCleanup(self.on_sync_cleanup, 3)
178                self.addAsyncCleanup(self.on_async_cleanup, 4)
179
180            async def on_sync_cleanup(self, val):
181                events.append(f'sync_cleanup {val}')
182
183            async def on_async_cleanup(self, val):
184                events.append(f'async_cleanup {val}')
185
186        test = Test("test_func")
187        test.run()
188        self.assertEqual(events, ['async_cleanup 4',
189                                  'sync_cleanup 3',
190                                  'async_cleanup 2',
191                                  'sync_cleanup 1'])
192
193
194if __name__ == "__main__":
195    unittest.main()
196