@@ -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' , '\u0102 a' )
253+ self .checkequal (- 1 , 'a' * 100 , 'rfind' , '\U00100304 a' )
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 , '\u0102 a' )
303+ self .assertRaises (ValueError , ('a' * 100 ).rindex , '\U00100304 a' )
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