Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 631a35c

Browse files
committed
Issue #24054: decouple linecache tests from inspect tests
Patch from David D. Riddle
1 parent 572183c commit 631a35c

1 file changed

Lines changed: 63 additions & 11 deletions

File tree

Lib/test/test_linecache.py

Lines changed: 63 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,14 @@
33
import linecache
44
import unittest
55
import os.path
6+
import tempfile
67
from test import support
78

89

910
FILENAME = linecache.__file__
1011
NONEXISTENT_FILENAME = FILENAME + '.missing'
1112
INVALID_NAME = '!@$)(!@#_1'
1213
EMPTY = ''
13-
TESTS = 'inspect_fodder inspect_fodder2 mapping_tests'
14-
TESTS = TESTS.split()
1514
TEST_PATH = os.path.dirname(__file__)
1615
MODULES = "linecache abc".split()
1716
MODULE_PATH = os.path.dirname(FILENAME)
@@ -37,6 +36,65 @@ def f():
3736
return 3''' # No ending newline
3837

3938

39+
class TempFile:
40+
41+
def setUp(self):
42+
super().setUp()
43+
with tempfile.NamedTemporaryFile(delete=False) as fp:
44+
self.file_name = fp.name
45+
fp.write(self.file_byte_string)
46+
self.addCleanup(support.unlink, self.file_name)
47+
48+
49+
class GetLineTestsGoodData(TempFile):
50+
# file_list = ['list\n', 'of\n', 'good\n', 'strings\n']
51+
52+
def setUp(self):
53+
self.file_byte_string = ''.join(self.file_list).encode('utf-8')
54+
super().setUp()
55+
56+
def test_getline(self):
57+
with open(self.file_name) as fp:
58+
for index, line in enumerate(fp):
59+
if not line.endswith('\n'):
60+
line += '\n'
61+
62+
cached_line = linecache.getline(self.file_name, index + 1)
63+
self.assertEqual(line, cached_line)
64+
65+
def test_getlines(self):
66+
lines = linecache.getlines(self.file_name)
67+
self.assertEqual(lines, self.file_list)
68+
69+
70+
class GetLineTestsBadData(TempFile):
71+
# file_byte_string = b'Bad data goes here'
72+
73+
def test_getline(self):
74+
self.assertRaises((SyntaxError, UnicodeDecodeError),
75+
linecache.getline, self.file_name, 1)
76+
77+
def test_getlines(self):
78+
self.assertRaises((SyntaxError, UnicodeDecodeError),
79+
linecache.getlines, self.file_name)
80+
81+
82+
class EmptyFile(GetLineTestsGoodData, unittest.TestCase):
83+
file_list = []
84+
85+
86+
class SingleEmptyLine(GetLineTestsGoodData, unittest.TestCase):
87+
file_list = ['\n']
88+
89+
90+
class GoodUnicode(GetLineTestsGoodData, unittest.TestCase):
91+
file_list = [\n', 'b\n', 'abcdef\n', 'ááááá\n']
92+
93+
94+
class BadUnicode(GetLineTestsBadData, unittest.TestCase):
95+
file_byte_string = b'\x80abc'
96+
97+
4098
class LineCacheTests(unittest.TestCase):
4199

42100
def test_getline(self):
@@ -53,13 +111,6 @@ def test_getline(self):
53111
self.assertEqual(getline(EMPTY, 1), EMPTY)
54112
self.assertEqual(getline(INVALID_NAME, 1), EMPTY)
55113

56-
# Check whether lines correspond to those from file iteration
57-
for entry in TESTS:
58-
filename = os.path.join(TEST_PATH, entry) + '.py'
59-
with open(filename) as file:
60-
for index, line in enumerate(file):
61-
self.assertEqual(line, getline(filename, index + 1))
62-
63114
# Check module loading
64115
for entry in MODULES:
65116
filename = os.path.join(MODULE_PATH, entry) + '.py'
@@ -80,12 +131,13 @@ def test_no_ending_newline(self):
80131

81132
def test_clearcache(self):
82133
cached = []
83-
for entry in TESTS:
84-
filename = os.path.join(TEST_PATH, entry) + '.py'
134+
for entry in MODULES:
135+
filename = os.path.join(MODULE_PATH, entry) + '.py'
85136
cached.append(filename)
86137
linecache.getline(filename, 1)
87138

88139
# Are all files cached?
140+
self.assertNotEqual(cached, [])
89141
cached_empty = [fn for fn in cached if fn not in linecache.cache]
90142
self.assertEqual(cached_empty, [])
91143

0 commit comments

Comments
 (0)