Author: Philip Jenvey <[email protected]>
Branch: py3k
Changeset: r58859:39e9d5622fde
Date: 2012-11-13 12:03 -0800
http://bitbucket.org/pypy/pypy/changeset/39e9d5622fde/
Log: add bytearray.maketrans and force it to always return exact bytes
diff --git a/pypy/objspace/std/bytearraytype.py
b/pypy/objspace/std/bytearraytype.py
--- a/pypy/objspace/std/bytearraytype.py
+++ b/pypy/objspace/std/bytearraytype.py
@@ -13,7 +13,7 @@
str_expandtabs, str_ljust, str_rjust, str_center, str_zfill,
str_join, str_split, str_rsplit, str_partition, str_rpartition,
str_splitlines, str_translate)
-from pypy.objspace.std.stringtype import makebytesdata_w
+from pypy.objspace.std.stringtype import descr_maketrans, makebytesdata_w
from pypy.objspace.std.listtype import (
list_append, list_extend)
@@ -143,6 +143,7 @@
__init__ = interp2app(descr__init__),
__hash__ = None,
__reduce__ = interp2app(descr_bytearray__reduce__),
- fromhex = interp2app(descr_fromhex, as_classmethod=True)
+ fromhex = interp2app(descr_fromhex, as_classmethod=True),
+ maketrans = interp2app(descr_maketrans, as_classmethod=True)
)
bytearray_typedef.registermethods(globals())
diff --git a/pypy/objspace/std/stringtype.py b/pypy/objspace/std/stringtype.py
--- a/pypy/objspace/std/stringtype.py
+++ b/pypy/objspace/std/stringtype.py
@@ -390,17 +390,7 @@
char_to = list_to[i]
base_table[pos_from] = char_to
- chars = ''.join(base_table)
- if space.config.objspace.std.withrope:
- from pypy.objspace.std.ropeobject import rope, W_RopeObject
- w_obj = space.allocate_instance(W_RopeObject, w_type)
- W_RopeObject.__init__(w_obj, rope.LiteralStringNode(chars))
- return w_obj
- else:
- from pypy.objspace.std.stringobject import W_StringObject
- w_obj = space.allocate_instance(W_StringObject, w_type)
- W_StringObject.__init__(w_obj, chars)
- return w_obj
+ return wrapstr(space, ''.join(base_table))
# ____________________________________________________________
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
@@ -458,3 +458,9 @@
for i in range(count):
b[i:i+1] = b'y'
assert bytes(b) == b'y' * count
+
+ def test_maketrans(self):
+ table =
b'\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037
!"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`xyzdefghijklmnopqrstuvwxyz{|}~\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377'
+ result = bytearray.maketrans(b'abc', b'xyz')
+ assert result == table
+ assert type(result) is bytes
diff --git a/pypy/objspace/std/test/test_stringobject.py
b/pypy/objspace/std/test/test_stringobject.py
--- a/pypy/objspace/std/test/test_stringobject.py
+++ b/pypy/objspace/std/test/test_stringobject.py
@@ -753,6 +753,10 @@
iterable = b"hello"
raises(TypeError, len, iter(iterable))
+ def test_maketrans(self):
+ table =
b'\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037
!"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`xyzdefghijklmnopqrstuvwxyz{|}~\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377'
+ assert bytes.maketrans(b'abc', b'xyz') == table
+
def test_compatibility(self):
#a whole bunch of methods should accept bytearray/memoryview without
complaining...
#I don't know how slavishly we should follow the cpython spec here,
since it appears
@@ -779,7 +783,8 @@
assert not b.startswith((bb, bb))
assert not b.endswith(bb)
assert not b.endswith((bb, bb))
- assert b.maketrans(bb, bb)
+ assert bytes.maketrans(bb, bb)
+ assert bytearray.maketrans(bb, bb)
class AppTestPrebuilt(AppTestStringObject):
spaceconfig = {"objspace.std.withprebuiltchar": True}
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit