codekingpro/portable-devtools
114k
1import gc
2import weakref
3
4
5import greenlet
6from . import TestCase
7
8class WeakRefTests(TestCase):
9 def test_dead_weakref(self):
10 def _dead_greenlet():
11 g = greenlet.greenlet(lambda: None)
12 g.switch()
13 return g
14 o = weakref.ref(_dead_greenlet())
15 gc.collect()
16 self.assertEqual(o(), None)
17
18 def test_inactive_weakref(self):
19 o = weakref.ref(greenlet.greenlet())
20 gc.collect()
21 self.assertEqual(o(), None)
22
23 def test_dealloc_weakref(self):
24 seen = []
25 def worker():
26 try:
27 greenlet.getcurrent().parent.switch()
28 finally:
29 seen.append(g())
30 g = greenlet.greenlet(worker)
31 g.switch()
32 g2 = greenlet.greenlet(lambda: None, g)
33 g = weakref.ref(g2)
34 g2 = None
35 self.assertEqual(seen, [None])
36 