diff options
author | Nick Coghlan <ncoghlan@gmail.com> | 2008-12-15 12:01:34 (GMT) |
---|---|---|
committer | Nick Coghlan <ncoghlan@gmail.com> | 2008-12-15 12:01:34 (GMT) |
commit | 386220068c3032e244d52ee6c94864a47508506c (patch) | |
tree | 64365139c1baef6b31eb9e00f413608516cc0711 | |
parent | 8f9cd6a9358f217a5ce4ae8d12fde82443125d93 (diff) | |
download | cpython-386220068c3032e244d52ee6c94864a47508506c.zip cpython-386220068c3032e244d52ee6c94864a47508506c.tar.gz cpython-386220068c3032e244d52ee6c94864a47508506c.tar.bz2 |
Merged revisions 67790 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r67790 | nick.coghlan | 2008-12-15 21:41:05 +1000 (Mon, 15 Dec 2008) | 1 line
Issue #4197: Fix the remaining part of the doctest-in-zipfile problem by giving linecache access to the module globals when available
........
-rw-r--r-- | Lib/doctest.py | 16 | ||||
-rw-r--r-- | Lib/test/test_zipimport_support.py | 29 |
2 files changed, 42 insertions, 3 deletions
diff --git a/Lib/doctest.py b/Lib/doctest.py index 22052ec..74ae795 100644 --- a/Lib/doctest.py +++ b/Lib/doctest.py @@ -813,7 +813,15 @@ class DocTestFinder: # given object's docstring. try: file = inspect.getsourcefile(obj) or inspect.getfile(obj) - source_lines = linecache.getlines(file) + if module is not None: + # Supply the module globals in case the module was + # originally loaded via a PEP 302 loader and + # file is not a valid filesystem path + source_lines = linecache.getlines(file, module.__dict__) + else: + # No access to a loader, so assume it's a normal + # filesystem path + source_lines = linecache.getlines(file) if not source_lines: source_lines = None except TypeError: @@ -1427,8 +1435,10 @@ class DocTestRunner: d = self._name2ft for name, (f, t) in other._name2ft.items(): if name in d: - print("*** DocTestRunner.merge: '" + name + "' in both" \ - " testers; summing outcomes.") + # Don't print here by default, since doing + # so breaks some of the buildbots + #print("*** DocTestRunner.merge: '" + name + "' in both" \ + # " testers; summing outcomes.") f2, t2 = d[name] f = f + f2 t = t + t2 diff --git a/Lib/test/test_zipimport_support.py b/Lib/test/test_zipimport_support.py index 7942e37..3f4cd3f 100644 --- a/Lib/test/test_zipimport_support.py +++ b/Lib/test/test_zipimport_support.py @@ -169,6 +169,35 @@ class ZipSupportTests(ImportHooksBaseTestCase): for obj in known_good_tests: _run_object_doctest(obj, test_zipped_doctest) + def test_doctest_main_issue4197(self): + test_src = textwrap.dedent("""\ + class Test: + ">>> 'line 2'" + pass + + import doctest + doctest.testmod() + """) + pattern = 'File "%s", line 2, in %s' + with temp_dir() as d: + script_name = _make_test_script(d, 'script', test_src) + exit_code, data = _run_python(script_name) + expected = pattern % (script_name, "__main__.Test") + if verbose: + print ("Expected line", expected) + print ("Got stdout:") + print (data) + self.assert_(expected in data) + zip_name, run_name = _make_test_zip(d, "test_zip", + script_name, '__main__.py') + exit_code, data = _run_python(zip_name) + expected = pattern % (run_name, "__main__.Test") + if verbose: + print ("Expected line", expected) + print ("Got stdout:") + print (data) + self.assert_(expected in data) + def test_pdb_issue4201(self): test_src = textwrap.dedent("""\ def f(): |