summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/lib/libdoctest.tex4
-rw-r--r--Lib/doctest.py4
-rw-r--r--Lib/test/test_doctest.py8
-rw-r--r--Lib/test/test_doctest3.txt5
4 files changed, 21 insertions, 0 deletions
diff --git a/Doc/lib/libdoctest.tex b/Doc/lib/libdoctest.tex
index b982a73..0f32f7d 100644
--- a/Doc/lib/libdoctest.tex
+++ b/Doc/lib/libdoctest.tex
@@ -1107,6 +1107,10 @@ instances from text files and modules with doctests:
defaults to a normal parser (i.e., \code{\class{DocTestParser}()}).
\versionadded{2.4}
+
+ Starting in Python 2.5, the global \code{__file__} was added to the
+ globals provided to doctests loaded from a text file using
+ \function{DocFileSuite()}.
\end{funcdesc}
\begin{funcdesc}{DocTestSuite}{\optional{module}\optional{,
diff --git a/Lib/doctest.py b/Lib/doctest.py
index 0a13d77..2708fc7 100644
--- a/Lib/doctest.py
+++ b/Lib/doctest.py
@@ -2328,6 +2328,8 @@ def DocFileTest(path, module_relative=True, package=None,
globs=None, parser=DocTestParser(), **options):
if globs is None:
globs = {}
+ else:
+ globs = globs.copy()
if package and not module_relative:
raise ValueError("Package may only be specified for module-"
@@ -2337,6 +2339,8 @@ def DocFileTest(path, module_relative=True, package=None,
if module_relative:
package = _normalize_module(package)
path = _module_relative_path(package, path)
+ if "__file__" not in globs:
+ globs["__file__"] = path
# Find the file and read it.
name = os.path.basename(path)
diff --git a/Lib/test/test_doctest.py b/Lib/test/test_doctest.py
index 0ae6b8d..fe4d863 100644
--- a/Lib/test/test_doctest.py
+++ b/Lib/test/test_doctest.py
@@ -2010,6 +2010,14 @@ def test_DocFileSuite():
modified the test globals. The test globals are
automatically cleared for us after a test.
+ Tests in a file run using `DocFileSuite` can also access the
+ `__file__` global, which is set to the name of the file
+ containing the tests:
+
+ >>> suite = doctest.DocFileSuite('test_doctest3.txt')
+ >>> suite.run(unittest.TestResult())
+ <unittest.TestResult run=1 errors=0 failures=0>
+
"""
def test_trailing_space_in_test():
diff --git a/Lib/test/test_doctest3.txt b/Lib/test/test_doctest3.txt
new file mode 100644
index 0000000..54a96d5
--- /dev/null
+++ b/Lib/test/test_doctest3.txt
@@ -0,0 +1,5 @@
+
+Here we check that `__file__` is provided:
+
+ >>> type(__file__)
+ <type 'str'>