Hello, I think we should provide a zope.testing package which does not emit deprecation warnings while running the testrunner on other packages, otherwise there is no way to really understand why the package you are working on is using a deprecated API.
I propose the patch attached to this message to zope.testing. It tries to avoid importing zope.testing.doctest unless it is really needed. In this way, developers can see the DeprecationWarning with the path of *their* code, and fix it, instead of receiving the DeprecationWarning because the testrunner imports zope.testing.doctest itself. Before applying the patch, running the tests on another package produced this output: ----------------------------------------------------------------------- .../zope/testing/testrunner/debug.py:23: DeprecationWarning: zope.testing.doctest is deprecated in favour of the Python standard library doctest module from zope.testing import doctest Running zope.testing.testrunner.layer.UnitTests tests: ... ----------------------------------------------------------------------- After applying my patch, I get this: ----------------------------------------------------------------------- .../zope/interface/tests/test_adapter.py:405: DeprecationWarning: zope.testing.doctest is deprecated in favour of the Python standard library doctest module from zope.testing import doctest Running zope.testing.testrunner.layer.UnitTests tests: ... ----------------------------------------------------------------------- Comments? Thanks, Fabio
Index: src/zope/testing/testrunner/formatter.py =================================================================== --- src/zope/testing/testrunner/formatter.py (revisione 106999) +++ src/zope/testing/testrunner/formatter.py (copia locale) @@ -19,10 +19,9 @@ import sys import re import traceback +import warnings -from zope.testing import doctest - doctest_template = """ File "%s", line %s, in %s @@ -328,6 +327,9 @@ def format_traceback(self, exc_info): """Format the traceback.""" v = exc_info[1] + warnings.simplefilter('ignore') + from zope.testing import doctest + warnings.filters.pop() if isinstance(v, doctest.DocTestFailureException): tb = v.args[0] elif isinstance(v, doctest.DocTestFailure): @@ -560,6 +562,9 @@ print print self.colorize('error', msg) v = exc_info[1] + warnings.simplefilter('ignore'); + from zope.testing import doctest + warnings.filters.pop() if isinstance(v, doctest.DocTestFailureException): self.print_doctest_failure(v.args[0]) elif isinstance(v, doctest.DocTestFailure): Index: src/zope/testing/testrunner/doctest.py =================================================================== --- src/zope/testing/testrunner/doctest.py (revisione 106999) +++ src/zope/testing/testrunner/doctest.py (copia locale) @@ -17,10 +17,11 @@ """ import sys -from zope.testing import doctest import zope.testing.testrunner.feature +from zope.testing import doctest + class DocTest(zope.testing.testrunner.feature.Feature): active = True Index: src/zope/testing/testrunner/runner.py =================================================================== --- src/zope/testing/testrunner/runner.py (revisione 106999) +++ src/zope/testing/testrunner/runner.py (copia locale) @@ -34,7 +34,6 @@ from zope.testing.testrunner.refcount import TrackRefs from zope.testing.testrunner.options import get_options import zope.testing.testrunner.coverage -import zope.testing.testrunner.doctest import zope.testing.testrunner.logsupport import zope.testing.testrunner.selftest import zope.testing.testrunner.profiling @@ -177,7 +176,10 @@ self.features.append(zope.testing.testrunner.selftest.SelfTest(self)) self.features.append(zope.testing.testrunner.logsupport.Logging(self)) self.features.append(zope.testing.testrunner.coverage.Coverage(self)) - self.features.append(zope.testing.testrunner.doctest.DocTest(self)) + if options.ndiff or options.udiff or options.cdiff or \ + options.report_only_first_failure is not None: + from zope.testing.testrunner.doctest import DocTest + self.features.append(DocTest(self)) self.features.append(zope.testing.testrunner.profiling.Profiling(self)) if is_jython: # Jython GC support is not yet implemented Index: src/zope/testing/testrunner/debug.py =================================================================== --- src/zope/testing/testrunner/debug.py (revisione 106999) +++ src/zope/testing/testrunner/debug.py (copia locale) @@ -20,12 +20,12 @@ import sys import pdb -from zope.testing import doctest import zope.testing.testrunner.interfaces def post_mortem(exc_info): err = exc_info[1] + from zope.testing import doctest if isinstance(err, (doctest.UnexpectedException, doctest.DocTestFailure)): if isinstance(err, doctest.UnexpectedException):
_______________________________________________ Zope-Dev maillist - Zope-Dev@zope.org https://mail.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - https://mail.zope.org/mailman/listinfo/zope-announce https://mail.zope.org/mailman/listinfo/zope )