[pypy-commit] pypy py3.5: Fixes for test_descr

arigo pypy.commits at gmail.com
Sat Jun 17 12:27:34 EDT 2017


Author: Armin Rigo <arigo at tunes.org>
Branch: py3.5
Changeset: r91617:70d5dcb50915
Date: 2017-06-17 16:01 +0200
http://bitbucket.org/pypy/pypy/changeset/70d5dcb50915/

Log:	Fixes for test_descr

diff --git a/lib-python/3/test/test_descr.py b/lib-python/3/test/test_descr.py
--- a/lib-python/3/test/test_descr.py
+++ b/lib-python/3/test/test_descr.py
@@ -1663,7 +1663,8 @@
         self.assertEqual(b.foo, 3)
         self.assertEqual(b.__class__, D)
 
-    @unittest.expectedFailure
+    #@unittest.expectedFailure --- on CPython.  On PyPy, the test passes
+    @support.impl_detail(cpython=False)
     def test_bad_new(self):
         self.assertRaises(TypeError, object.__new__)
         self.assertRaises(TypeError, object.__new__, '')
diff --git a/pypy/objspace/std/test/test_typeobject.py b/pypy/objspace/std/test/test_typeobject.py
--- a/pypy/objspace/std/test/test_typeobject.py
+++ b/pypy/objspace/std/test/test_typeobject.py
@@ -477,7 +477,8 @@
             a = 1
 
         class mymeta(type):
-            def mro(self):
+            def mro(self, ignore=False):
+                assert ignore or self.__mro__ is None
                 return [self, object]
 
         class B_mro(A_mro, metaclass=mymeta):
@@ -485,7 +486,7 @@
 
         assert B_mro.__bases__ == (A_mro,)
         assert B_mro.__mro__ == (B_mro, object)
-        assert B_mro.mro() == [B_mro, object]
+        assert B_mro.mro(ignore=True) == [B_mro, object]
         assert B_mro.b == 1
         assert B_mro().b == 1
         assert getattr(B_mro, 'a', None) == None
diff --git a/pypy/objspace/std/typeobject.py b/pypy/objspace/std/typeobject.py
--- a/pypy/objspace/std/typeobject.py
+++ b/pypy/objspace/std/typeobject.py
@@ -810,7 +810,10 @@
 
 def descr_get__mro__(space, w_type):
     w_type = _check(space, w_type)
-    return space.newtuple(w_type.mro_w)
+    if w_type.hasmro:
+        return space.newtuple(w_type.mro_w)
+    else:
+        return space.w_None
 
 def descr_mro(space, w_type):
     """Return a type's method resolution order."""
@@ -1227,6 +1230,7 @@
         ensure_module_attr(w_self)
     ensure_hash(w_self)
     w_self.mro_w = []      # temporarily
+    w_self.hasmro = False
     compute_mro(w_self)
 
 def ensure_static_new(w_self):
@@ -1264,8 +1268,10 @@
             w_mro = space.call_function(w_mro_meth)
             mro_w = space.fixedview(w_mro)
             w_self.mro_w = validate_custom_mro(space, mro_w)
+            w_self.hasmro = True
             return    # done
     w_self.mro_w = w_self.compute_default_mro()[:]
+    w_self.hasmro = True
 
 def validate_custom_mro(space, mro_w):
     # do some checking here.  Note that unlike CPython, strange MROs


More information about the pypy-commit mailing list