[pypy-commit] pypy default: merge branch to reject 'a'.strip(buffer(' ')) like cpython
mattip
pypy.commits at gmail.com
Fri Sep 30 08:40:51 EDT 2016
Author: Matti Picus <matti.picus at gmail.com>
Branch:
Changeset: r87468:3495ebc92c88
Date: 2016-09-30 13:03 +0300
http://bitbucket.org/pypy/pypy/changeset/3495ebc92c88/
Log: merge branch to reject 'a'.strip(buffer(' ')) like cpython
diff --git a/pypy/objspace/std/bytearrayobject.py b/pypy/objspace/std/bytearrayobject.py
--- a/pypy/objspace/std/bytearrayobject.py
+++ b/pypy/objspace/std/bytearrayobject.py
@@ -82,7 +82,8 @@
return False
@staticmethod
- def _op_val(space, w_other):
+ def _op_val(space, w_other, strict=None):
+ # bytearray does not enforce the strict restriction (on strip at least)
return space.buffer_w(w_other, space.BUF_SIMPLE).as_str()
def _chr(self, char):
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
@@ -501,7 +501,10 @@
isinstance(w_other, W_UnicodeObject))
@staticmethod
- def _op_val(space, w_other):
+ def _op_val(space, w_other, strict=None):
+ if strict and not space.isinstance_w(w_other, space.w_str):
+ raise oefmt(space.w_TypeError,
+ "%s arg must be None, str or unicode", strict)
try:
return space.str_w(w_other)
except OperationError as e:
diff --git a/pypy/objspace/std/stringmethods.py b/pypy/objspace/std/stringmethods.py
--- a/pypy/objspace/std/stringmethods.py
+++ b/pypy/objspace/std/stringmethods.py
@@ -652,7 +652,7 @@
def _strip(self, space, w_chars, left, right):
"internal function called by str_xstrip methods"
value = self._val(space)
- chars = self._op_val(space, w_chars)
+ chars = self._op_val(space, w_chars, strict='strip')
lpos = 0
rpos = len(value)
diff --git a/pypy/objspace/std/test/test_bytearrayobject.py b/pypy/objspace/std/test/test_bytearrayobject.py
--- a/pypy/objspace/std/test/test_bytearrayobject.py
+++ b/pypy/objspace/std/test/test_bytearrayobject.py
@@ -128,7 +128,8 @@
b = bytearray('mississippi')
- for strip_type in str, memoryview:
+ for strip_type in str, memoryview, buffer:
+ print 'strip_type', strip_type
assert b.strip(strip_type('i')) == 'mississipp'
assert b.strip(strip_type('m')) == 'ississippi'
assert b.strip(strip_type('pi')) == 'mississ'
diff --git a/pypy/objspace/std/test/test_bytesobject.py b/pypy/objspace/std/test/test_bytesobject.py
--- a/pypy/objspace/std/test/test_bytesobject.py
+++ b/pypy/objspace/std/test/test_bytesobject.py
@@ -251,6 +251,12 @@
assert b'xyzzyhelloxyzzy'.strip(b'xyz') == b'hello'
assert b'xyzzyhelloxyzzy'.lstrip(b'xyz') == b'helloxyzzy'
assert b'xyzzyhelloxyzzy'.rstrip(b'xyz') == b'xyzzyhello'
+ exc = raises(TypeError, s.strip, buffer(' '))
+ assert str(exc.value) == 'strip arg must be None, str or unicode'
+ exc = raises(TypeError, s.rstrip, buffer(' '))
+ assert str(exc.value) == 'strip arg must be None, str or unicode'
+ exc = raises(TypeError, s.lstrip, buffer(' '))
+ assert str(exc.value) == 'strip arg must be None, str or unicode'
def test_zfill(self):
assert b'123'.zfill(2) == b'123'
@@ -656,7 +662,7 @@
table = maketrans(b'abc', b'xyz')
assert b'xyzxyz' == b'xyzabcdef'.translate(table, b'def')
exc = raises(TypeError, "'xyzabcdef'.translate(memoryview(table), 'def')")
- assert str(exc.value) == 'expected a character buffer object'
+ assert 'expected a' in str(exc.value)
table = maketrans(b'a', b'A')
assert b'Abc' == b'abc'.translate(table)
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
@@ -332,6 +332,12 @@
assert u'xyzzyhelloxyzzy'.strip(u'xyz') == u'hello'
assert u'xyzzyhelloxyzzy'.lstrip('xyz') == u'helloxyzzy'
assert u'xyzzyhelloxyzzy'.rstrip(u'xyz') == u'xyzzyhello'
+ exc = raises(TypeError, s.strip, buffer(' '))
+ assert str(exc.value) == 'strip arg must be None, unicode or str'
+ exc = raises(TypeError, s.rstrip, buffer(' '))
+ assert str(exc.value) == 'strip arg must be None, unicode or str'
+ exc = raises(TypeError, s.lstrip, buffer(' '))
+ assert str(exc.value) == 'strip arg must be None, unicode or str'
def test_strip_str_unicode(self):
x = "--abc--".strip(u"-")
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
@@ -124,11 +124,14 @@
return True
@staticmethod
- def _op_val(space, w_other):
+ def _op_val(space, w_other, strict=None):
if isinstance(w_other, W_UnicodeObject):
return w_other._value
if space.isinstance_w(w_other, space.w_str):
return unicode_from_string(space, w_other)._value
+ if strict:
+ raise oefmt(space.w_TypeError,
+ "%s arg must be None, unicode or str", strict)
return unicode_from_encoded_object(
space, w_other, None, "strict")._value
More information about the pypy-commit
mailing list