Author: touilleMan <[email protected]>
Branch: py3k
Changeset: r85842:d93d0a6c41f9
Date: 2016-07-24 15:46 +0200
http://bitbucket.org/pypy/pypy/changeset/d93d0a6c41f9/

Log:    Add missing str.casefold method.

diff --git a/pypy/objspace/std/test/test_unicodeobject.py 
b/pypy/objspace/std/test/test_unicodeobject.py
--- a/pypy/objspace/std/test/test_unicodeobject.py
+++ b/pypy/objspace/std/test/test_unicodeobject.py
@@ -976,3 +976,12 @@
         raises(TypeError, "u''.encode(None)")
         raises(TypeError, "str(b'', encoding=None)")
         raises(TypeError, 'u"".encode("utf-8", None)')
+
+    def test_casefold(self):
+        assert 'hello'.casefold() == 'hello'
+        assert 'hELlo'.casefold() == 'hello'
+        assert '&#223;'.casefold() == 'ss'
+        assert '&#64257;'.casefold() == 'fi'
+        assert '\u03a3'.casefold() == '\u03c3'
+        assert 'A\u0345\u03a3'.casefold() == 'a\u03b9\u03c3'
+        assert '\u00b5'.casefold() == '\u03bc'
diff --git a/pypy/objspace/std/unicodeobject.py 
b/pypy/objspace/std/unicodeobject.py
--- a/pypy/objspace/std/unicodeobject.py
+++ b/pypy/objspace/std/unicodeobject.py
@@ -414,6 +414,19 @@
     def _join_check_item(self, space, w_obj):
         return not space.isinstance_w(w_obj, space.w_unicode)
 
+    def descr_casefold(self, space):
+        value = self._val(space)
+        builder = self._builder(len(value))
+        for c in value:
+            c_ord = ord(c)
+            folded = unicodedb.casefold_lookup(c_ord)
+            if folded is None:
+                builder.append(unichr(unicodedb.tolower(c_ord)))
+            else:
+                for r in folded:
+                    builder.append(unichr(r))
+        return self._new(builder.build())
+
     def descr_isdecimal(self, space):
         return self._is_generic(space, '_isdecimal')
 
@@ -815,6 +828,12 @@
         and there is at least one character in S, False otherwise.
         """
 
+    def casefold():
+        """S.casefold() -> str
+
+        Return a version of S suitable for caseless comparisons.
+        """
+
     def isdecimal():
         """S.isdecimal() -> bool
 
@@ -1105,6 +1124,8 @@
 
     capitalize = interp2app(W_UnicodeObject.descr_capitalize,
                             doc=UnicodeDocstrings.capitalize.__doc__),
+    casefold = interp2app(W_UnicodeObject.descr_casefold,
+                            doc=UnicodeDocstrings.casefold.__doc__),
     center = interp2app(W_UnicodeObject.descr_center,
                         doc=UnicodeDocstrings.center.__doc__),
     count = interp2app(W_UnicodeObject.descr_count,
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to