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

Skip to content

Commit d52429f

Browse files
committed
Issue #3282: str.isprintable() should return False for undefined Unicode characters.
1 parent 6e7196f commit d52429f

6 files changed

Lines changed: 8936 additions & 8817 deletions

File tree

Lib/test/test_unicode.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -420,12 +420,17 @@ def test_isidentifier(self):
420420
self.assertFalse(" ".isidentifier())
421421
self.assertFalse("[".isidentifier())
422422
self.assertFalse("©".isidentifier())
423+
self.assertFalse("0".isidentifier())
423424

424425
def test_isprintable(self):
425426
self.assertTrue("".isprintable())
426427
self.assertTrue("abcdefg".isprintable())
427428
self.assertFalse("abcdefg\n".isprintable())
428-
self.assertTrue("\u0370".isprintable())
429+
# some defined Unicode character
430+
self.assertTrue("\u0374".isprintable())
431+
# undefined character
432+
self.assertFalse("\u0370".isprintable())
433+
# single surrogate character
429434
self.assertFalse("\ud800".isprintable())
430435

431436
def test_contains(self):
@@ -598,19 +603,23 @@ def __format__(self, format_spec):
598603
# format specifiers for user defined type
599604
self.assertEqual('{0:abc}'.format(C()), 'abc')
600605

601-
# !r, !s and !a coersions
606+
# !r, !s and !a coercions
602607
self.assertEqual('{0!s}'.format('Hello'), 'Hello')
603608
self.assertEqual('{0!s:}'.format('Hello'), 'Hello')
604609
self.assertEqual('{0!s:15}'.format('Hello'), 'Hello ')
605610
self.assertEqual('{0!s:15s}'.format('Hello'), 'Hello ')
606611
self.assertEqual('{0!r}'.format('Hello'), "'Hello'")
607612
self.assertEqual('{0!r:}'.format('Hello'), "'Hello'")
608613
self.assertEqual('{0!r}'.format(F('Hello')), 'F(Hello)')
609-
self.assertEqual('{0!r}'.format(F('\u0370')), 'F(\u0370)')
614+
self.assertEqual('{0!r}'.format('\u0370'), "'\\u0370'") # nonprintable
615+
self.assertEqual('{0!r}'.format('\u0374'), "'\u0374'") # printable
616+
self.assertEqual('{0!r}'.format(F('\u0374')), 'F(\u0374)')
610617
self.assertEqual('{0!a}'.format('Hello'), "'Hello'")
618+
self.assertEqual('{0!a}'.format('\u0370'), "'\\u0370'") # nonprintable
619+
self.assertEqual('{0!a}'.format('\u0374'), "'\\u0374'") # printable
611620
self.assertEqual('{0!a:}'.format('Hello'), "'Hello'")
612621
self.assertEqual('{0!a}'.format(F('Hello')), 'F(Hello)')
613-
self.assertEqual('{0!a}'.format(F('\u0370')), 'F(\\u0370)')
622+
self.assertEqual('{0!a}'.format(F('\u0374')), 'F(\\u0374)')
614623

615624
# test fallback to object.__format__
616625
self.assertEqual('{0}'.format({}), '{}')

Misc/NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ What's new in Python 3.0b2?
1212
Core and Builtins
1313
-----------------
1414

15+
- Issue #3282: str.isprintable() should return False for undefined
16+
Unicode characters.
17+
1518
- Issue #3236: Return small longs from PyLong_FromString.
1619

1720
Library

0 commit comments

Comments
 (0)