1from ctypes import *
2import unittest
3
4class 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
73if __name__ == "__main__":
74    unittest.main()
75