diff options
Diffstat (limited to 'lib/greenlet/tests/test_weakref.py')
-rw-r--r-- | lib/greenlet/tests/test_weakref.py | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/lib/greenlet/tests/test_weakref.py b/lib/greenlet/tests/test_weakref.py new file mode 100644 index 0000000..6a2ff06 --- /dev/null +++ b/lib/greenlet/tests/test_weakref.py @@ -0,0 +1,34 @@ +import gc +import greenlet +import weakref +import unittest + + +class WeakRefTests(unittest.TestCase): + def test_dead_weakref(self): + def _dead_greenlet(): + g = greenlet.greenlet(lambda: None) + g.switch() + return g + o = weakref.ref(_dead_greenlet()) + gc.collect() + self.assertEqual(o(), None) + + def test_inactive_weakref(self): + o = weakref.ref(greenlet.greenlet()) + gc.collect() + self.assertEqual(o(), None) + + def test_dealloc_weakref(self): + seen = [] + def worker(): + try: + greenlet.getcurrent().parent.switch() + finally: + seen.append(g()) + g = greenlet.greenlet(worker) + g.switch() + g2 = greenlet.greenlet(lambda: None, g) + g = weakref.ref(g2) + g2 = None + self.assertEqual(seen, [None]) |