]> git.proxmox.com Git - mirror_edk2.git/blame - AppPkg/Applications/Python/Python-2.7.2/Lib/test/test_linecache.py
EmbeddedPkg: Extend NvVarStoreFormattedLib LIBRARY_CLASS
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.2 / Lib / test / test_linecache.py
CommitLineData
4710c53d 1""" Tests for the linecache module """\r
2\r
3import linecache\r
4import unittest\r
5import os.path\r
6from test import test_support as support\r
7\r
8\r
9FILENAME = linecache.__file__\r
10INVALID_NAME = '!@$)(!@#_1'\r
11EMPTY = ''\r
12TESTS = 'inspect_fodder inspect_fodder2 mapping_tests'\r
13TESTS = TESTS.split()\r
14TEST_PATH = os.path.dirname(support.__file__)\r
15MODULES = "linecache abc".split()\r
16MODULE_PATH = os.path.dirname(FILENAME)\r
17\r
18SOURCE_1 = '''\r
19" Docstring "\r
20\r
21def function():\r
22 return result\r
23\r
24'''\r
25\r
26SOURCE_2 = '''\r
27def f():\r
28 return 1 + 1\r
29\r
30a = f()\r
31\r
32'''\r
33\r
34SOURCE_3 = '''\r
35def f():\r
36 return 3''' # No ending newline\r
37\r
38\r
39class LineCacheTests(unittest.TestCase):\r
40\r
41 def test_getline(self):\r
42 getline = linecache.getline\r
43\r
44 # Bad values for line number should return an empty string\r
45 self.assertEqual(getline(FILENAME, 2**15), EMPTY)\r
46 self.assertEqual(getline(FILENAME, -1), EMPTY)\r
47\r
48 # Float values currently raise TypeError, should it?\r
49 self.assertRaises(TypeError, getline, FILENAME, 1.1)\r
50\r
51 # Bad filenames should return an empty string\r
52 self.assertEqual(getline(EMPTY, 1), EMPTY)\r
53 self.assertEqual(getline(INVALID_NAME, 1), EMPTY)\r
54\r
55 # Check whether lines correspond to those from file iteration\r
56 for entry in TESTS:\r
57 filename = os.path.join(TEST_PATH, entry) + '.py'\r
58 for index, line in enumerate(open(filename)):\r
59 self.assertEqual(line, getline(filename, index + 1))\r
60\r
61 # Check module loading\r
62 for entry in MODULES:\r
63 filename = os.path.join(MODULE_PATH, entry) + '.py'\r
64 for index, line in enumerate(open(filename)):\r
65 self.assertEqual(line, getline(filename, index + 1))\r
66\r
67 # Check that bogus data isn't returned (issue #1309567)\r
68 empty = linecache.getlines('a/b/c/__init__.py')\r
69 self.assertEqual(empty, [])\r
70\r
71 def test_no_ending_newline(self):\r
72 self.addCleanup(support.unlink, support.TESTFN)\r
73 with open(support.TESTFN, "w") as fp:\r
74 fp.write(SOURCE_3)\r
75 lines = linecache.getlines(support.TESTFN)\r
76 self.assertEqual(lines, ["\n", "def f():\n", " return 3\n"])\r
77\r
78 def test_clearcache(self):\r
79 cached = []\r
80 for entry in TESTS:\r
81 filename = os.path.join(TEST_PATH, entry) + '.py'\r
82 cached.append(filename)\r
83 linecache.getline(filename, 1)\r
84\r
85 # Are all files cached?\r
86 cached_empty = [fn for fn in cached if fn not in linecache.cache]\r
87 self.assertEqual(cached_empty, [])\r
88\r
89 # Can we clear the cache?\r
90 linecache.clearcache()\r
91 cached_empty = [fn for fn in cached if fn in linecache.cache]\r
92 self.assertEqual(cached_empty, [])\r
93\r
94 def test_checkcache(self):\r
95 getline = linecache.getline\r
96 # Create a source file and cache its contents\r
97 source_name = support.TESTFN + '.py'\r
98 self.addCleanup(support.unlink, source_name)\r
99 with open(source_name, 'w') as source:\r
100 source.write(SOURCE_1)\r
101 getline(source_name, 1)\r
102\r
103 # Keep a copy of the old contents\r
104 source_list = []\r
105 with open(source_name) as source:\r
106 for index, line in enumerate(source):\r
107 self.assertEqual(line, getline(source_name, index + 1))\r
108 source_list.append(line)\r
109\r
110 with open(source_name, 'w') as source:\r
111 source.write(SOURCE_2)\r
112\r
113 # Try to update a bogus cache entry\r
114 linecache.checkcache('dummy')\r
115\r
116 # Check that the cache matches the old contents\r
117 for index, line in enumerate(source_list):\r
118 self.assertEqual(line, getline(source_name, index + 1))\r
119\r
120 # Update the cache and check whether it matches the new source file\r
121 linecache.checkcache(source_name)\r
122 with open(source_name) as source:\r
123 for index, line in enumerate(source):\r
124 self.assertEqual(line, getline(source_name, index + 1))\r
125 source_list.append(line)\r
126\r
127def test_main():\r
128 support.run_unittest(LineCacheTests)\r
129\r
130if __name__ == "__main__":\r
131 test_main()\r