diff options
author | Julien Jehannet <julien.jehannet@logilab.fr> | 2011-01-04 17:41:30 +0100 |
---|---|---|
committer | Julien Jehannet <julien.jehannet@logilab.fr> | 2011-01-04 17:41:30 +0100 |
commit | 57ae26abd839e5d4762d18f37de3e828b3e7950e (patch) | |
tree | f369fec345b5397ae297e7ebbb2ea919ca4e6961 | |
parent | 8a7bcd84b4fa5eb34a32088e89444443d96e6cc3 (diff) | |
download | logilab-common-57ae26abd839e5d4762d18f37de3e828b3e7950e.tar.gz |
[unittest2] add deprecation warnings about new api about module level fixtures
Prefer now usage of setup_module/teardown_module in favor of setUpModule/tearDownModule
See http://www.voidspace.org.uk/python/articles/unittest2.shtml#setupmodule-and-teardownmodule
-rw-r--r-- | pytest.py | 12 | ||||
-rw-r--r-- | testlib.py | 65 |
2 files changed, 64 insertions, 13 deletions
@@ -827,12 +827,6 @@ Examples: return self._runTests() def _runTests(self): - if hasattr(self.module, 'setup_module'): - try: - self.module.setup_module(self.options) - except Exception, exc: - print 'setup_module error:', exc - sys.exit(1) self.testRunner = SkipAwareTextTestRunner(verbosity=self.verbosity, stream=self.outstream, exitfirst=self.exitfirst, @@ -879,12 +873,6 @@ Examples: # help garbage collection: we want TestSuite, which hold refs to every # executed TestCase, to be gc'ed del self.test - if hasattr(self.module, 'teardown_module'): - try: - self.module.teardown_module(self.options, result) - except Exception, exc: - print 'teardown_module error:', exc - sys.exit(1) if getattr(result, "debuggers", None) and \ getattr(self, "pdbmode", None): start_interactive_mode(result) @@ -334,11 +334,74 @@ class SkipAwareTestResult(unittest._TextTestResult): self.stream.writeln('no stdout'.center(len(self.separator2))) self.stream.writeln('no stderr'.center(len(self.separator2))) +# Add deprecation warnings about new api used by module level fixtures in unittest2 +# http://www.voidspace.org.uk/python/articles/unittest2.shtml#setupmodule-and-teardownmodule +class _DebugResult(object): # simplify import statement among unittest flavors.. + "Used by the TestSuite to hold previous class when running in debug." + _previousTestClass = None + _moduleSetUpFailed = False + shouldStop = False + +from logilab.common.decorators import monkeypatch +@monkeypatch(unittest.TestSuite) +def _handleModuleTearDown(self, result): + previousModule = self._get_previous_module(result) + if previousModule is None: + return + if result._moduleSetUpFailed: + return + try: + module = sys.modules[previousModule] + except KeyError: + return + # add testlib specific deprecation warning and switch to new api + if hasattr(module, 'teardown_module'): + warnings.warn('Please rename teardown_module() to tearDownModule() instead.', + DeprecationWarning) + setattr(module, 'tearDownModule', module.teardown_module) + # end of monkey-patching + tearDownModule = getattr(module, 'tearDownModule', None) + if tearDownModule is not None: + try: + tearDownModule() + except Exception, e: + if isinstance(result, _DebugResult): + raise + errorName = 'tearDownModule (%s)' % previousModule + self._addClassOrModuleLevelException(result, e, errorName) + +@monkeypatch(unittest.TestSuite) +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] + except KeyError: + return + # add testlib specific deprecation warning and switch to new api + if hasattr(module, 'setup_module'): + warnings.warn('Please rename setup_module() to setUpModule() instead.', + DeprecationWarning) + setattr(module, 'setUpModule', module.setup_module) + # end of monkey-patching + setUpModule = getattr(module, 'setUpModule', None) + if setUpModule is not None: + try: + setUpModule() + except Exception, e: + if isinstance(result, _DebugResult): + raise + result._moduleSetUpFailed = True + errorName = 'setUpModule (%s)' % currentModule + self._addClassOrModuleLevelException(result, e, errorName) # backward compatibility: TestSuite might be imported from lgc.testlib TestSuite = unittest.TestSuite - class keywords(dict): """Keyword args (**kwargs) support for generative tests.""" |