Home | History | Annotate | Download | only in test
      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