summaryrefslogtreecommitdiff
path: root/tests/functional-tests/unittest2/suite.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/functional-tests/unittest2/suite.py')
-rw-r--r--tests/functional-tests/unittest2/suite.py41
1 files changed, 21 insertions, 20 deletions
diff --git a/tests/functional-tests/unittest2/suite.py b/tests/functional-tests/unittest2/suite.py
index 9431f2b63..0c76b7407 100644
--- a/tests/functional-tests/unittest2/suite.py
+++ b/tests/functional-tests/unittest2/suite.py
@@ -10,8 +10,10 @@ __unittest = True
class BaseTestSuite(unittest.TestSuite):
+
"""A simple test suite that doesn't provide class or module shared fixtures.
"""
+
def __init__(self, tests=()):
self._tests = []
self.addTests(tests)
@@ -72,6 +74,7 @@ class BaseTestSuite(unittest.TestSuite):
class TestSuite(BaseTestSuite):
+
"""A test suite is a composite test consisting of a number of TestCases.
For use, create an instance of TestSuite, then add test case instances.
@@ -80,7 +83,6 @@ class TestSuite(BaseTestSuite):
in the order in which they were added, aggregating the results. When
subclassing, do not forget to call the base class constructor.
"""
-
def run(self, result):
self._wrapped_run(result)
@@ -88,28 +90,28 @@ class TestSuite(BaseTestSuite):
self._handleModuleTearDown(result)
return result
- ################################
+ #
# private methods
def _wrapped_run(self, result):
for test in self:
if result.shouldStop:
break
-
+
if _isnotsuite(test):
self._tearDownPreviousClass(test, result)
self._handleModuleFixture(test, result)
self._handleClassSetUp(test, result)
result._previousTestClass = test.__class__
-
- if (getattr(test.__class__, '_classSetupFailed', False) or
- getattr(result, '_moduleSetUpFailed', False)):
+
+ if (getattr(test.__class__, '_classSetupFailed', False) or
+ getattr(result, '_moduleSetUpFailed', False)):
continue
-
+
if hasattr(test, '_wrapped_run'):
test._wrapped_run(result)
else:
test(result)
-
+
def _handleClassSetUp(self, test, result):
previousClass = getattr(result, '_previousTestClass', None)
currentClass = test.__class__
@@ -119,14 +121,14 @@ class TestSuite(BaseTestSuite):
return
if getattr(currentClass, "__unittest_skip__", False):
return
-
+
try:
currentClass._classSetupFailed = False
except TypeError:
# test may actually be a function
# so its class will be a builtin-type
pass
-
+
setUpClass = getattr(currentClass, 'setUpClass', None)
if setUpClass is not None:
try:
@@ -134,24 +136,22 @@ class TestSuite(BaseTestSuite):
except:
currentClass._classSetupFailed = True
self._addClassSetUpError(result, currentClass)
-
+
def _get_previous_module(self, result):
previousModule = None
previousClass = getattr(result, '_previousTestClass', None)
if previousClass is not None:
previousModule = previousClass.__module__
return previousModule
-
-
+
def _handleModuleFixture(self, test, result):
previousModule = self._get_previous_module(result)
currentModule = test.__class__.__module__
if currentModule == previousModule:
return
-
+
self._handleModuleTearDown(result)
-
result._moduleSetUpFailed = False
try:
module = sys.modules[currentModule]
@@ -172,7 +172,7 @@ class TestSuite(BaseTestSuite):
return
if result._moduleSetUpFailed:
return
-
+
try:
module = sys.modules[previousModule]
except KeyError:
@@ -185,7 +185,7 @@ class TestSuite(BaseTestSuite):
except:
error = _ErrorHolder('tearDownModule (%s)' % previousModule)
result.addError(error, sys.exc_info())
-
+
def _tearDownPreviousClass(self, test, result):
previousClass = getattr(result, '_previousTestClass', None)
currentClass = test.__class__
@@ -197,14 +197,14 @@ class TestSuite(BaseTestSuite):
return
if getattr(previousClass, "__unittest_skip__", False):
return
-
+
tearDownClass = getattr(previousClass, 'tearDownClass', None)
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)
@@ -216,8 +216,8 @@ class TestSuite(BaseTestSuite):
result.addError(error, sys.exc_info())
-
class _ErrorHolder(object):
+
"""
Placeholder for a TestCase inside a result. As far as a TestResult
is concerned, this looks exactly like a unit test. Used to insert
@@ -255,6 +255,7 @@ class _ErrorHolder(object):
def countTestCases(self):
return 0
+
def _isnotsuite(test):
"A crude way to tell apart testcases and suites with duck-typing"
try: