[pypy-commit] pypy default: str.strip(), str.lstrip(), str.rstrip()

arigo noreply at buildbot.pypy.org
Wed Aug 20 09:54:00 CEST 2014


Author: Armin Rigo <arigo at tunes.org>
Branch: 
Changeset: r72919:0ff8cabf7240
Date: 2014-08-20 09:36 +0200
http://bitbucket.org/pypy/pypy/changeset/0ff8cabf7240/

Log:	str.strip(), str.lstrip(), str.rstrip()

diff --git a/pypy/objspace/std/bytesobject.py b/pypy/objspace/std/bytesobject.py
--- a/pypy/objspace/std/bytesobject.py
+++ b/pypy/objspace/std/bytesobject.py
@@ -747,6 +747,27 @@
             return self_as_uni.descr_rsplit(space, w_sep, maxsplit)
         return self._StringMethods_descr_rsplit(space, w_sep, maxsplit)
 
+    _StringMethods_descr_strip = descr_strip
+    def descr_strip(self, space, w_chars=None):
+        if w_chars is not None and space.isinstance_w(w_chars, space.w_unicode):
+            self_as_uni = unicode_from_encoded_object(space, self, None, None)
+            return self_as_uni.descr_strip(space, w_chars)
+        return self._StringMethods_descr_strip(space, w_chars)
+
+    _StringMethods_descr_lstrip = descr_lstrip
+    def descr_lstrip(self, space, w_chars=None):
+        if w_chars is not None and space.isinstance_w(w_chars, space.w_unicode):
+            self_as_uni = unicode_from_encoded_object(space, self, None, None)
+            return self_as_uni.descr_lstrip(space, w_chars)
+        return self._StringMethods_descr_lstrip(space, w_chars)
+
+    _StringMethods_descr_rstrip = descr_rstrip
+    def descr_rstrip(self, space, w_chars=None):
+        if w_chars is not None and space.isinstance_w(w_chars, space.w_unicode):
+            self_as_uni = unicode_from_encoded_object(space, self, None, None)
+            return self_as_uni.descr_rstrip(space, w_chars)
+        return self._StringMethods_descr_rstrip(space, w_chars)
+
     def _join_return_one(self, space, w_obj):
         return (space.is_w(space.type(w_obj), space.w_str) or
                 space.is_w(space.type(w_obj), space.w_unicode))
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
@@ -333,6 +333,17 @@
         assert u'xyzzyhelloxyzzy'.lstrip('xyz') == u'helloxyzzy'
         assert u'xyzzyhelloxyzzy'.rstrip(u'xyz') == u'xyzzyhello'
 
+    def test_strip_str_unicode(self):
+        x = "--abc--".strip(u"-")
+        assert (x, type(x)) == (u"abc", unicode)
+        x = "--abc--".lstrip(u"-")
+        assert (x, type(x)) == (u"abc--", unicode)
+        x = "--abc--".rstrip(u"-")
+        assert (x, type(x)) == (u"--abc", unicode)
+        raises(UnicodeDecodeError, "\x80".strip, u"")
+        raises(UnicodeDecodeError, "\x80".lstrip, u"")
+        raises(UnicodeDecodeError, "\x80".rstrip, u"")
+
     def test_long_from_unicode(self):
         assert long(u'12345678901234567890') == 12345678901234567890
         assert int(u'12345678901234567890') == 12345678901234567890


More information about the pypy-commit mailing list