[pypy-commit] pypy set-strategies: - weaken the test as needed for OrderedDict and fix it
arigo
noreply at buildbot.pypy.org
Mon Mar 26 20:08:18 CEST 2012
Author: Armin Rigo <arigo at tunes.org>
Branch: set-strategies
Changeset: r54005:eef2e1c3a6d1
Date: 2012-03-26 20:07 +0200
http://bitbucket.org/pypy/pypy/changeset/eef2e1c3a6d1/
Log: - weaken the test as needed for OrderedDict and fix it
- add frozenset support to space.listview*().
diff --git a/pypy/objspace/std/objspace.py b/pypy/objspace/std/objspace.py
--- a/pypy/objspace/std/objspace.py
+++ b/pypy/objspace/std/objspace.py
@@ -25,6 +25,7 @@
from pypy.objspace.std.objectobject import W_ObjectObject
from pypy.objspace.std.ropeobject import W_RopeObject
from pypy.objspace.std.iterobject import W_SeqIterObject
+from pypy.objspace.std.setobject import W_BaseSetObject
from pypy.objspace.std.setobject import W_SetObject, W_FrozensetObject
from pypy.objspace.std.sliceobject import W_SliceObject
from pypy.objspace.std.smallintobject import W_SmallIntObject
@@ -448,9 +449,9 @@
def listview_str(self, w_obj):
if isinstance(w_obj, W_ListObject):
return w_obj.getitems_str()
- if isinstance(w_obj, W_SetObject):
+ if isinstance(w_obj, W_BaseSetObject):
return w_obj.listview_str()
- if isinstance(w_obj, W_DictMultiObject):
+ if type(w_obj) is W_DictMultiObject: # test_listobject.test_uses_cus.
return w_obj.listview_str()
if isinstance(w_obj, W_StringObject):
return w_obj.listview_str()
@@ -459,9 +460,9 @@
def listview_int(self, w_obj):
if isinstance(w_obj, W_ListObject):
return w_obj.getitems_int()
- if isinstance(w_obj, W_SetObject):
+ if isinstance(w_obj, W_BaseSetObject):
return w_obj.listview_int()
- if isinstance(w_obj, W_DictMultiObject):
+ if type(w_obj) is W_DictMultiObject: # test_listobject.test_uses_cus.
return w_obj.listview_int()
return None
diff --git a/pypy/objspace/std/test/test_listobject.py b/pypy/objspace/std/test/test_listobject.py
--- a/pypy/objspace/std/test/test_listobject.py
+++ b/pypy/objspace/std/test/test_listobject.py
@@ -1182,13 +1182,12 @@
assert list(g) == []
def test_uses_custom_iterator(self):
- for base, arg in [(list, []), (list, [5]), (list, ['x']),
- (dict, []), (dict, [(5,6)]), (dict, [('x',7)]),
- (tuple, []), (tuple, [5]), (tuple, ['x']),
- (str, 'hello'), (unicode, 'hello')]:
- class SubClass(base):
- def __iter__(self):
- return iter("foobar")
+ # obscure corner case: space.listview*() must not shortcut subclasses
+ # of dicts, because the OrderedDict in the stdlib relies on this.
+ class SubClass(dict):
+ def __iter__(self):
+ return iter("foobar")
+ for arg in [[], [(5,6)], [('x',7)]]:
assert list(SubClass(arg)) == ['f', 'o', 'o', 'b', 'a', 'r']
class AppTestForRangeLists(AppTestW_ListObject):
More information about the pypy-commit
mailing list