annotate Lib/test/test_linecache.py @ 79691:05c8928362ee

Merge __next__ method link fixes with 3.3.
author Ezio Melotti <ezio.melotti@gmail.com>
date Fri, 12 Oct 2012 13:46:37 +0300
parents 43cbfacae463
children 203a77e74aa7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
53775
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
1 """ Tests for the linecache module """
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
2
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
3 import linecache
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
4 import unittest
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
5 import os.path
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
6 from test import support
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
7
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
8
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
9 FILENAME = linecache.__file__
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
10 INVALID_NAME = '!@$)(!@#_1'
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
11 EMPTY = ''
70162
9a4d4506680a Issue #11614: Fix test_linecache, cjkencodings_test.py doesn't exist anymore
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66340
diff changeset
12 TESTS = 'inspect_fodder inspect_fodder2 mapping_tests'
53775
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
13 TESTS = TESTS.split()
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
14 TEST_PATH = os.path.dirname(support.__file__)
55341
ec1f32b72abe Merged revisions 74095 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53775
diff changeset
15 MODULES = "linecache abc".split()
53775
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
16 MODULE_PATH = os.path.dirname(FILENAME)
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
17
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
18 SOURCE_1 = '''
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
19 " Docstring "
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
20
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
21 def function():
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
22 return result
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
23
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
24 '''
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
25
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
26 SOURCE_2 = '''
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
27 def f():
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
28 return 1 + 1
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
29
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
30 a = f()
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
31
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
32 '''
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
33
61834
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
34 SOURCE_3 = '''
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
35 def f():
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
36 return 3''' # No ending newline
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
37
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
38
53775
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
39 class LineCacheTests(unittest.TestCase):
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
40
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
41 def test_getline(self):
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
42 getline = linecache.getline
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
43
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
44 # Bad values for line number should return an empty string
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61834
diff changeset
45 self.assertEqual(getline(FILENAME, 2**15), EMPTY)
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61834
diff changeset
46 self.assertEqual(getline(FILENAME, -1), EMPTY)
53775
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
47
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
48 # Float values currently raise TypeError, should it?
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
49 self.assertRaises(TypeError, getline, FILENAME, 1.1)
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
50
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
51 # Bad filenames should return an empty string
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61834
diff changeset
52 self.assertEqual(getline(EMPTY, 1), EMPTY)
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61834
diff changeset
53 self.assertEqual(getline(INVALID_NAME, 1), EMPTY)
53775
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
54
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
55 # Check whether lines correspond to those from file iteration
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
56 for entry in TESTS:
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
57 filename = os.path.join(TEST_PATH, entry) + '.py'
65745
1883029c7b8a Move test_linecache over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 61828
diff changeset
58 with open(filename) as file:
1883029c7b8a Move test_linecache over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 61828
diff changeset
59 for index, line in enumerate(file):
66310
9fe76c26ea9f #9424: Replace deprecated assert* methods in the Python test suite.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65745
diff changeset
60 self.assertEqual(line, getline(filename, index + 1))
53775
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
61
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
62 # Check module loading
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
63 for entry in MODULES:
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
64 filename = os.path.join(MODULE_PATH, entry) + '.py'
65745
1883029c7b8a Move test_linecache over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 61828
diff changeset
65 with open(filename) as file:
1883029c7b8a Move test_linecache over to file context managers.
Brett Cannon <bcannon@gmail.com>
parents: 61828
diff changeset
66 for index, line in enumerate(file):
66310
9fe76c26ea9f #9424: Replace deprecated assert* methods in the Python test suite.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65745
diff changeset
67 self.assertEqual(line, getline(filename, index + 1))
53775
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
68
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
69 # Check that bogus data isn't returned (issue #1309567)
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
70 empty = linecache.getlines('a/b/c/__init__.py')
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61834
diff changeset
71 self.assertEqual(empty, [])
53775
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
72
61834
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
73 def test_no_ending_newline(self):
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
74 self.addCleanup(support.unlink, support.TESTFN)
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
75 with open(support.TESTFN, "w") as fp:
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
76 fp.write(SOURCE_3)
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
77 lines = linecache.getlines(support.TESTFN)
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
78 self.assertEqual(lines, ["\n", "def f():\n", " return 3\n"])
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
79
53775
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
80 def test_clearcache(self):
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
81 cached = []
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
82 for entry in TESTS:
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
83 filename = os.path.join(TEST_PATH, entry) + '.py'
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
84 cached.append(filename)
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
85 linecache.getline(filename, 1)
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
86
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
87 # Are all files cached?
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
88 cached_empty = [fn for fn in cached if fn not in linecache.cache]
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61834
diff changeset
89 self.assertEqual(cached_empty, [])
53775
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
90
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
91 # Can we clear the cache?
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
92 linecache.clearcache()
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
93 cached_empty = [fn for fn in cached if fn in linecache.cache]
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61834
diff changeset
94 self.assertEqual(cached_empty, [])
53775
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
95
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
96 def test_checkcache(self):
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
97 getline = linecache.getline
61834
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
98 # Create a source file and cache its contents
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
99 source_name = support.TESTFN + '.py'
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
100 self.addCleanup(support.unlink, source_name)
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
101 with open(source_name, 'w') as source:
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
102 source.write(SOURCE_1)
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
103 getline(source_name, 1)
53775
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
104
61834
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
105 # Keep a copy of the old contents
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
106 source_list = []
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
107 with open(source_name) as source:
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
108 for index, line in enumerate(source):
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61834
diff changeset
109 self.assertEqual(line, getline(source_name, index + 1))
61834
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
110 source_list.append(line)
53775
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
111
61834
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
112 with open(source_name, 'w') as source:
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
113 source.write(SOURCE_2)
53775
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
114
61834
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
115 # Try to update a bogus cache entry
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
116 linecache.checkcache('dummy')
53775
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
117
61834
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
118 # Check that the cache matches the old contents
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
119 for index, line in enumerate(source_list):
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61834
diff changeset
120 self.assertEqual(line, getline(source_name, index + 1))
53775
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
121
61834
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
122 # Update the cache and check whether it matches the new source file
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
123 linecache.checkcache(source_name)
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
124 with open(source_name) as source:
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
125 for index, line in enumerate(source):
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 61834
diff changeset
126 self.assertEqual(line, getline(source_name, index + 1))
61834
52495ccf61cc Merged revisions 81438 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57564
diff changeset
127 source_list.append(line)
53775
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
128
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
129 def test_main():
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
130 support.run_unittest(LineCacheTests)
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
131
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
132 if __name__ == "__main__":
b12a44eef40b Merged revisions 72319-72320 via svnmerge from
Georg Brandl <georg@python.org>
parents:
diff changeset
133 test_main()