Author: Armin Rigo <ar...@tunes.org>
Branch: 
Changeset: r64811:9c8f04b5d3a9
Date: 2013-06-06 11:10 +0200
http://bitbucket.org/pypy/pypy/changeset/9c8f04b5d3a9/

Log:    Attempt to get rid of the occasional failure of test_methodcache.py.

diff --git a/pypy/objspace/std/test/test_methodcache.py 
b/pypy/objspace/std/test/test_methodcache.py
--- a/pypy/objspace/std/test/test_methodcache.py
+++ b/pypy/objspace/std/test/test_methodcache.py
@@ -4,7 +4,28 @@
 class AppTestMethodCaching(test_typeobject.AppTestTypeObject):
     spaceconfig = {"objspace.std.withmethodcachecounter": True}
 
+    def setup_class(cls):
+        # This is for the following tests, which are a bit fragile and
+        # historically have been failing once in a while.  With this hack,
+        # they are run up to 5 times in a row, saving the frame of the
+        # failed attempt.  This means occasional collisions should work
+        # differently during the retry.
+        cls.w_retry = cls.space.appexec([], """():
+            def retry(run):
+                keepalive = []
+                for i in range(4):
+                    try:
+                        return run()
+                    except AssertionError:
+                        import sys
+                        keepalive.append(sys.exc_info())
+                return run()
+            return retry
+        """)
+
     def test_mix_classes(self):
+      @self.retry
+      def run():
         import __pypy__
         class A(object):
             def f(self):
@@ -25,6 +46,8 @@
         assert sum(cache_counter) == 30
 
     def test_class_that_cannot_be_cached(self):
+      @self.retry
+      def run():
         import __pypy__
         class X:
             pass
@@ -50,6 +73,8 @@
         assert sum(cache_counter) == 20
  
     def test_change_methods(self):
+      @self.retry
+      def run():
         import __pypy__
         class A(object):
             def f(self):
@@ -88,6 +113,8 @@
         assert cache_counter == (17, 3)
 
     def test_subclasses(self):
+      @self.retry
+      def run():
         import __pypy__
         class A(object):
             def f(self):
@@ -107,6 +134,8 @@
         assert sum(cache_counter) == 30
   
     def test_many_names(self):
+      @self.retry
+      def run():
         import __pypy__
         for j in range(20):
             class A(object):
@@ -160,6 +189,8 @@
         assert e.foo == 3
 
     def test_custom_metaclass(self):
+      @self.retry
+      def run():
         import __pypy__
         for j in range(20):
             class MetaA(type):
@@ -181,6 +212,8 @@
             raise AssertionError("cache_counter = %r" % (cache_counter,))
 
     def test_mutate_class(self):
+      @self.retry
+      def run():
         import __pypy__
         class A(object):
             x = 1
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to