Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit be1eb14

Browse files
Added tests for mixed kinds of Unicode strings.
1 parent 6c86fe2 commit be1eb14

1 file changed

Lines changed: 150 additions & 0 deletions

File tree

Lib/test/test_unicode.py

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,19 @@ def test_count(self):
180180
self.checkequalnofix(3, 'aaa', 'count', 'a', -10)
181181
self.checkequalnofix(2, 'aaa', 'count', 'a', 0, -1)
182182
self.checkequalnofix(0, 'aaa', 'count', 'a', 0, -10)
183+
# test mixed kinds
184+
self.checkequal(10, '\u0102' + 'a' * 10, 'count', 'a')
185+
self.checkequal(10, '\U00100304' + 'a' * 10, 'count', 'a')
186+
self.checkequal(10, '\U00100304' + '\u0102' * 10, 'count', '\u0102')
187+
self.checkequal(0, 'a' * 10, 'count', '\u0102')
188+
self.checkequal(0, 'a' * 10, 'count', '\U00100304')
189+
self.checkequal(0, '\u0102' * 10, 'count', '\U00100304')
190+
self.checkequal(10, '\u0102' + 'a_' * 10, 'count', 'a_')
191+
self.checkequal(10, '\U00100304' + 'a_' * 10, 'count', 'a_')
192+
self.checkequal(10, '\U00100304' + '\u0102_' * 10, 'count', '\u0102_')
193+
self.checkequal(0, 'a' * 10, 'count', 'a\u0102')
194+
self.checkequal(0, 'a' * 10, 'count', 'a\U00100304')
195+
self.checkequal(0, '\u0102' * 10, 'count', '\u0102\U00100304')
183196

184197
def test_find(self):
185198
string_tests.CommonTest.test_find(self)
@@ -198,6 +211,19 @@ def test_find(self):
198211

199212
self.assertRaises(TypeError, 'hello'.find)
200213
self.assertRaises(TypeError, 'hello'.find, 42)
214+
# test mixed kinds
215+
self.checkequal(100, '\u0102' * 100 + 'a', 'find', 'a')
216+
self.checkequal(100, '\U00100304' * 100 + 'a', 'find', 'a')
217+
self.checkequal(100, '\U00100304' * 100 + '\u0102', 'find', '\u0102')
218+
self.checkequal(-1, 'a' * 100, 'find', '\u0102')
219+
self.checkequal(-1, 'a' * 100, 'find', '\U00100304')
220+
self.checkequal(-1, '\u0102' * 100, 'find', '\U00100304')
221+
self.checkequal(100, '\u0102' * 100 + 'a_', 'find', 'a_')
222+
self.checkequal(100, '\U00100304' * 100 + 'a_', 'find', 'a_')
223+
self.checkequal(100, '\U00100304' * 100 + '\u0102_', 'find', '\u0102_')
224+
self.checkequal(-1, 'a' * 100, 'find', 'a\u0102')
225+
self.checkequal(-1, 'a' * 100, 'find', 'a\U00100304')
226+
self.checkequal(-1, '\u0102' * 100, 'find', '\u0102\U00100304')
201227

202228
def test_rfind(self):
203229
string_tests.CommonTest.test_rfind(self)
@@ -213,6 +239,19 @@ def test_rfind(self):
213239
self.checkequalnofix(9, 'abcdefghiabc', 'rfind', 'abc')
214240
self.checkequalnofix(12, 'abcdefghiabc', 'rfind', '')
215241
self.checkequalnofix(12, 'abcdefghiabc', 'rfind', '')
242+
# test mixed kinds
243+
self.checkequal(0, 'a' + '\u0102' * 100, 'rfind', 'a')
244+
self.checkequal(0, 'a' + '\U00100304' * 100, 'rfind', 'a')
245+
self.checkequal(0, '\u0102' + '\U00100304' * 100, 'rfind', '\u0102')
246+
self.checkequal(-1, 'a' * 100, 'rfind', '\u0102')
247+
self.checkequal(-1, 'a' * 100, 'rfind', '\U00100304')
248+
self.checkequal(-1, '\u0102' * 100, 'rfind', '\U00100304')
249+
self.checkequal(0, '_a' + '\u0102' * 100, 'rfind', '_a')
250+
self.checkequal(0, '_a' + '\U00100304' * 100, 'rfind', '_a')
251+
self.checkequal(0, '_\u0102' + '\U00100304' * 100, 'rfind', '_\u0102')
252+
self.checkequal(-1, 'a' * 100, 'rfind', '\u0102a')
253+
self.checkequal(-1, 'a' * 100, 'rfind', '\U00100304a')
254+
self.checkequal(-1, '\u0102' * 100, 'rfind', '\U00100304\u0102')
216255

217256
def test_index(self):
218257
string_tests.CommonTest.test_index(self)
@@ -224,6 +263,19 @@ def test_index(self):
224263
self.assertRaises(ValueError, 'abcdefghiab'.index, 'abc', 1)
225264
self.assertRaises(ValueError, 'abcdefghi'.index, 'ghi', 8)
226265
self.assertRaises(ValueError, 'abcdefghi'.index, 'ghi', -1)
266+
# test mixed kinds
267+
self.checkequal(100, '\u0102' * 100 + 'a', 'index', 'a')
268+
self.checkequal(100, '\U00100304' * 100 + 'a', 'index', 'a')
269+
self.checkequal(100, '\U00100304' * 100 + '\u0102', 'index', '\u0102')
270+
self.assertRaises(ValueError, ('a' * 100).index, '\u0102')
271+
self.assertRaises(ValueError, ('a' * 100).index, '\U00100304')
272+
self.assertRaises(ValueError, ('\u0102' * 100).index, '\U00100304')
273+
self.checkequal(100, '\u0102' * 100 + 'a_', 'index', 'a_')
274+
self.checkequal(100, '\U00100304' * 100 + 'a_', 'index', 'a_')
275+
self.checkequal(100, '\U00100304' * 100 + '\u0102_', 'index', '\u0102_')
276+
self.assertRaises(ValueError, ('a' * 100).index, 'a\u0102')
277+
self.assertRaises(ValueError, ('a' * 100).index, 'a\U00100304')
278+
self.assertRaises(ValueError, ('\u0102' * 100).index, '\u0102\U00100304')
227279

228280
def test_rindex(self):
229281
string_tests.CommonTest.test_rindex(self)
@@ -237,6 +289,19 @@ def test_rindex(self):
237289
self.assertRaises(ValueError, 'defghiabc'.rindex, 'abc', 0, -1)
238290
self.assertRaises(ValueError, 'abcdefghi'.rindex, 'ghi', 0, 8)
239291
self.assertRaises(ValueError, 'abcdefghi'.rindex, 'ghi', 0, -1)
292+
# test mixed kinds
293+
self.checkequal(0, 'a' + '\u0102' * 100, 'rindex', 'a')
294+
self.checkequal(0, 'a' + '\U00100304' * 100, 'rindex', 'a')
295+
self.checkequal(0, '\u0102' + '\U00100304' * 100, 'rindex', '\u0102')
296+
self.assertRaises(ValueError, ('a' * 100).rindex, '\u0102')
297+
self.assertRaises(ValueError, ('a' * 100).rindex, '\U00100304')
298+
self.assertRaises(ValueError, ('\u0102' * 100).rindex, '\U00100304')
299+
self.checkequal(0, '_a' + '\u0102' * 100, 'rindex', '_a')
300+
self.checkequal(0, '_a' + '\U00100304' * 100, 'rindex', '_a')
301+
self.checkequal(0, '_\u0102' + '\U00100304' * 100, 'rindex', '_\u0102')
302+
self.assertRaises(ValueError, ('a' * 100).rindex, '\u0102a')
303+
self.assertRaises(ValueError, ('a' * 100).rindex, '\U00100304a')
304+
self.assertRaises(ValueError, ('\u0102' * 100).rindex, '\U00100304\u0102')
240305

241306
def test_maketrans_translate(self):
242307
# these work with plain translate()
@@ -277,6 +342,67 @@ def test_split(self):
277342
self.checkequalnofix(['a', 'b', 'c', 'd'], 'a//b//c//d', 'split', '//')
278343
self.checkequalnofix(['a', 'b', 'c', 'd'], 'a//b//c//d', 'split', '//')
279344
self.checkequalnofix(['endcase ', ''], 'endcase test', 'split', 'test')
345+
# test mixed kinds
346+
for left, right in ('ba', '\u0101\u0100', '\U00010301\U00010300'):
347+
left *= 9
348+
right *= 9
349+
for delim in ('c', '\u0102', '\U00010302'):
350+
self.checkequal([left + right],
351+
left + right, 'split', delim)
352+
self.checkequal([left, right],
353+
left + delim + right, 'split', delim)
354+
self.checkequal([left + right],
355+
left + right, 'split', delim * 2)
356+
self.checkequal([left, right],
357+
left + delim * 2 + right, 'split', delim *2)
358+
359+
def test_rsplit(self):
360+
string_tests.CommonTest.test_rsplit(self)
361+
# test mixed kinds
362+
for left, right in ('ba', '\u0101\u0100', '\U00010301\U00010300'):
363+
left *= 9
364+
right *= 9
365+
for delim in ('c', '\u0102', '\U00010302'):
366+
self.checkequal([left + right],
367+
left + right, 'rsplit', delim)
368+
self.checkequal([left, right],
369+
left + delim + right, 'rsplit', delim)
370+
self.checkequal([left + right],
371+
left + right, 'rsplit', delim * 2)
372+
self.checkequal([left, right],
373+
left + delim * 2 + right, 'rsplit', delim *2)
374+
375+
def test_partition(self):
376+
string_tests.MixinStrUnicodeUserStringTest.test_partition(self)
377+
# test mixed kinds
378+
for left, right in ('ba', '\u0101\u0100', '\U00010301\U00010300'):
379+
left *= 9
380+
right *= 9
381+
for delim in ('c', '\u0102', '\U00010302'):
382+
self.checkequal((left + right, '', ''),
383+
left + right, 'partition', delim)
384+
self.checkequal((left, delim, right),
385+
left + delim + right, 'partition', delim)
386+
self.checkequal((left + right, '', ''),
387+
left + right, 'partition', delim * 2)
388+
self.checkequal((left, delim * 2, right),
389+
left + delim * 2 + right, 'partition', delim * 2)
390+
391+
def test_rpartition(self):
392+
string_tests.MixinStrUnicodeUserStringTest.test_rpartition(self)
393+
# test mixed kinds
394+
for left, right in ('ba', '\u0101\u0100', '\U00010301\U00010300'):
395+
left *= 9
396+
right *= 9
397+
for delim in ('c', '\u0102', '\U00010302'):
398+
self.checkequal(('', '', left + right),
399+
left + right, 'rpartition', delim)
400+
self.checkequal((left, delim, right),
401+
left + delim + right, 'rpartition', delim)
402+
self.checkequal(('', '', left + right),
403+
left + right, 'rpartition', delim * 2)
404+
self.checkequal((left, delim * 2, right),
405+
left + delim * 2 + right, 'rpartition', delim * 2)
280406

281407
def test_join(self):
282408
string_tests.MixinStrUnicodeUserStringTest.test_join(self)
@@ -304,6 +430,22 @@ def test_replace(self):
304430
# method call forwarded from str implementation because of unicode argument
305431
self.checkequalnofix('one@two!three!', 'one!two!three!', 'replace', '!', '@', 1)
306432
self.assertRaises(TypeError, 'replace'.replace, "r", 42)
433+
# test mixed kinds
434+
for left, right in ('ba', '\u0101\u0100', '\U00010301\U00010300'):
435+
left *= 9
436+
right *= 9
437+
for delim in ('c', '\u0102', '\U00010302'):
438+
for repl in ('d', '\u0103', '\U00010303'):
439+
self.checkequal(left + right,
440+
left + right, 'replace', delim, repl)
441+
self.checkequal(left + repl + right,
442+
left + delim + right,
443+
'replace', delim, repl)
444+
self.checkequal(left + right,
445+
left + right, 'replace', delim * 2, repl)
446+
self.checkequal(left + repl + right,
447+
left + delim * 2 + right,
448+
'replace', delim * 2, repl)
307449

308450
@support.cpython_only
309451
def test_replace_id(self):
@@ -708,6 +850,14 @@ def test_contains(self):
708850
self.assertNotIn('asdf', '')
709851

710852
self.assertRaises(TypeError, "abc".__contains__)
853+
# test mixed kinds
854+
for fill in ('a', '\u0100', '\U00010300'):
855+
fill *= 9
856+
for delim in ('c', '\u0102', '\U00010302'):
857+
self.assertNotIn(delim, fill)
858+
self.assertIn(delim, fill + delim)
859+
self.assertNotIn(delim * 2, fill)
860+
self.assertIn(delim * 2, fill + delim * 2)
711861

712862
def test_issue18183(self):
713863
'\U00010000\U00100000'.lower()

0 commit comments

Comments
 (0)