[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