@@ -66,10 +66,10 @@ def gen():
6666 raise
6767
6868 def task (generator ):
69- l = [i for i in generator ]
70- self .assertListEqual (l , [1 ])
69+ li = [i for i in generator ]
70+ self .assertListEqual (li , [1 ])
7171
72- self .run_GC_test (task ,gen ())
72+ self .run_GC_test (task , gen ())
7373
7474 def testGCRunningCoroutine (self ):
7575 async def coro ():
@@ -242,5 +242,125 @@ def test_finalizer(self):
242242 self ._test_finalizer (pf_dump , pf_load )
243243
244244
245+ class TestStacklessOperations (StacklessTestCase ):
246+ def assertLevel (self , expected = 0 ):
247+ self .assertTrue (stackless .current .alive )
248+ if stackless .enable_softswitch (None ):
249+ self .assertEqual (stackless .current .nesting_level , expected )
250+ else :
251+ self .assertGreater (stackless .current .nesting_level , expected )
252+
253+ def gen_1_2 (self ):
254+ self .assertLevel ()
255+ yield 1
256+ self .assertLevel ()
257+ yield 2
258+ self .assertLevel ()
259+
260+ def supergen (self , gen ):
261+ self .assertLevel ()
262+ yield from gen
263+ self .assertLevel ()
264+
265+ @types .coroutine
266+ def wrapped_generator_coro (self ):
267+ self .assertLevel ()
268+ yield
269+ self .assertLevel ()
270+ yield
271+ self .assertLevel ()
272+
273+ @types .coroutine
274+ def coro1yield (self ):
275+ yield
276+
277+ async def coro (self ):
278+ self .assertLevel ()
279+ await self .coro1yield ()
280+ self .assertLevel ()
281+ await self .coro1yield ()
282+ self .assertLevel ()
283+
284+ async def agen_1_2 (self ):
285+ self .assertLevel ()
286+ await self .coro1yield ()
287+ yield 1
288+ await self .coro1yield ()
289+ self .assertLevel ()
290+ yield 2
291+ await self .coro1yield ()
292+ self .assertLevel ()
293+
294+ @contextlib .asynccontextmanager
295+ async def async_ctx_mgr (self ):
296+ self .assertLevel ()
297+ await self .coro1yield ()
298+ try :
299+ yield
300+ finally :
301+ self .assertLevel ()
302+ await self .coro1yield ()
303+
304+ def run_until_complete (self , coro ):
305+ n = 0
306+ it = coro .__await__ ()
307+ while True :
308+ try :
309+ x = it .send (None )
310+ self .assertIsNone (x )
311+ n += 1
312+ except StopIteration :
313+ return n
314+
315+ def test_yield_from (self ):
316+ li = [i for i in self .supergen (self .gen_1_2 ())]
317+ self .assertListEqual (li , [1 , 2 ])
318+
319+ def test_async_for (self ):
320+ async def test ():
321+ li = []
322+ async for v in self .agen_1_2 ():
323+ li .append (v )
324+ self .assertListEqual (li , [1 , 2 ])
325+
326+ t = test ()
327+ n = self .run_until_complete (t )
328+ self .assertEqual (n , 3 )
329+
330+ def test_async_with (self ):
331+ async def test ():
332+ async with self .async_ctx_mgr ():
333+ await self .coro ()
334+
335+ t = test ()
336+ n = self .run_until_complete (t )
337+ self .assertEqual (n , 4 )
338+
339+ def test_coroutine_wrapper (self ):
340+ async def test ():
341+ await self .wrapped_generator_coro ()
342+
343+ t = test ()
344+ n = self .run_until_complete (t )
345+ self .assertEqual (n , 2 )
346+
347+ def test_coroutine (self ):
348+ async def test ():
349+ await self .coro ()
350+
351+ t = test ()
352+ n = self .run_until_complete (t )
353+ self .assertEqual (n , 2 )
354+
355+ def test_async_iter_asend_send (self ):
356+ async def test ():
357+ a = self .agen_1_2 ().__aiter__ ()
358+ x = a .asend (None ).send (None )
359+
360+ t = test ()
361+ n = self .run_until_complete (t )
362+ self .assertEqual (n , 0 )
363+
364+
245365if __name__ == '__main__' :
246366 unittest .main ()
0 commit comments