summaryrefslogtreecommitdiffstats
path: root/Lib/test
diff options
context:
space:
mode:
authorR. David Murray <rdmurray@bitdance.com>2010-06-17 01:36:52 (GMT)
committerR. David Murray <rdmurray@bitdance.com>2010-06-17 01:36:52 (GMT)
commitdf1cf301c2da740f9271b3ff164d7f0e5cb9082c (patch)
tree7336b800dfff0f8cff9b5bbba63b8c2bfce154a1 /Lib/test
parenta3e3e36de751607cd2d7f1eaa6ae93cf123c3c8a (diff)
downloadcpython-df1cf301c2da740f9271b3ff164d7f0e5cb9082c.zip
cpython-df1cf301c2da740f9271b3ff164d7f0e5cb9082c.tar.gz
cpython-df1cf301c2da740f9271b3ff164d7f0e5cb9082c.tar.bz2
#8720: fix inspect regression by teaching getsourcefile about linecache.
The fix for issue 4050 caused a regression: before that fix, source lines in the linecache would eventually be found by inspect. After the fix inspect reports an error earlier, and the source isn't found. The fix for the fix is to have getsourcefile look in the linecache for the file and return the psuedo-filename if the source is there, just as it already returns it if there is a PEP 302 loader.
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/test_inspect.py15
1 files changed, 15 insertions, 0 deletions
diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py
index aaa15f8..08630a5 100644
--- a/Lib/test/test_inspect.py
+++ b/Lib/test/test_inspect.py
@@ -3,6 +3,7 @@ import sys
import types
import unittest
import inspect
+import linecache
import datetime
from UserList import UserList
from UserDict import UserDict
@@ -274,6 +275,11 @@ class TestRetrievingSourceCode(GetSourceBase):
def test_getsourcefile(self):
self.assertEqual(inspect.getsourcefile(mod.spam), modfile)
self.assertEqual(inspect.getsourcefile(git.abuse), modfile)
+ fn = "_non_existing_filename_used_for_sourcefile_test.py"
+ co = compile("None", fn, "exec")
+ self.assertEqual(inspect.getsourcefile(co), None)
+ linecache.cache[co.co_filename] = (1, None, "None", co.co_filename)
+ self.assertEqual(inspect.getsourcefile(co), fn)
def test_getfile(self):
self.assertEqual(inspect.getfile(mod.StupidGit), mod.__file__)
@@ -372,6 +378,15 @@ class TestBuggyCases(GetSourceBase):
self.assertRaises(IOError, inspect.getsource, unicodedata)
self.assertRaises(IOError, inspect.findsource, unicodedata)
+ def test_findsource_code_in_linecache(self):
+ lines = ["x=1"]
+ co = compile(lines[0], "_dynamically_created_file", "exec")
+ self.assertRaises(IOError, inspect.findsource, co)
+ self.assertRaises(IOError, inspect.getsource, co)
+ linecache.cache[co.co_filename] = (1, None, lines, co.co_filename)
+ self.assertEquals(inspect.findsource(co), (lines,0))
+ self.assertEquals(inspect.getsource(co), lines[0])
+
# Helper for testing classify_class_attrs.
def attrs_wo_objs(cls):
return [t[:3] for t in inspect.classify_class_attrs(cls)]