diff --git a/Lib/UserString.py b/Lib/UserString.py index e8e0fedd87f..914f3ce14a8 100755 --- a/Lib/UserString.py +++ b/Lib/UserString.py @@ -126,6 +126,10 @@ class UserString: def upper(self): return self.__class__(self.data.upper()) def zfill(self, width): return self.__class__(self.data.zfill(width)) + # the following methods are defined for unicode objects only: + def iswide(self): return self.data.iswide() + def width(self): return self.data.width() + class MutableString(UserString): """mutable string objects diff --git a/Lib/test/string_tests.py b/Lib/test/string_tests.py index 860c1f2f83a..edccb8fa557 100644 --- a/Lib/test/string_tests.py +++ b/Lib/test/string_tests.py @@ -695,3 +695,28 @@ class MixinStrUserStringTest: self.checkraises(TypeError, 'xyz', 'decode', 42) self.checkraises(TypeError, 'xyz', 'encode', 42) + + +class MixinUnicodeUserStringTest: + # Additional tests that only work with + # unicode compatible object, i.e. unicode and UserString + + def test_iswide(self): + self.checkequal(False, u'', 'iswide') + self.checkequal(False, u'\x1f', 'iswide') # Neutral + self.checkequal(False, u'\x20', 'iswide') # Narrow + self.checkequal(True, u'\u2329', 'iswide') # Wide + self.checkequal(False, u'\uff64', 'iswide') # Half + self.checkequal(True, u'\u3000', 'iswide') # Full + self.checkequal(False, u'\u2460', 'iswide') # Ambiguous + self.checkequal(True, u'\ud55c\uae00', 'iswide') + self.checkequal(False, u'\ud55c\u2606\uae00', 'iswide') + + def test_width(self): + self.checkequal(0, u'', 'width') + self.checkequal(4, u'abcd', 'width') + self.checkequal(2, u'\u0187\u01c9', 'width') + self.checkequal(3, u'\u2460\u2329', 'width') + self.checkequal(3, u'\u2329\u2460', 'width') + self.checkequal(4, u'\ud55c\uae00', 'width') + self.checkequal(5, u'\ud55c\u2606\uae00', 'width') diff --git a/Lib/test/test_userstring.py b/Lib/test/test_userstring.py index 990199ed5c3..b70081f40ff 100755 --- a/Lib/test/test_userstring.py +++ b/Lib/test/test_userstring.py @@ -11,7 +11,8 @@ class UserStringTest( string_tests.CommonTest, string_tests.MixinStrUnicodeUserStringTest, string_tests.MixinStrStringUserStringTest, - string_tests.MixinStrUserStringTest + string_tests.MixinStrUserStringTest, + string_tests.MixinUnicodeUserStringTest ): type2test = UserString