summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Jehannet <julien.jehannet@logilab.fr>2011-01-04 17:41:30 +0100
committerJulien Jehannet <julien.jehannet@logilab.fr>2011-01-04 17:41:30 +0100
commit57ae26abd839e5d4762d18f37de3e828b3e7950e (patch)
treef369fec345b5397ae297e7ebbb2ea919ca4e6961
parent8a7bcd84b4fa5eb34a32088e89444443d96e6cc3 (diff)
downloadlogilab-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.py12
-rw-r--r--testlib.py65
2 files changed, 64 insertions, 13 deletions
diff --git a/pytest.py b/pytest.py
index beb4388..20f00f0 100644
--- a/pytest.py
+++ b/pytest.py
@@ -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)
diff --git a/testlib.py b/testlib.py
index b390175..4554a6d 100644
--- a/testlib.py
+++ b/testlib.py
@@ -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."""