[Python-checkins] bpo-36406: Handle namespace packages in doctest (GH-12520) (GH-17592)

Brett Cannon webhook-mailer at python.org
Fri Dec 13 18:30:11 EST 2019


https://github.com/python/cpython/commit/d3212036aa2510b9e133ba4bfaf1262d6bcbe7f0
commit: d3212036aa2510b9e133ba4bfaf1262d6bcbe7f0
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: Brett Cannon <54418+brettcannon at users.noreply.github.com>
date: 2019-12-13T15:30:04-08:00
summary:

bpo-36406: Handle namespace packages in doctest (GH-12520) (GH-17592)

(cherry picked from commit 8289e27393395ee903bd096d42e07c112d7f15c6)

Co-authored-by: Xtreak <tir.karthi at gmail.com>

files:
A Misc/NEWS.d/next/Library/2019-03-24-12-12-27.bpo-36406.mCEkOl.rst
M Lib/doctest.py
M Lib/test/test_doctest.py

diff --git a/Lib/doctest.py b/Lib/doctest.py
index 79d91a040c2ee..2a4b8c7dae012 100644
--- a/Lib/doctest.py
+++ b/Lib/doctest.py
@@ -1059,7 +1059,8 @@ def _get_test(self, obj, name, module, globs, source_lines):
         if module is None:
             filename = None
         else:
-            filename = getattr(module, '__file__', module.__name__)
+            # __file__ can be None for namespace packages.
+            filename = getattr(module, '__file__', None) or module.__name__
             if filename[-4:] == ".pyc":
                 filename = filename[:-1]
         return self._parser.get_doctest(docstring, globs, name,
diff --git a/Lib/test/test_doctest.py b/Lib/test/test_doctest.py
index 4a3c488738d39..5f891c50d8fca 100644
--- a/Lib/test/test_doctest.py
+++ b/Lib/test/test_doctest.py
@@ -697,8 +697,12 @@ def test_empty_namespace_package(self):
             finally:
                 support.forget(pkg_name)
                 sys.path.pop()
-            assert doctest.DocTestFinder().find(mod) == []
 
+            include_empty_finder = doctest.DocTestFinder(exclude_empty=False)
+            exclude_empty_finder = doctest.DocTestFinder(exclude_empty=True)
+
+            self.assertEqual(len(include_empty_finder.find(mod)), 1)
+            self.assertEqual(len(exclude_empty_finder.find(mod)), 0)
 
 def test_DocTestParser(): r"""
 Unit tests for the `DocTestParser` class.
diff --git a/Misc/NEWS.d/next/Library/2019-03-24-12-12-27.bpo-36406.mCEkOl.rst b/Misc/NEWS.d/next/Library/2019-03-24-12-12-27.bpo-36406.mCEkOl.rst
new file mode 100644
index 0000000000000..3d81eb50418b0
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-03-24-12-12-27.bpo-36406.mCEkOl.rst
@@ -0,0 +1 @@
+Handle namespace packages in :mod:`doctest`. Patch by Karthikeyan Singaravelan.



More information about the Python-checkins mailing list