bpo-36406: Handle namespace packages in doctest (GH-12520)
diff --git a/Lib/doctest.py b/Lib/doctest.py
index 8fca628..0229951 100644
--- a/Lib/doctest.py
+++ b/Lib/doctest.py
@@ -1059,7 +1059,8 @@
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 f7c399e..aa92777 100644
--- a/Lib/test/test_doctest.py
+++ b/Lib/test/test_doctest.py
@@ -701,8 +701,12 @@
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.