/Lib/ctypes/test/test_incomplete.py

http://unladen-swallow.googlecode.com/ · Python · 42 lines · 25 code · 11 blank · 6 comment · 2 complexity · 4b019df4609cba5a24cc70aeba86357d MD5 · raw file

  1. import unittest
  2. from ctypes import *
  3. ################################################################
  4. #
  5. # The incomplete pointer example from the tutorial
  6. #
  7. class MyTestCase(unittest.TestCase):
  8. def test_incomplete_example(self):
  9. lpcell = POINTER("cell")
  10. class cell(Structure):
  11. _fields_ = [("name", c_char_p),
  12. ("next", lpcell)]
  13. SetPointerType(lpcell, cell)
  14. c1 = cell()
  15. c1.name = "foo"
  16. c2 = cell()
  17. c2.name = "bar"
  18. c1.next = pointer(c2)
  19. c2.next = pointer(c1)
  20. p = c1
  21. result = []
  22. for i in range(8):
  23. result.append(p.name)
  24. p = p.next[0]
  25. self.failUnlessEqual(result, ["foo", "bar"] * 4)
  26. # to not leak references, we must clean _pointer_type_cache
  27. from ctypes import _pointer_type_cache
  28. del _pointer_type_cache[cell]
  29. ################################################################
  30. if __name__ == '__main__':
  31. unittest.main()