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