blob: cf54c2875950123b456a69261839aa7b89a716fd [file] [log] [blame]
Guido van Rossum98297ee2007-11-06 21:34:58 +00001# Tests that work for both bytes and buffer objects.
Gregory P. Smith60d241f2007-10-16 06:31:30 +00002# See PEP 3137.
3
4import struct
5import sys
6
7class MixinBytesBufferCommonTests(object):
Guido van Rossum98297ee2007-11-06 21:34:58 +00008 """Tests that work for both bytes and buffer objects.
Gregory P. Smith60d241f2007-10-16 06:31:30 +00009 See PEP 3137.
10 """
11
12 def marshal(self, x):
13 """Convert x into the appropriate type for these tests."""
14 raise RuntimeError('test class must provide a marshal method')
15
16 def test_islower(self):
17 self.assertFalse(self.marshal(b'').islower())
Ezio Melottib3aedd42010-11-20 19:04:17 +000018 self.assertTrue(self.marshal(b'a').islower())
Gregory P. Smith60d241f2007-10-16 06:31:30 +000019 self.assertFalse(self.marshal(b'A').islower())
20 self.assertFalse(self.marshal(b'\n').islower())
Ezio Melottib3aedd42010-11-20 19:04:17 +000021 self.assertTrue(self.marshal(b'abc').islower())
Gregory P. Smith60d241f2007-10-16 06:31:30 +000022 self.assertFalse(self.marshal(b'aBc').islower())
Ezio Melottib3aedd42010-11-20 19:04:17 +000023 self.assertTrue(self.marshal(b'abc\n').islower())
Gregory P. Smith60d241f2007-10-16 06:31:30 +000024 self.assertRaises(TypeError, self.marshal(b'abc').islower, 42)
25
26 def test_isupper(self):
27 self.assertFalse(self.marshal(b'').isupper())
28 self.assertFalse(self.marshal(b'a').isupper())
Ezio Melottib3aedd42010-11-20 19:04:17 +000029 self.assertTrue(self.marshal(b'A').isupper())
Gregory P. Smith60d241f2007-10-16 06:31:30 +000030 self.assertFalse(self.marshal(b'\n').isupper())
Ezio Melottib3aedd42010-11-20 19:04:17 +000031 self.assertTrue(self.marshal(b'ABC').isupper())
Gregory P. Smith60d241f2007-10-16 06:31:30 +000032 self.assertFalse(self.marshal(b'AbC').isupper())
Ezio Melottib3aedd42010-11-20 19:04:17 +000033 self.assertTrue(self.marshal(b'ABC\n').isupper())
Gregory P. Smith60d241f2007-10-16 06:31:30 +000034 self.assertRaises(TypeError, self.marshal(b'abc').isupper, 42)
35
36 def test_istitle(self):
37 self.assertFalse(self.marshal(b'').istitle())
38 self.assertFalse(self.marshal(b'a').istitle())
Ezio Melottib3aedd42010-11-20 19:04:17 +000039 self.assertTrue(self.marshal(b'A').istitle())
Gregory P. Smith60d241f2007-10-16 06:31:30 +000040 self.assertFalse(self.marshal(b'\n').istitle())
Ezio Melottib3aedd42010-11-20 19:04:17 +000041 self.assertTrue(self.marshal(b'A Titlecased Line').istitle())
42 self.assertTrue(self.marshal(b'A\nTitlecased Line').istitle())
43 self.assertTrue(self.marshal(b'A Titlecased, Line').istitle())
Gregory P. Smith60d241f2007-10-16 06:31:30 +000044 self.assertFalse(self.marshal(b'Not a capitalized String').istitle())
45 self.assertFalse(self.marshal(b'Not\ta Titlecase String').istitle())
46 self.assertFalse(self.marshal(b'Not--a Titlecase String').istitle())
47 self.assertFalse(self.marshal(b'NOT').istitle())
48 self.assertRaises(TypeError, self.marshal(b'abc').istitle, 42)
49
50 def test_isspace(self):
51 self.assertFalse(self.marshal(b'').isspace())
52 self.assertFalse(self.marshal(b'a').isspace())
Ezio Melottib3aedd42010-11-20 19:04:17 +000053 self.assertTrue(self.marshal(b' ').isspace())
54 self.assertTrue(self.marshal(b'\t').isspace())
55 self.assertTrue(self.marshal(b'\r').isspace())
56 self.assertTrue(self.marshal(b'\n').isspace())
57 self.assertTrue(self.marshal(b' \t\r\n').isspace())
Gregory P. Smith60d241f2007-10-16 06:31:30 +000058 self.assertFalse(self.marshal(b' \t\r\na').isspace())
59 self.assertRaises(TypeError, self.marshal(b'abc').isspace, 42)
60
61 def test_isalpha(self):
62 self.assertFalse(self.marshal(b'').isalpha())
Ezio Melottib3aedd42010-11-20 19:04:17 +000063 self.assertTrue(self.marshal(b'a').isalpha())
64 self.assertTrue(self.marshal(b'A').isalpha())
Gregory P. Smith60d241f2007-10-16 06:31:30 +000065 self.assertFalse(self.marshal(b'\n').isalpha())
Ezio Melottib3aedd42010-11-20 19:04:17 +000066 self.assertTrue(self.marshal(b'abc').isalpha())
Gregory P. Smith60d241f2007-10-16 06:31:30 +000067 self.assertFalse(self.marshal(b'aBc123').isalpha())
68 self.assertFalse(self.marshal(b'abc\n').isalpha())
69 self.assertRaises(TypeError, self.marshal(b'abc').isalpha, 42)
70
71 def test_isalnum(self):
72 self.assertFalse(self.marshal(b'').isalnum())
Ezio Melottib3aedd42010-11-20 19:04:17 +000073 self.assertTrue(self.marshal(b'a').isalnum())
74 self.assertTrue(self.marshal(b'A').isalnum())
Gregory P. Smith60d241f2007-10-16 06:31:30 +000075 self.assertFalse(self.marshal(b'\n').isalnum())
Ezio Melottib3aedd42010-11-20 19:04:17 +000076 self.assertTrue(self.marshal(b'123abc456').isalnum())
77 self.assertTrue(self.marshal(b'a1b3c').isalnum())
Gregory P. Smith60d241f2007-10-16 06:31:30 +000078 self.assertFalse(self.marshal(b'aBc000 ').isalnum())
79 self.assertFalse(self.marshal(b'abc\n').isalnum())
80 self.assertRaises(TypeError, self.marshal(b'abc').isalnum, 42)
81
82 def test_isdigit(self):
83 self.assertFalse(self.marshal(b'').isdigit())
84 self.assertFalse(self.marshal(b'a').isdigit())
Ezio Melottib3aedd42010-11-20 19:04:17 +000085 self.assertTrue(self.marshal(b'0').isdigit())
86 self.assertTrue(self.marshal(b'0123456789').isdigit())
Gregory P. Smith60d241f2007-10-16 06:31:30 +000087 self.assertFalse(self.marshal(b'0123456789a').isdigit())
88
89 self.assertRaises(TypeError, self.marshal(b'abc').isdigit, 42)
90
91 def test_lower(self):
92 self.assertEqual(b'hello', self.marshal(b'HeLLo').lower())
93 self.assertEqual(b'hello', self.marshal(b'hello').lower())
94 self.assertRaises(TypeError, self.marshal(b'hello').lower, 42)
95
96 def test_upper(self):
97 self.assertEqual(b'HELLO', self.marshal(b'HeLLo').upper())
98 self.assertEqual(b'HELLO', self.marshal(b'HELLO').upper())
99 self.assertRaises(TypeError, self.marshal(b'hello').upper, 42)
100
101 def test_capitalize(self):
102 self.assertEqual(b' hello ', self.marshal(b' hello ').capitalize())
103 self.assertEqual(b'Hello ', self.marshal(b'Hello ').capitalize())
104 self.assertEqual(b'Hello ', self.marshal(b'hello ').capitalize())
105 self.assertEqual(b'Aaaa', self.marshal(b'aaaa').capitalize())
106 self.assertEqual(b'Aaaa', self.marshal(b'AaAa').capitalize())
107
108 self.assertRaises(TypeError, self.marshal(b'hello').capitalize, 42)
109
110 def test_ljust(self):
111 self.assertEqual(b'abc ', self.marshal(b'abc').ljust(10))
112 self.assertEqual(b'abc ', self.marshal(b'abc').ljust(6))
113 self.assertEqual(b'abc', self.marshal(b'abc').ljust(3))
114 self.assertEqual(b'abc', self.marshal(b'abc').ljust(2))
Benjamin Peterson7fe98532009-04-02 00:33:55 +0000115 self.assertEqual(b'abc*******', self.marshal(b'abc').ljust(10, b'*'))
Gregory P. Smith60d241f2007-10-16 06:31:30 +0000116 self.assertRaises(TypeError, self.marshal(b'abc').ljust)
117
118 def test_rjust(self):
119 self.assertEqual(b' abc', self.marshal(b'abc').rjust(10))
120 self.assertEqual(b' abc', self.marshal(b'abc').rjust(6))
121 self.assertEqual(b'abc', self.marshal(b'abc').rjust(3))
122 self.assertEqual(b'abc', self.marshal(b'abc').rjust(2))
Benjamin Peterson7fe98532009-04-02 00:33:55 +0000123 self.assertEqual(b'*******abc', self.marshal(b'abc').rjust(10, b'*'))
Gregory P. Smith60d241f2007-10-16 06:31:30 +0000124 self.assertRaises(TypeError, self.marshal(b'abc').rjust)
125
126 def test_center(self):
127 self.assertEqual(b' abc ', self.marshal(b'abc').center(10))
128 self.assertEqual(b' abc ', self.marshal(b'abc').center(6))
129 self.assertEqual(b'abc', self.marshal(b'abc').center(3))
130 self.assertEqual(b'abc', self.marshal(b'abc').center(2))
Benjamin Peterson7fe98532009-04-02 00:33:55 +0000131 self.assertEqual(b'***abc****', self.marshal(b'abc').center(10, b'*'))
Gregory P. Smith60d241f2007-10-16 06:31:30 +0000132 self.assertRaises(TypeError, self.marshal(b'abc').center)
133
134 def test_swapcase(self):
135 self.assertEqual(b'hEllO CoMPuTErS',
136 self.marshal(b'HeLLo cOmpUteRs').swapcase())
137
138 self.assertRaises(TypeError, self.marshal(b'hello').swapcase, 42)
139
140 def test_zfill(self):
141 self.assertEqual(b'123', self.marshal(b'123').zfill(2))
142 self.assertEqual(b'123', self.marshal(b'123').zfill(3))
143 self.assertEqual(b'0123', self.marshal(b'123').zfill(4))
144 self.assertEqual(b'+123', self.marshal(b'+123').zfill(3))
145 self.assertEqual(b'+123', self.marshal(b'+123').zfill(4))
146 self.assertEqual(b'+0123', self.marshal(b'+123').zfill(5))
147 self.assertEqual(b'-123', self.marshal(b'-123').zfill(3))
148 self.assertEqual(b'-123', self.marshal(b'-123').zfill(4))
149 self.assertEqual(b'-0123', self.marshal(b'-123').zfill(5))
150 self.assertEqual(b'000', self.marshal(b'').zfill(3))
151 self.assertEqual(b'34', self.marshal(b'34').zfill(1))
152 self.assertEqual(b'0034', self.marshal(b'34').zfill(4))
153
154 self.assertRaises(TypeError, self.marshal(b'123').zfill)
155
156 def test_expandtabs(self):
157 self.assertEqual(b'abc\rab def\ng hi',
158 self.marshal(b'abc\rab\tdef\ng\thi').expandtabs())
159 self.assertEqual(b'abc\rab def\ng hi',
160 self.marshal(b'abc\rab\tdef\ng\thi').expandtabs(8))
161 self.assertEqual(b'abc\rab def\ng hi',
162 self.marshal(b'abc\rab\tdef\ng\thi').expandtabs(4))
163 self.assertEqual(b'abc\r\nab def\ng hi',
164 self.marshal(b'abc\r\nab\tdef\ng\thi').expandtabs(4))
165 self.assertEqual(b'abc\rab def\ng hi',
166 self.marshal(b'abc\rab\tdef\ng\thi').expandtabs())
167 self.assertEqual(b'abc\rab def\ng hi',
168 self.marshal(b'abc\rab\tdef\ng\thi').expandtabs(8))
169 self.assertEqual(b'abc\r\nab\r\ndef\ng\r\nhi',
170 self.marshal(b'abc\r\nab\r\ndef\ng\r\nhi').expandtabs(4))
171 self.assertEqual(b' a\n b', self.marshal(b' \ta\n\tb').expandtabs(1))
172
173 self.assertRaises(TypeError, self.marshal(b'hello').expandtabs, 42, 42)
174 # This test is only valid when sizeof(int) == sizeof(void*) == 4.
Christian Heimesa37d4c62007-12-04 23:02:19 +0000175 if sys.maxsize < (1 << 32) and struct.calcsize('P') == 4:
Gregory P. Smith60d241f2007-10-16 06:31:30 +0000176 self.assertRaises(OverflowError,
Christian Heimesa37d4c62007-12-04 23:02:19 +0000177 self.marshal(b'\ta\n\tb').expandtabs, sys.maxsize)
Gregory P. Smith60d241f2007-10-16 06:31:30 +0000178
179 def test_title(self):
180 self.assertEqual(b' Hello ', self.marshal(b' hello ').title())
181 self.assertEqual(b'Hello ', self.marshal(b'hello ').title())
182 self.assertEqual(b'Hello ', self.marshal(b'Hello ').title())
183 self.assertEqual(b'Format This As Title String',
184 self.marshal(b'fOrMaT thIs aS titLe String').title())
185 self.assertEqual(b'Format,This-As*Title;String',
186 self.marshal(b'fOrMaT,thIs-aS*titLe;String').title())
187 self.assertEqual(b'Getint', self.marshal(b'getInt').title())
188 self.assertRaises(TypeError, self.marshal(b'hello').title, 42)
189
190 def test_splitlines(self):
191 self.assertEqual([b'abc', b'def', b'', b'ghi'],
192 self.marshal(b'abc\ndef\n\rghi').splitlines())
193 self.assertEqual([b'abc', b'def', b'', b'ghi'],
194 self.marshal(b'abc\ndef\n\r\nghi').splitlines())
195 self.assertEqual([b'abc', b'def', b'ghi'],
196 self.marshal(b'abc\ndef\r\nghi').splitlines())
197 self.assertEqual([b'abc', b'def', b'ghi'],
198 self.marshal(b'abc\ndef\r\nghi\n').splitlines())
199 self.assertEqual([b'abc', b'def', b'ghi', b''],
200 self.marshal(b'abc\ndef\r\nghi\n\r').splitlines())
201 self.assertEqual([b'', b'abc', b'def', b'ghi', b''],
202 self.marshal(b'\nabc\ndef\r\nghi\n\r').splitlines())
Mark Dickinson0d5f6ad2011-09-24 09:14:39 +0100203 self.assertEqual([b'', b'abc', b'def', b'ghi', b''],
204 self.marshal(b'\nabc\ndef\r\nghi\n\r').splitlines(False))
Gregory P. Smith60d241f2007-10-16 06:31:30 +0000205 self.assertEqual([b'\n', b'abc\n', b'def\r\n', b'ghi\n', b'\r'],
Mark Dickinson0d5f6ad2011-09-24 09:14:39 +0100206 self.marshal(b'\nabc\ndef\r\nghi\n\r').splitlines(True))
207 self.assertEqual([b'', b'abc', b'def', b'ghi', b''],
208 self.marshal(b'\nabc\ndef\r\nghi\n\r').splitlines(keepends=False))
209 self.assertEqual([b'\n', b'abc\n', b'def\r\n', b'ghi\n', b'\r'],
210 self.marshal(b'\nabc\ndef\r\nghi\n\r').splitlines(keepends=True))
Gregory P. Smith60d241f2007-10-16 06:31:30 +0000211
212 self.assertRaises(TypeError, self.marshal(b'abc').splitlines, 42, 42)