/Lib/ctypes/test/test_buffers.py

http://unladen-swallow.googlecode.com/ · Python · 70 lines · 62 code · 8 blank · 0 comment · 4 complexity · 0a0d11fd23473a2090ae375e04cbe2ce MD5 · raw file

  1. from ctypes import *
  2. import unittest
  3. class StringBufferTestCase(unittest.TestCase):
  4. def test_buffer(self):
  5. b = create_string_buffer(32)
  6. self.failUnlessEqual(len(b), 32)
  7. self.failUnlessEqual(sizeof(b), 32 * sizeof(c_char))
  8. self.failUnless(type(b[0]) is str)
  9. b = create_string_buffer("abc")
  10. self.failUnlessEqual(len(b), 4) # trailing nul char
  11. self.failUnlessEqual(sizeof(b), 4 * sizeof(c_char))
  12. self.failUnless(type(b[0]) is str)
  13. self.failUnlessEqual(b[0], "a")
  14. self.failUnlessEqual(b[:], "abc\0")
  15. self.failUnlessEqual(b[::], "abc\0")
  16. self.failUnlessEqual(b[::-1], "\0cba")
  17. self.failUnlessEqual(b[::2], "ac")
  18. self.failUnlessEqual(b[::5], "a")
  19. def test_string_conversion(self):
  20. b = create_string_buffer(u"abc")
  21. self.failUnlessEqual(len(b), 4) # trailing nul char
  22. self.failUnlessEqual(sizeof(b), 4 * sizeof(c_char))
  23. self.failUnless(type(b[0]) is str)
  24. self.failUnlessEqual(b[0], "a")
  25. self.failUnlessEqual(b[:], "abc\0")
  26. self.failUnlessEqual(b[::], "abc\0")
  27. self.failUnlessEqual(b[::-1], "\0cba")
  28. self.failUnlessEqual(b[::2], "ac")
  29. self.failUnlessEqual(b[::5], "a")
  30. try:
  31. c_wchar
  32. except NameError:
  33. pass
  34. else:
  35. def test_unicode_buffer(self):
  36. b = create_unicode_buffer(32)
  37. self.failUnlessEqual(len(b), 32)
  38. self.failUnlessEqual(sizeof(b), 32 * sizeof(c_wchar))
  39. self.failUnless(type(b[0]) is unicode)
  40. b = create_unicode_buffer(u"abc")
  41. self.failUnlessEqual(len(b), 4) # trailing nul char
  42. self.failUnlessEqual(sizeof(b), 4 * sizeof(c_wchar))
  43. self.failUnless(type(b[0]) is unicode)
  44. self.failUnlessEqual(b[0], u"a")
  45. self.failUnlessEqual(b[:], "abc\0")
  46. self.failUnlessEqual(b[::], "abc\0")
  47. self.failUnlessEqual(b[::-1], "\0cba")
  48. self.failUnlessEqual(b[::2], "ac")
  49. self.failUnlessEqual(b[::5], "a")
  50. def test_unicode_conversion(self):
  51. b = create_unicode_buffer("abc")
  52. self.failUnlessEqual(len(b), 4) # trailing nul char
  53. self.failUnlessEqual(sizeof(b), 4 * sizeof(c_wchar))
  54. self.failUnless(type(b[0]) is unicode)
  55. self.failUnlessEqual(b[0], u"a")
  56. self.failUnlessEqual(b[:], "abc\0")
  57. self.failUnlessEqual(b[::], "abc\0")
  58. self.failUnlessEqual(b[::-1], "\0cba")
  59. self.failUnlessEqual(b[::2], "ac")
  60. self.failUnlessEqual(b[::5], "a")
  61. if __name__ == "__main__":
  62. unittest.main()