summaryrefslogtreecommitdiff
path: root/Lib/test
diff options
context:
space:
mode:
authorR. David Murray <rdmurray@bitdance.com>2010-12-26 22:29:53 +0000
committerR. David Murray <rdmurray@bitdance.com>2010-12-26 22:29:53 +0000
commit5874ed6cee569a73cd0e947605210822b251df7f (patch)
tree804b3a120d312569f8d1d8217ed24dc491391458 /Lib/test
parent8e726b4328cc6db1c9524aa4f4d52c4921d9020a (diff)
downloadcpython-git-5874ed6cee569a73cd0e947605210822b251df7f.tar.gz
Merged revisions 87497 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r87497 | r.david.murray | 2010-12-26 14:54:29 -0500 (Sun, 26 Dec 2010) | 7 lines #5258/#10642: print fn, line, traceback and continue when .pth file is broken If a .pth file contained an error, it could cause a traceback in site.py, terminating its processing. In 2.7 and 3.2, the interpreter will then not start. Previously, a message would print saying to use -v to get the traceback. In either case, the traceback generated for a failed .pth file did not include the .pth filename, making it difficult to debug the problem. Now site.py reports not only the .pth filename but also the line number causing the error, and just skips the remainder of the file. ........
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/test_site.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/Lib/test/test_site.py b/Lib/test/test_site.py
index 4e801e9d91..0f8405a543 100644
--- a/Lib/test/test_site.py
+++ b/Lib/test/test_site.py
@@ -6,6 +6,7 @@ executing have not been removed.
"""
import unittest
from test.test_support import run_unittest, TESTFN, EnvironmentVarGuard
+from test.test_support import captured_output
import __builtin__
import os
import sys
@@ -94,6 +95,53 @@ class HelperFunctionsTests(unittest.TestCase):
finally:
pth_file.cleanup()
+ def make_pth(self, contents, pth_dir='.', pth_name=TESTFN):
+ # Create a .pth file and return its (abspath, basename).
+ pth_dir = os.path.abspath(pth_dir)
+ pth_basename = pth_name + '.pth'
+ pth_fn = os.path.join(pth_dir, pth_basename)
+ pth_file = open(pth_fn, 'w')
+ self.addCleanup(lambda: os.remove(pth_fn))
+ pth_file.write(contents)
+ pth_file.close()
+ return pth_dir, pth_basename
+
+ def test_addpackage_import_bad_syntax(self):
+ # Issue 10642
+ pth_dir, pth_fn = self.make_pth("import bad)syntax\n")
+ with captured_output("stderr") as err_out:
+ site.addpackage(pth_dir, pth_fn, set())
+ self.assertRegexpMatches(err_out.getvalue(), "line 1")
+ self.assertRegexpMatches(err_out.getvalue(), os.path.join(pth_dir, pth_fn))
+ # XXX: the previous two should be independent checks so that the
+ # order doesn't matter. The next three could be a single check
+ # but my regex foo isn't good enough to write it.
+ self.assertRegexpMatches(err_out.getvalue(), 'Traceback')
+ self.assertRegexpMatches(err_out.getvalue(), r'import bad\)syntax')
+ self.assertRegexpMatches(err_out.getvalue(), 'SyntaxError')
+
+ def test_addpackage_import_bad_exec(self):
+ # Issue 10642
+ pth_dir, pth_fn = self.make_pth("randompath\nimport nosuchmodule\n")
+ with captured_output("stderr") as err_out:
+ site.addpackage(pth_dir, pth_fn, set())
+ self.assertRegexpMatches(err_out.getvalue(), "line 2")
+ self.assertRegexpMatches(err_out.getvalue(), os.path.join(pth_dir, pth_fn))
+ # XXX: ditto previous XXX comment.
+ self.assertRegexpMatches(err_out.getvalue(), 'Traceback')
+ self.assertRegexpMatches(err_out.getvalue(), 'ImportError')
+
+ def test_addpackage_import_bad_pth_file(self):
+ # Issue 5258
+ pth_dir, pth_fn = self.make_pth("abc\x00def\n")
+ with captured_output("stderr") as err_out:
+ site.addpackage(pth_dir, pth_fn, set())
+ self.assertRegexpMatches(err_out.getvalue(), "line 1")
+ self.assertRegexpMatches(err_out.getvalue(), os.path.join(pth_dir, pth_fn))
+ # XXX: ditto previous XXX comment.
+ self.assertRegexpMatches(err_out.getvalue(), 'Traceback')
+ self.assertRegexpMatches(err_out.getvalue(), 'TypeError')
+
def test_addsitedir(self):
# Same tests for test_addpackage since addsitedir() essentially just
# calls addpackage() for every .pth file in the directory