[Python-checkins] cpython: Issue #24054: decouple linecache tests from inspect tests

robert.collins python-checkins at python.org
Wed Aug 19 02:20:46 CEST 2015


https://hg.python.org/cpython/rev/fc56a0300cd4
changeset: 97450:fc56a0300cd4
user: Robert Collins <rbtcollins at hp.com>
date: Wed Aug 19 12:20:37 2015 +1200
summary:
 Issue #24054: decouple linecache tests from inspect tests
Patch from David D. Riddle
files:
 Lib/test/test_linecache.py | 74 ++++++++++++++++++++++---
 1 files changed, 63 insertions(+), 11 deletions(-)
diff --git a/Lib/test/test_linecache.py b/Lib/test/test_linecache.py
--- a/Lib/test/test_linecache.py
+++ b/Lib/test/test_linecache.py
@@ -3,6 +3,7 @@
 import linecache
 import unittest
 import os.path
+import tempfile
 from test import support
 
 
@@ -10,8 +11,6 @@
 NONEXISTENT_FILENAME = FILENAME + '.missing'
 INVALID_NAME = '!@$)(!@#_1'
 EMPTY = ''
-TESTS = 'inspect_fodder inspect_fodder2 mapping_tests'
-TESTS = TESTS.split()
 TEST_PATH = os.path.dirname(__file__)
 MODULES = "linecache abc".split()
 MODULE_PATH = os.path.dirname(FILENAME)
@@ -37,6 +36,65 @@
 return 3''' # No ending newline
 
 
+class TempFile:
+
+ def setUp(self):
+ super().setUp()
+ with tempfile.NamedTemporaryFile(delete=False) as fp:
+ self.file_name = fp.name
+ fp.write(self.file_byte_string)
+ self.addCleanup(support.unlink, self.file_name)
+
+
+class GetLineTestsGoodData(TempFile):
+ # file_list = ['list\n', 'of\n', 'good\n', 'strings\n']
+
+ def setUp(self):
+ self.file_byte_string = ''.join(self.file_list).encode('utf-8')
+ super().setUp()
+
+ def test_getline(self):
+ with open(self.file_name) as fp:
+ for index, line in enumerate(fp):
+ if not line.endswith('\n'):
+ line += '\n'
+
+ cached_line = linecache.getline(self.file_name, index + 1)
+ self.assertEqual(line, cached_line)
+
+ def test_getlines(self):
+ lines = linecache.getlines(self.file_name)
+ self.assertEqual(lines, self.file_list)
+
+
+class GetLineTestsBadData(TempFile):
+ # file_byte_string = b'Bad data goes here'
+
+ def test_getline(self):
+ self.assertRaises((SyntaxError, UnicodeDecodeError),
+ linecache.getline, self.file_name, 1)
+
+ def test_getlines(self):
+ self.assertRaises((SyntaxError, UnicodeDecodeError),
+ linecache.getlines, self.file_name)
+
+
+class EmptyFile(GetLineTestsGoodData, unittest.TestCase):
+ file_list = []
+
+
+class SingleEmptyLine(GetLineTestsGoodData, unittest.TestCase):
+ file_list = ['\n']
+
+
+class GoodUnicode(GetLineTestsGoodData, unittest.TestCase):
+ file_list = ['á\n', 'b\n', 'abcdef\n', 'ááááá\n']
+
+
+class BadUnicode(GetLineTestsBadData, unittest.TestCase):
+ file_byte_string = b'\x80abc'
+
+
 class LineCacheTests(unittest.TestCase):
 
 def test_getline(self):
@@ -53,13 +111,6 @@
 self.assertEqual(getline(EMPTY, 1), EMPTY)
 self.assertEqual(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'
- with open(filename) as file:
- for index, line in enumerate(file):
- self.assertEqual(line, getline(filename, index + 1))
-
 # Check module loading
 for entry in MODULES:
 filename = os.path.join(MODULE_PATH, entry) + '.py'
@@ -80,12 +131,13 @@
 
 def test_clearcache(self):
 cached = []
- for entry in TESTS:
- filename = os.path.join(TEST_PATH, entry) + '.py'
+ for entry in MODULES:
+ filename = os.path.join(MODULE_PATH, entry) + '.py'
 cached.append(filename)
 linecache.getline(filename, 1)
 
 # Are all files cached?
+ self.assertNotEqual(cached, [])
 cached_empty = [fn for fn in cached if fn not in linecache.cache]
 self.assertEqual(cached_empty, [])
 
-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /