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