[Python-checkins] r81766 - in python/branches/py3k: Lib/unittest/suite.py Lib/unittest/test/test_case.py Lib/unittest/test/test_setups.py

michael.foord python-checkins at python.org
Sat Jun 5 23:12:23 CEST 2010


Author: michael.foord
Date: Sat Jun  5 23:12:23 2010
New Revision: 81766

Log:
Merged revisions 81764 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r81764 | michael.foord | 2010-06-05 21:59:00 +0100 (Sat, 05 Jun 2010) | 1 line
  
  Tests for issue 8302, skipped test in a setUpClass or a setUpModule are reported as skips rather than errors.
........


Modified:
   python/branches/py3k/   (props changed)
   python/branches/py3k/Lib/unittest/suite.py
   python/branches/py3k/Lib/unittest/test/test_case.py
   python/branches/py3k/Lib/unittest/test/test_setups.py

Modified: python/branches/py3k/Lib/unittest/suite.py
==============================================================================
--- python/branches/py3k/Lib/unittest/suite.py	(original)
+++ python/branches/py3k/Lib/unittest/suite.py	Sat Jun  5 23:12:23 2010
@@ -127,9 +127,11 @@
         if setUpClass is not None:
             try:
                 setUpClass()
-            except:
+            except Exception as e:
                 currentClass._classSetupFailed = True
-                self._addClassSetUpError(result, currentClass)
+                className = util.strclass(currentClass)
+                errorName = 'setUpClass (%s)' % className
+                self._addClassOrModuleLevelException(result, e, errorName)
 
     def _get_previous_module(self, result):
         previousModule = None
@@ -157,10 +159,18 @@
         if setUpModule is not None:
             try:
                 setUpModule()
-            except:
+            except Exception as e:
                 result._moduleSetUpFailed = True
-                error = _ErrorHolder('setUpModule (%s)' % currentModule)
-                result.addError(error, sys.exc_info())
+                errorName = 'setUpModule (%s)' % currentModule
+                self._addClassOrModuleLevelException(result, e, errorName)
+
+    def _addClassOrModuleLevelException(self, result, exception, errorName):
+        error = _ErrorHolder(errorName)
+        addSkip = getattr(result, 'addSkip', None)
+        if addSkip is not None and isinstance(exception, case.SkipTest):
+            addSkip(error, str(exception))
+        else:
+            result.addError(error, sys.exc_info())
 
     def _handleModuleTearDown(self, result):
         previousModule = self._get_previous_module(result)
@@ -178,9 +188,9 @@
         if tearDownModule is not None:
             try:
                 tearDownModule()
-            except:
-                error = _ErrorHolder('tearDownModule (%s)' % previousModule)
-                result.addError(error, sys.exc_info())
+            except Exception as e:
+                errorName = 'tearDownModule (%s)' % previousModule
+                self._addClassOrModuleLevelException(result, e, errorName)
 
     def _tearDownPreviousClass(self, test, result):
         previousClass = getattr(result, '_previousTestClass', None)
@@ -198,18 +208,11 @@
         if tearDownClass is not None:
             try:
                 tearDownClass()
-            except:
-                self._addClassTearDownError(result)
+            except Exception as e:
+                className = util.strclass(previousClass)
+                errorName = 'tearDownClass (%s)' % className
+                self._addClassOrModuleLevelException(result, e, errorName)
 
-    def _addClassTearDownError(self, result):
-        className = util.strclass(result._previousTestClass)
-        error = _ErrorHolder('classTearDown (%s)' % className)
-        result.addError(error, sys.exc_info())
-
-    def _addClassSetUpError(self, result, klass):
-        className = util.strclass(klass)
-        error = _ErrorHolder('classSetUp (%s)' % className)
-        result.addError(error, sys.exc_info())
 
 
 class _ErrorHolder(object):

Modified: python/branches/py3k/Lib/unittest/test/test_case.py
==============================================================================
--- python/branches/py3k/Lib/unittest/test/test_case.py	(original)
+++ python/branches/py3k/Lib/unittest/test/test_case.py	Sat Jun  5 23:12:23 2010
@@ -641,6 +641,10 @@
         message = self._truncateMessage('foo', 'bar')
         self.assertEqual(message, 'foobar')
 
+        self.maxDiff = 4
+        message = self._truncateMessage('foo', 'bar')
+        self.assertEqual(message, 'foobar')
+
     def testAssertDictEqualTruncates(self):
         test = unittest.TestCase('assertEqual')
         def truncate(msg, diff):

Modified: python/branches/py3k/Lib/unittest/test/test_setups.py
==============================================================================
--- python/branches/py3k/Lib/unittest/test/test_setups.py	(original)
+++ python/branches/py3k/Lib/unittest/test/test_setups.py	Sat Jun  5 23:12:23 2010
@@ -111,7 +111,7 @@
         self.assertEqual(len(result.errors), 1)
         error, _ = result.errors[0]
         self.assertEqual(str(error),
-                    'classSetUp (%s.BrokenTest)' % __name__)
+                    'setUpClass (%s.BrokenTest)' % __name__)
 
     def test_error_in_teardown_class(self):
         class Test(unittest.TestCase):
@@ -144,7 +144,7 @@
 
         error, _ = result.errors[0]
         self.assertEqual(str(error),
-                    'classTearDown (%s.Test)' % __name__)
+                    'tearDownClass (%s.Test)' % __name__)
 
     def test_class_not_torndown_when_setup_fails(self):
         class Test(unittest.TestCase):
@@ -398,3 +398,46 @@
         self.assertEqual(len(result.errors), 1)
         error, _ = result.errors[0]
         self.assertEqual(str(error), 'tearDownModule (Module)')
+
+    def test_skiptest_in_setupclass(self):
+        class Test(unittest.TestCase):
+            @classmethod
+            def setUpClass(cls):
+                raise unittest.SkipTest('foo')
+            def test_one(self):
+                pass
+            def test_two(self):
+                pass
+
+        result = self.runTests(Test)
+        self.assertEqual(result.testsRun, 0)
+        self.assertEqual(len(result.errors), 0)
+        self.assertEqual(len(result.skipped), 1)
+        skipped = result.skipped[0][0]
+        self.assertEqual(str(skipped), 'setUpClass (%s.Test)' % __name__)
+
+    def test_skiptest_in_setupmodule(self):
+        class Test(unittest.TestCase):
+            def test_one(self):
+                pass
+            def test_two(self):
+                pass
+
+        class Module(object):
+            @staticmethod
+            def setUpModule():
+                raise unittest.SkipTest('foo')
+
+        Test.__module__ = 'Module'
+        sys.modules['Module'] = Module
+
+        result = self.runTests(Test)
+        self.assertEqual(result.testsRun, 0)
+        self.assertEqual(len(result.errors), 0)
+        self.assertEqual(len(result.skipped), 1)
+        skipped = result.skipped[0][0]
+        self.assertEqual(str(skipped), 'setUpModule (Module)')
+
+
+if __name__ == '__main__':
+    unittest.main()


More information about the Python-checkins mailing list