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]), bytes) 12 13 b = create_string_buffer(b"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]), bytes) 17 self.assertEqual(b[0], b"a") 18 self.assertEqual(b[:], b"abc\0") 19 self.assertEqual(b[::], b"abc\0") 20 self.assertEqual(b[::-1], b"\0cba") 21 self.assertEqual(b[::2], b"ac") 22 self.assertEqual(b[::5], b"a") 23 24 self.assertRaises(TypeError, create_string_buffer, "abc") 25 26 def test_buffer_interface(self): 27 self.assertEqual(len(bytearray(create_string_buffer(0))), 0) 28 self.assertEqual(len(bytearray(create_string_buffer(1))), 1) 29 30 @need_symbol('c_wchar') 31 def test_unicode_buffer(self): 32 b = create_unicode_buffer(32) 33 self.assertEqual(len(b), 32) 34 self.assertEqual(sizeof(b), 32 * sizeof(c_wchar)) 35 self.assertIs(type(b[0]), str) 36 37 b = create_unicode_buffer("abc") 38 self.assertEqual(len(b), 4) # trailing nul char 39 self.assertEqual(sizeof(b), 4 * sizeof(c_wchar)) 40 self.assertIs(type(b[0]), str) 41 self.assertEqual(b[0], "a") 42 self.assertEqual(b[:], "abc\0") 43 self.assertEqual(b[::], "abc\0") 44 self.assertEqual(b[::-1], "\0cba") 45 self.assertEqual(b[::2], "ac") 46 self.assertEqual(b[::5], "a") 47 48 self.assertRaises(TypeError, create_unicode_buffer, b"abc") 49 50 @need_symbol('c_wchar') 51 def test_unicode_conversion(self): 52 b = create_unicode_buffer("abc") 53 self.assertEqual(len(b), 4) # trailing nul char 54 self.assertEqual(sizeof(b), 4 * sizeof(c_wchar)) 55 self.assertIs(type(b[0]), str) 56 self.assertEqual(b[0], "a") 57 self.assertEqual(b[:], "abc\0") 58 self.assertEqual(b[::], "abc\0") 59 self.assertEqual(b[::-1], "\0cba") 60 self.assertEqual(b[::2], "ac") 61 self.assertEqual(b[::5], "a") 62 63 if __name__ == "__main__": 64 unittest.main() 65