12345678910111213141516171819202122232425262728293031323334 |
- 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])
|