#14492: fix some bugs in Tools/scripts/pdeps.py.

Initial patch by Popa Claudiu.
This commit is contained in:
R David Murray 2012-04-05 22:59:13 -04:00
parent fee3fc748e
commit d3af6344ef
2 changed files with 32 additions and 5 deletions

View File

@ -6,8 +6,10 @@ Tools directory of a Python checkout or tarball, such as reindent.py.
import os import os
import sys import sys
import imp
import unittest import unittest
import sysconfig import sysconfig
import tempfile
from test import support from test import support
from test.script_helper import assert_python_ok from test.script_helper import assert_python_ok
@ -72,6 +74,31 @@ class TestSundryScripts(unittest.TestCase):
import analyze_dxp import analyze_dxp
class PdepsTests(unittest.TestCase):
@classmethod
def setUpClass(self):
path = os.path.join(scriptsdir, 'pdeps.py')
self.pdeps = imp.load_source('pdeps', path)
@classmethod
def tearDownClass(self):
if 'pdeps' in sys.modules:
del sys.modules['pdeps']
def test_process_errors(self):
# Issue #14492: m_import.match(line) can be None.
with tempfile.TemporaryDirectory() as tmpdir:
fn = os.path.join(tmpdir, 'foo')
with open(fn, 'w') as stream:
stream.write("#!/this/will/fail")
self.pdeps.process(fn, {})
def test_inverse_attribute_error(self):
# Issue #14492: this used to fail with an AttributeError.
self.pdeps.inverse({'a': []})
def test_main(): def test_main():
support.run_unittest(*[obj for obj in globals().values() support.run_unittest(*[obj for obj in globals().values()
if isinstance(obj, type)]) if isinstance(obj, type)])

View File

@ -76,10 +76,9 @@ def process(filename, table):
nextline = fp.readline() nextline = fp.readline()
if not nextline: break if not nextline: break
line = line[:-1] + nextline line = line[:-1] + nextline
if m_import.match(line) >= 0: m_found = m_import.match(line) or m_from.match(line)
(a, b), (a1, b1) = m_import.regs[:2] if m_found:
elif m_from.match(line) >= 0: (a, b), (a1, b1) = m_found.regs[:2]
(a, b), (a1, b1) = m_from.regs[:2]
else: continue else: continue
words = line[a1:b1].split(',') words = line[a1:b1].split(',')
# print '#', line, words # print '#', line, words
@ -87,6 +86,7 @@ def process(filename, table):
word = word.strip() word = word.strip()
if word not in list: if word not in list:
list.append(word) list.append(word)
fp.close()
# Compute closure (this is in fact totally general) # Compute closure (this is in fact totally general)
@ -123,7 +123,7 @@ def closure(table):
def inverse(table): def inverse(table):
inv = {} inv = {}
for key in table.keys(): for key in table.keys():
if not inv.has_key(key): if key not in inv:
inv[key] = [] inv[key] = []
for item in table[key]: for item in table[key]:
store(inv, item, key) store(inv, item, key)