diff options
Diffstat (limited to 'Lib/test/test_unicode.py')
| -rw-r--r-- | Lib/test/test_unicode.py | 54 | 
1 files changed, 42 insertions, 12 deletions
| diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py index 2cc1d7c..1429a6d 100644 --- a/Lib/test/test_unicode.py +++ b/Lib/test/test_unicode.py @@ -8,6 +8,7 @@ Written by Marc-Andre Lemburg (mal@lemburg.com).  import _string  import codecs  import itertools +import operator  import struct  import sys  import unittest @@ -315,6 +316,7 @@ class UnicodeTest(string_tests.CommonTest,                               {ord('a'): None, ord('b'): ''})          self.checkequalnofix('xyyx', 'xzx', 'translate',                               {ord('z'): 'yy'}) +          # this needs maketrans()          self.checkequalnofix('abababc', 'abababc', 'translate',                               {'b': '<i>'}) @@ -324,6 +326,33 @@ class UnicodeTest(string_tests.CommonTest,          tbl = self.type2test.maketrans('abc', 'xyz', 'd')          self.checkequalnofix('xyzzy', 'abdcdcbdddd', 'translate', tbl) +        # various tests switching from ASCII to latin1 or the opposite; +        # same length, remove a letter, or replace with a longer string. +        self.assertEqual("[a]".translate(str.maketrans('a', 'X')), +                         "[X]") +        self.assertEqual("[a]".translate(str.maketrans({'a': 'X'})), +                         "[X]") +        self.assertEqual("[a]".translate(str.maketrans({'a': None})), +                         "[]") +        self.assertEqual("[a]".translate(str.maketrans({'a': 'XXX'})), +                         "[XXX]") +        self.assertEqual("[a]".translate(str.maketrans({'a': '\xe9'})), +                         "[\xe9]") +        self.assertEqual("[a]".translate(str.maketrans({'a': '<\xe9>'})), +                         "[<\xe9>]") +        self.assertEqual("[\xe9]".translate(str.maketrans({'\xe9': 'a'})), +                         "[a]") +        self.assertEqual("[\xe9]".translate(str.maketrans({'\xe9': None})), +                         "[]") + +        # invalid Unicode characters +        invalid_char = 0x10ffff+1 +        for before in "a\xe9\u20ac\U0010ffff": +            mapping = str.maketrans({before: invalid_char}) +            text = "[%s]" % before +            self.assertRaises(ValueError, text.translate, mapping) + +        # errors          self.assertRaises(TypeError, self.type2test.maketrans)          self.assertRaises(ValueError, self.type2test.maketrans, 'abc', 'defg')          self.assertRaises(TypeError, self.type2test.maketrans, 2, 'def') @@ -1306,20 +1335,20 @@ class UnicodeTest(string_tests.CommonTest,          self.assertEqual('%.2s' % "a\xe9\u20ac", 'a\xe9')          #issue 19995 -        class PsuedoInt: +        class PseudoInt:              def __init__(self, value):                  self.value = int(value)              def __int__(self):                  return self.value              def __index__(self):                  return self.value -        class PsuedoFloat: +        class PseudoFloat:              def __init__(self, value):                  self.value = float(value)              def __int__(self):                  return int(self.value) -        pi = PsuedoFloat(3.1415) -        letter_m = PsuedoInt(109) +        pi = PseudoFloat(3.1415) +        letter_m = PseudoInt(109)          self.assertEqual('%x' % 42, '2a')          self.assertEqual('%X' % 15, 'F')          self.assertEqual('%o' % 9, '11') @@ -1328,11 +1357,11 @@ class UnicodeTest(string_tests.CommonTest,          self.assertEqual('%X' % letter_m, '6D')          self.assertEqual('%o' % letter_m, '155')          self.assertEqual('%c' % letter_m, 'm') -        self.assertWarns(DeprecationWarning, '%x'.__mod__, pi), -        self.assertWarns(DeprecationWarning, '%x'.__mod__, 3.14), -        self.assertWarns(DeprecationWarning, '%X'.__mod__, 2.11), -        self.assertWarns(DeprecationWarning, '%o'.__mod__, 1.79), -        self.assertWarns(DeprecationWarning, '%c'.__mod__, pi), +        self.assertRaisesRegex(TypeError, '%x format: an integer is required, not float', operator.mod, '%x', 3.14), +        self.assertRaisesRegex(TypeError, '%X format: an integer is required, not float', operator.mod, '%X', 2.11), +        self.assertRaisesRegex(TypeError, '%o format: an integer is required, not float', operator.mod, '%o', 1.79), +        self.assertRaisesRegex(TypeError, '%x format: an integer is required, not PseudoFloat', operator.mod, '%x', pi), +        self.assertRaises(TypeError, operator.mod, '%c', pi),      def test_formatting_with_enum(self):          # issue18780 @@ -2053,7 +2082,8 @@ class UnicodeTest(string_tests.CommonTest,              'cp863', 'cp865', 'cp866', 'cp1125',              'iso8859_10', 'iso8859_13', 'iso8859_14', 'iso8859_15',              'iso8859_2', 'iso8859_3', 'iso8859_4', 'iso8859_5', 'iso8859_6', -            'iso8859_7', 'iso8859_9', 'koi8_r', 'latin_1', +            'iso8859_7', 'iso8859_9', +            'koi8_r', 'koi8_t', 'koi8_u', 'kz1048', 'latin_1',              'mac_cyrillic', 'mac_latin2',              'cp1250', 'cp1251', 'cp1252', 'cp1253', 'cp1254', 'cp1255', @@ -2081,14 +2111,14 @@ class UnicodeTest(string_tests.CommonTest,              'cp863', 'cp865', 'cp866', 'cp1125',              'iso8859_10', 'iso8859_13', 'iso8859_14', 'iso8859_15',              'iso8859_2', 'iso8859_4', 'iso8859_5', -            'iso8859_9', 'koi8_r', 'latin_1', +            'iso8859_9', 'koi8_r', 'koi8_u', 'latin_1',              'mac_cyrillic', 'mac_latin2',              ### These have undefined mappings:              #'cp1250', 'cp1251', 'cp1252', 'cp1253', 'cp1254', 'cp1255',              #'cp1256', 'cp1257', 'cp1258',              #'cp424', 'cp856', 'cp857', 'cp864', 'cp869', 'cp874', -            #'iso8859_3', 'iso8859_6', 'iso8859_7', +            #'iso8859_3', 'iso8859_6', 'iso8859_7', 'koi8_t', 'kz1048',              #'mac_greek', 'mac_iceland','mac_roman', 'mac_turkish',              ### These fail the round-trip: | 
