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]), 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