mirror of
https://github.com/python/cpython.git
synced 2025-08-16 06:40:56 +00:00

svn+ssh://pythondev@svn.python.org/python/trunk ........ r72319 | georg.brandl | 2009-05-05 10:28:49 +0200 (Di, 05 Mai 2009) | 1 line #1309567: fix linecache behavior of stripping subdirectories from paths when looking for relative filename matches. Also add a linecache test suite. ........ r72320 | georg.brandl | 2009-05-05 10:30:28 +0200 (Di, 05 Mai 2009) | 1 line Add a news entry for r72319. ........ r72467 | georg.brandl | 2009-05-08 14:17:34 +0200 (Fr, 08 Mai 2009) | 1 line Fix name. ........ r72661 | georg.brandl | 2009-05-15 10:03:03 +0200 (Fr, 15 Mai 2009) | 1 line Fix example output for doctest-like demos. ........ r72675 | georg.brandl | 2009-05-16 13:13:21 +0200 (Sa, 16 Mai 2009) | 1 line #6034: clarify __reversed__ doc. ........ r72676 | georg.brandl | 2009-05-16 13:14:46 +0200 (Sa, 16 Mai 2009) | 1 line #6025: fix signature of parse(). ........ r72677 | georg.brandl | 2009-05-16 13:18:55 +0200 (Sa, 16 Mai 2009) | 1 line #6009: undocument default argument of Option as deprecated. ........ r72678 | georg.brandl | 2009-05-16 13:21:29 +0200 (Sa, 16 Mai 2009) | 1 line #2856: document 2.x os.listdir() behavior for undecodable filenames. ........ r72679 | georg.brandl | 2009-05-16 13:24:41 +0200 (Sa, 16 Mai 2009) | 1 line Fix about and bugs pages to match real workflow. ........ r72703 | georg.brandl | 2009-05-17 10:10:27 +0200 (So, 17 Mai 2009) | 1 line part of #4144: fix exception message in console session. ........ r72708 | georg.brandl | 2009-05-17 10:24:29 +0200 (So, 17 Mai 2009) | 1 line #6017: better document behavior of dictiterators when the dict is changed. ........ r72710 | georg.brandl | 2009-05-17 10:36:04 +0200 (So, 17 Mai 2009) | 1 line #5942: Copy over flag table from dbm.rst which is clearer. ........ r72712 | georg.brandl | 2009-05-17 10:55:00 +0200 (So, 17 Mai 2009) | 1 line #5935: mention that BROWSER is looked for in PATH. ........ r72801 | georg.brandl | 2009-05-20 20:31:14 +0200 (Mi, 20 Mai 2009) | 1 line #6055: refer to "sqlite3" consistently. ........ r72802 | georg.brandl | 2009-05-20 20:35:27 +0200 (Mi, 20 Mai 2009) | 1 line #6051: refer to email examples for better way to construct email messages. ........ r72820 | georg.brandl | 2009-05-22 09:23:32 +0200 (Fr, 22 Mai 2009) | 1 line Use raise X(y). ........ r72822 | georg.brandl | 2009-05-22 11:33:25 +0200 (Fr, 22 Mai 2009) | 1 line #6084: fix example. ........ r72824 | georg.brandl | 2009-05-22 11:43:17 +0200 (Fr, 22 Mai 2009) | 1 line Fix references to file-related functions and methods (os.* vs file.*). ........ r72826 | georg.brandl | 2009-05-22 11:49:42 +0200 (Fr, 22 Mai 2009) | 1 line Fix confusing wording. ........ r72827 | georg.brandl | 2009-05-22 11:50:30 +0200 (Fr, 22 Mai 2009) | 1 line s/use/call/ ........ r72828 | georg.brandl | 2009-05-22 11:58:48 +0200 (Fr, 22 Mai 2009) | 1 line Correction in softspace behavior description. ........ r72830 | georg.brandl | 2009-05-22 12:40:00 +0200 (Fr, 22 Mai 2009) | 1 line #6086: fix spelling and use a better exception to catch. ........
129 lines
3.9 KiB
Python
129 lines
3.9 KiB
Python
""" Tests for the linecache module """
|
|
|
|
import linecache
|
|
import unittest
|
|
import os.path
|
|
from test import test_support as support
|
|
|
|
|
|
FILENAME = linecache.__file__
|
|
INVALID_NAME = '!@$)(!@#_1'
|
|
EMPTY = ''
|
|
TESTS = 'cjkencodings_test inspect_fodder inspect_fodder2 mapping_tests'
|
|
TESTS = TESTS.split()
|
|
TEST_PATH = os.path.dirname(support.__file__)
|
|
MODULES = "linecache unittest".split()
|
|
MODULE_PATH = os.path.dirname(FILENAME)
|
|
|
|
SOURCE_1 = '''
|
|
" Docstring "
|
|
|
|
def function():
|
|
return result
|
|
|
|
'''
|
|
|
|
SOURCE_2 = '''
|
|
def f():
|
|
return 1 + 1
|
|
|
|
a = f()
|
|
|
|
'''
|
|
|
|
class LineCacheTests(unittest.TestCase):
|
|
|
|
def test_getline(self):
|
|
getline = linecache.getline
|
|
|
|
# Bad values for line number should return an empty string
|
|
self.assertEquals(getline(FILENAME, 2**15), EMPTY)
|
|
self.assertEquals(getline(FILENAME, -1), EMPTY)
|
|
|
|
# Float values currently raise TypeError, should it?
|
|
self.assertRaises(TypeError, getline, FILENAME, 1.1)
|
|
|
|
# Bad filenames should return an empty string
|
|
self.assertEquals(getline(EMPTY, 1), EMPTY)
|
|
self.assertEquals(getline(INVALID_NAME, 1), EMPTY)
|
|
|
|
# Check whether lines correspond to those from file iteration
|
|
for entry in TESTS:
|
|
filename = os.path.join(TEST_PATH, entry) + '.py'
|
|
for index, line in enumerate(open(filename)):
|
|
self.assertEquals(line, getline(filename, index + 1))
|
|
|
|
# Check module loading
|
|
for entry in MODULES:
|
|
filename = os.path.join(MODULE_PATH, entry) + '.py'
|
|
for index, line in enumerate(open(filename)):
|
|
self.assertEquals(line, getline(filename, index + 1))
|
|
|
|
# Check that bogus data isn't returned (issue #1309567)
|
|
empty = linecache.getlines('a/b/c/__init__.py')
|
|
self.assertEquals(empty, [])
|
|
|
|
def test_clearcache(self):
|
|
cached = []
|
|
for entry in TESTS:
|
|
filename = os.path.join(TEST_PATH, entry) + '.py'
|
|
cached.append(filename)
|
|
linecache.getline(filename, 1)
|
|
|
|
# Are all files cached?
|
|
cached_empty = [fn for fn in cached if fn not in linecache.cache]
|
|
self.assertEquals(cached_empty, [])
|
|
|
|
# Can we clear the cache?
|
|
linecache.clearcache()
|
|
cached_empty = [fn for fn in cached if fn in linecache.cache]
|
|
self.assertEquals(cached_empty, [])
|
|
|
|
def test_checkcache(self):
|
|
getline = linecache.getline
|
|
try:
|
|
# Create a source file and cache its contents
|
|
source_name = os.path.join(TEST_PATH, 'linecache_test.py')
|
|
source = open(source_name, 'w')
|
|
source.write(SOURCE_1)
|
|
source.close()
|
|
getline(source_name, 1)
|
|
|
|
# Keep a copy of the old contents
|
|
source_list = []
|
|
source = open(source_name)
|
|
for index, line in enumerate(source):
|
|
self.assertEquals(line, getline(source_name, index + 1))
|
|
source_list.append(line)
|
|
source.close()
|
|
|
|
source = open(source_name, 'w')
|
|
source.write(SOURCE_2)
|
|
source.close()
|
|
|
|
# Try to update a bogus cache entry
|
|
linecache.checkcache('dummy')
|
|
|
|
# Check that the cache matches the old contents
|
|
for index, line in enumerate(source_list):
|
|
self.assertEquals(line, getline(source_name, index + 1))
|
|
|
|
# Update the cache and check whether it matches the new source file
|
|
linecache.checkcache(source_name)
|
|
source = open(source_name)
|
|
for index, line in enumerate(source):
|
|
self.assertEquals(line, getline(source_name, index + 1))
|
|
source_list.append(line)
|
|
source.close()
|
|
|
|
finally:
|
|
try:
|
|
source.close()
|
|
finally:
|
|
support.unlink(source_name)
|
|
|
|
def test_main():
|
|
support.run_unittest(LineCacheTests)
|
|
|
|
if __name__ == "__main__":
|
|
test_main()
|