diff options
Diffstat (limited to 'Lib/test/test_site.py')
-rw-r--r-- | Lib/test/test_site.py | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/Lib/test/test_site.py b/Lib/test/test_site.py index 7ed0ee2..343f8ef 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.support import run_unittest, TESTFN, EnvironmentVarGuard +from test.support import captured_output import builtins import os import sys @@ -83,6 +84,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', encoding='utf-8') + 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 |