diff options
Diffstat (limited to 'tests/functional-tests/unittest2/suite.py')
-rw-r--r-- | tests/functional-tests/unittest2/suite.py | 41 |
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: |