[Python-checkins] r81760 - python/trunk/Lib/unittest/suite.py

michael.foord python-checkins at python.org
Sat Jun 5 21:38:42 CEST 2010


Author: michael.foord
Date: Sat Jun  5 21:38:42 2010
New Revision: 81760

Log:
Issue 8302. SkipTest exception is setUpClass or setUpModule is now reported as a skip rather than an error.

Modified:
   python/trunk/Lib/unittest/suite.py

Modified: python/trunk/Lib/unittest/suite.py
==============================================================================
--- python/trunk/Lib/unittest/suite.py	(original)
+++ python/trunk/Lib/unittest/suite.py	Sat Jun  5 21:38:42 2010
@@ -130,9 +130,12 @@
         if setUpClass is not None:
             try:
                 setUpClass()
-            except:
+            except Exception as e:
                 currentClass._classSetupFailed = True
-                self._addClassSetUpError(result, currentClass)
+                className = util.strclass(currentClass)
+                errorName = 'classSetUp (%s)' % className
+                self._addClassOrModuleLevelException(result, e, errorName)
+
 
     def _get_previous_module(self, result):
         previousModule = None
@@ -150,7 +153,6 @@
 
         self._handleModuleTearDown(result)
 
-
         result._moduleSetUpFailed = False
         try:
             module = sys.modules[currentModule]
@@ -160,10 +162,18 @@
         if setUpModule is not None:
             try:
                 setUpModule()
-            except:
+            except Exception, 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)
@@ -181,9 +191,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)
@@ -201,18 +211,10 @@
         if tearDownClass is not None:
             try:
                 tearDownClass()
-            except:
-                self._addClassTearDownError(result)
-
-    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())
+            except Exception, e:
+                className = util.strclass(previousClass)
+                errorName = 'classTearDown (%s)' % className
+                self._addClassOrModuleLevelException(result, e, errorName)
 
 
 class _ErrorHolder(object):


More information about the Python-checkins mailing list