]> granicus.if.org Git - python/commitdiff
Add iswide() and width() method for UserString according as the
authorHye-Shik Chang <hyeshik@gmail.com>
Fri, 4 Jun 2004 03:18:12 +0000 (03:18 +0000)
committerHye-Shik Chang <hyeshik@gmail.com>
Fri, 4 Jun 2004 03:18:12 +0000 (03:18 +0000)
addition to unicode objects.

Lib/UserString.py
Lib/test/string_tests.py
Lib/test/test_userstring.py

index e8e0fedd87f783724cc4360ac9662c564407abc8..914f3ce14a87456f3cdc6624df399cffdd8d03b0 100755 (executable)
@@ -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
 
index 860c1f2f83a965a6862fdce664f148794fc2c39d..edccb8fa55711ee3b155cc8bec43f8bd57aef322 100644 (file)
@@ -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')
index 990199ed5c3d217fa131e6460e946bc06beba3a6..b70081f40ff686630852f6b64eb200b5aedc57c2 100755 (executable)
@@ -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