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

Skip to content

Commit f7ef475

Browse files
Added tests for mixed kinds of Unicode strings.
2 parents 520e00d + be1eb14 commit f7ef475

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
@@ -181,6 +181,19 @@ def test_count(self):
181181
self.checkequalnofix(3, 'aaa', 'count', 'a', -10)
182182
self.checkequalnofix(2, 'aaa', 'count', 'a', 0, -1)
183183
self.checkequalnofix(0, 'aaa', 'count', 'a', 0, -10)
184+
# test mixed kinds
185+
self.checkequal(10, '\u0102' + 'a' * 10, 'count', 'a')
186+
self.checkequal(10, '\U00100304' + 'a' * 10, 'count', 'a')
187+
self.checkequal(10, '\U00100304' + '\u0102' * 10, 'count', '\u0102')
188+
self.checkequal(0, 'a' * 10, 'count', '\u0102')
189+
self.checkequal(0, 'a' * 10, 'count', '\U00100304')
190+
self.checkequal(0, '\u0102' * 10, 'count', '\U00100304')
191+
self.checkequal(10, '\u0102' + 'a_' * 10, 'count', 'a_')
192+
self.checkequal(10, '\U00100304' + 'a_' * 10, 'count', 'a_')
193+
self.checkequal(10, '\U00100304' + '\u0102_' * 10, 'count', '\u0102_')
194+
self.checkequal(0, 'a' * 10, 'count', 'a\u0102')
195+
self.checkequal(0, 'a' * 10, 'count', 'a\U00100304')
196+
self.checkequal(0, '\u0102' * 10, 'count', '\u0102\U00100304')
184197

185198
def test_find(self):
186199
string_tests.CommonTest.test_find(self)
@@ -199,6 +212,19 @@ def test_find(self):
199212

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

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

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

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

242307
def test_maketrans_translate(self):
243308
# these work with plain translate()
@@ -306,6 +371,67 @@ def test_split(self):
306371
self.checkequalnofix(['a', 'b', 'c', 'd'], 'a//b//c//d', 'split', '//')
307372
self.checkequalnofix(['a', 'b', 'c', 'd'], 'a//b//c//d', 'split', '//')
308373
self.checkequalnofix(['endcase ', ''], 'endcase test', 'split', 'test')
374+
# test mixed kinds
375+
for left, right in ('ba', '\u0101\u0100', '\U00010301\U00010300'):
376+
left *= 9
377+
right *= 9
378+
for delim in ('c', '\u0102', '\U00010302'):
379+
self.checkequal([left + right],
380+
left + right, 'split', delim)
381+
self.checkequal([left, right],
382+
left + delim + right, 'split', delim)
383+
self.checkequal([left + right],
384+
left + right, 'split', delim * 2)
385+
self.checkequal([left, right],
386+
left + delim * 2 + right, 'split', delim *2)
387+
388+
def test_rsplit(self):
389+
string_tests.CommonTest.test_rsplit(self)
390+
# test mixed kinds
391+
for left, right in ('ba', '\u0101\u0100', '\U00010301\U00010300'):
392+
left *= 9
393+
right *= 9
394+
for delim in ('c', '\u0102', '\U00010302'):
395+
self.checkequal([left + right],
396+
left + right, 'rsplit', delim)
397+
self.checkequal([left, right],
398+
left + delim + right, 'rsplit', delim)
399+
self.checkequal([left + right],
400+
left + right, 'rsplit', delim * 2)
401+
self.checkequal([left, right],
402+
left + delim * 2 + right, 'rsplit', delim *2)
403+
404+
def test_partition(self):
405+
string_tests.MixinStrUnicodeUserStringTest.test_partition(self)
406+
# test mixed kinds
407+
for left, right in ('ba', '\u0101\u0100', '\U00010301\U00010300'):
408+
left *= 9
409+
right *= 9
410+
for delim in ('c', '\u0102', '\U00010302'):
411+
self.checkequal((left + right, '', ''),
412+
left + right, 'partition', delim)
413+
self.checkequal((left, delim, right),
414+
left + delim + right, 'partition', delim)
415+
self.checkequal((left + right, '', ''),
416+
left + right, 'partition', delim * 2)
417+
self.checkequal((left, delim * 2, right),
418+
left + delim * 2 + right, 'partition', delim * 2)
419+
420+
def test_rpartition(self):
421+
string_tests.MixinStrUnicodeUserStringTest.test_rpartition(self)
422+
# test mixed kinds
423+
for left, right in ('ba', '\u0101\u0100', '\U00010301\U00010300'):
424+
left *= 9
425+
right *= 9
426+
for delim in ('c', '\u0102', '\U00010302'):
427+
self.checkequal(('', '', left + right),
428+
left + right, 'rpartition', delim)
429+
self.checkequal((left, delim, right),
430+
left + delim + right, 'rpartition', delim)
431+
self.checkequal(('', '', left + right),
432+
left + right, 'rpartition', delim * 2)
433+
self.checkequal((left, delim * 2, right),
434+
left + delim * 2 + right, 'rpartition', delim * 2)
309435

310436
def test_join(self):
311437
string_tests.MixinStrUnicodeUserStringTest.test_join(self)
@@ -333,6 +459,22 @@ def test_replace(self):
333459
# method call forwarded from str implementation because of unicode argument
334460
self.checkequalnofix('one@two!three!', 'one!two!three!', 'replace', '!', '@', 1)
335461
self.assertRaises(TypeError, 'replace'.replace, "r", 42)
462+
# test mixed kinds
463+
for left, right in ('ba', '\u0101\u0100', '\U00010301\U00010300'):
464+
left *= 9
465+
right *= 9
466+
for delim in ('c', '\u0102', '\U00010302'):
467+
for repl in ('d', '\u0103', '\U00010303'):
468+
self.checkequal(left + right,
469+
left + right, 'replace', delim, repl)
470+
self.checkequal(left + repl + right,
471+
left + delim + right,
472+
'replace', delim, repl)
473+
self.checkequal(left + right,
474+
left + right, 'replace', delim * 2, repl)
475+
self.checkequal(left + repl + right,
476+
left + delim * 2 + right,
477+
'replace', delim * 2, repl)
336478

337479
@support.cpython_only
338480
def test_replace_id(self):
@@ -737,6 +879,14 @@ def test_contains(self):
737879
self.assertNotIn('asdf', '')
738880

739881
self.assertRaises(TypeError, "abc".__contains__)
882+
# test mixed kinds
883+
for fill in ('a', '\u0100', '\U00010300'):
884+
fill *= 9
885+
for delim in ('c', '\u0102', '\U00010302'):
886+
self.assertNotIn(delim, fill)
887+
self.assertIn(delim, fill + delim)
888+
self.assertNotIn(delim * 2, fill)
889+
self.assertIn(delim * 2, fill + delim * 2)
740890

741891
def test_issue18183(self):
742892
'\U00010000\U00100000'.lower()

0 commit comments

Comments
 (0)