SF #737473: Show up-to-date source code in tracebacks always.

And add an optional argument 'filename' to linecache.checkcache()
to enable checking caches per-file.
This commit is contained in:
Hye-Shik Chang 2004-10-26 09:16:42 +00:00
parent 23109ef11e
commit 182ac85147
5 changed files with 60 additions and 4 deletions

View file

@ -40,6 +40,47 @@ class TracebackCases(unittest.TestCase):
self.assert_(len(err) == 3)
self.assert_(err[1].strip() == "[x for x in x] = x")
def test_bug737473(self):
import sys, os, tempfile
savedpath = sys.path[:]
testdir = tempfile.mkdtemp()
try:
sys.path.insert(0, testdir)
testfile = os.path.join(testdir, 'test_bug737473.py')
print >> open(testfile, 'w'), """\
def test():
raise ValueError"""
if hasattr(os, 'utime'):
os.utime(testfile, (0, 0))
else:
import time
time.sleep(3) # not to stay in same mtime.
if 'test_bug737473' in sys.modules:
del sys.modules['test_bug737473']
import test_bug737473
try:
test_bug737473.test()
except ValueError:
# this loads source code to linecache
traceback.extract_tb(sys.exc_traceback)
print >> open(testfile, 'w'), """\
def test():
raise NotImplementedError"""
reload(test_bug737473)
try:
test_bug737473.test()
except NotImplementedError:
src = traceback.extract_tb(sys.exc_traceback)[-1][-1]
self.failUnlessEqual(src, 'raise NotImplementedError')
finally:
sys.path[:] = savedpath
for f in os.listdir(testdir):
os.unlink(os.path.join(testdir, f))
os.rmdir(testdir)
def test_main():
run_unittest(TracebackCases)