]> granicus.if.org Git - python/commitdiff
Merged revisions 67790 via svnmerge from
authorNick Coghlan <ncoghlan@gmail.com>
Mon, 15 Dec 2008 11:48:21 +0000 (11:48 +0000)
committerNick Coghlan <ncoghlan@gmail.com>
Mon, 15 Dec 2008 11:48:21 +0000 (11:48 +0000)
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
........

Lib/doctest.py
Lib/test/test_zipimport_support.py

index 8a5a22c1ca89fc4db894b5223d643d87fe0e0c0c..3f2baa54340a13379a987265141328eef41fe50d 100644 (file)
@@ -820,7 +820,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:
@@ -1433,8 +1441,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
index 3daf90f999f9a1a4800309207a009f5da40c6b4e..b416b818f50f3fbf5b2e624b24eaed4ca6195016 100644 (file)
@@ -173,6 +173,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():