cubicweb/devtools/testlib.py
changeset 11076 403a901b6b1e
parent 11069 020de2d09c0f
child 11086 c9641ee0b652
--- a/cubicweb/devtools/testlib.py	Tue Jan 19 10:03:16 2016 +0100
+++ b/cubicweb/devtools/testlib.py	Thu Jan 14 18:35:07 2016 +0100
@@ -31,7 +31,7 @@
 
 import yams.schema
 
-from logilab.common.testlib import TestCase, InnerTest, Tags
+from logilab.common.testlib import TestCase, Tags
 from logilab.common.pytest import nocoverage
 from logilab.common.debugger import Debugger
 from logilab.common.umessage import message_from_string
@@ -51,6 +51,16 @@
 from cubicweb.devtools import fake, htmlparser, DEFAULT_EMPTY_DB_ID
 
 
+if sys.version_info[:2] < (3, 4):
+    import unittest2
+    if not hasattr(unittest2.TestCase, 'subTest'):
+        raise ImportError('no subTest support in available unittest2')
+    class BaseTestCase(unittest2.TestCase, TestCase):
+        """Mix of logilab.common.testlib.TestCase and unittest2.TestCase"""
+else:
+    BaseTestCase = TestCase
+
+
 # low-level utilities ##########################################################
 
 class CubicWebDebugger(Debugger):
@@ -253,7 +263,7 @@
 
 # base class for cubicweb tests requiring a full cw environments ###############
 
-class CubicWebTC(TestCase):
+class CubicWebTC(BaseTestCase):
     """abstract class for test using an apptest environment
 
     attributes:
@@ -1238,18 +1248,19 @@
                 propdefs[k]['default'] = True
         for view in self.list_views_for(rset):
             backup_rset = rset.copy(rset.rows, rset.description)
-            yield InnerTest(self._testname(rset, view.__regid__, 'view'),
-                            self.view, view.__regid__, rset,
-                            rset.req.reset_headers(), 'main-template')
+            with self.subTest(name=self._testname(rset, view.__regid__, 'view')):
+                self.view(view.__regid__, rset,
+                          rset.req.reset_headers(), 'main-template')
             # We have to do this because some views modify the
             # resultset's syntax tree
             rset = backup_rset
         for action in self.list_actions_for(rset):
-            yield InnerTest(self._testname(rset, action.__regid__, 'action'),
-                            self._test_action, action)
+            with self.subTest(name=self._testname(rset, action.__regid__, 'action')):
+                self._test_action(action)
         for box in self.list_boxes_for(rset):
             w = [].append
-            yield InnerTest(self._testname(rset, box.__regid__, 'box'), box.render, w)
+            with self.subTest(self._testname(rset, box.__regid__, 'box')):
+                box.render(w)
 
     @staticmethod
     def _testname(rset, objid, objtype):
@@ -1277,19 +1288,18 @@
     def test_one_each_config(self):
         self.auto_populate(1)
         for rset in self.iter_automatic_rsets(limit=1):
-            for testargs in self._test_everything_for(rset):
-                yield testargs
+            self._test_everything_for(rset)
 
     def test_ten_each_config(self):
         self.auto_populate(10)
         for rset in self.iter_automatic_rsets(limit=10):
-            for testargs in self._test_everything_for(rset):
-                yield testargs
+            self._test_everything_for(rset)
 
     def test_startup_views(self):
         for vid in self.list_startup_views():
             with self.admin_access.web_request() as req:
-                yield self.view, vid, None, req
+                with self.subTest(vid=vid):
+                    self.view(vid, None, req)
 
 
 # registry instrumentization ###################################################