diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2013-05-19 13:44:54 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2013-05-19 13:44:54 (GMT) |
commit | 916fc7bf286469f41e2d4b2bcd2d6c73314421a4 (patch) | |
tree | 7e33596cabb078caeb23a0258f10f10cd9c851c4 /Lib/test/test_pydoc.py | |
parent | 2c3f2f19df0939744774370369b55e3ca214040c (diff) | |
download | cpython-916fc7bf286469f41e2d4b2bcd2d6c73314421a4.zip cpython-916fc7bf286469f41e2d4b2bcd2d6c73314421a4.tar.gz cpython-916fc7bf286469f41e2d4b2bcd2d6c73314421a4.tar.bz2 |
Issue #11995: test_pydoc doesn't import all sys.path modules anymore.
Diffstat (limited to 'Lib/test/test_pydoc.py')
-rw-r--r-- | Lib/test/test_pydoc.py | 73 |
1 files changed, 58 insertions, 15 deletions
diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py index 542a29b..cdcc707 100644 --- a/Lib/test/test_pydoc.py +++ b/Lib/test/test_pydoc.py @@ -1,10 +1,12 @@ import os import sys import builtins +import contextlib import difflib import inspect import pydoc import keyword +import pkgutil import re import string import test.support @@ -17,7 +19,8 @@ from collections import namedtuple from test.script_helper import assert_python_ok from test.support import ( TESTFN, rmtree, - reap_children, reap_threads, captured_output, captured_stdout, unlink + reap_children, reap_threads, captured_output, captured_stdout, + captured_stderr, unlink ) from test import pydoc_mod @@ -259,6 +262,29 @@ def get_html_title(text): return title +class PydocBaseTest(unittest.TestCase): + + def _restricted_walk_packages(self, walk_packages, path=None): + """ + A version of pkgutil.walk_packages() that will restrict itself to + a given path. + """ + default_path = path or [os.path.dirname(__file__)] + def wrapper(path=None, prefix='', onerror=None): + return walk_packages(path or default_path, prefix, onerror) + return wrapper + + @contextlib.contextmanager + def restrict_walk_packages(self, path=None): + walk_packages = pkgutil.walk_packages + pkgutil.walk_packages = self._restricted_walk_packages(walk_packages, + path) + try: + yield + finally: + pkgutil.walk_packages = walk_packages + + class PydocDocTest(unittest.TestCase): @unittest.skipIf(sys.flags.optimize >= 2, @@ -420,7 +446,7 @@ class PydocDocTest(unittest.TestCase): self.assertDictEqual(methods, expected) -class PydocImportTest(unittest.TestCase): +class PydocImportTest(PydocBaseTest): def setUp(self): self.test_dir = os.mkdir(TESTFN) @@ -454,8 +480,19 @@ class PydocImportTest(unittest.TestCase): badsyntax = os.path.join(pkgdir, "__init__") + os.extsep + "py" with open(badsyntax, 'w') as f: f.write("invalid python syntax = $1\n") - result = run_pydoc('zqwykjv', '-k', PYTHONPATH=TESTFN) - self.assertEqual(b'', result) + with self.restrict_walk_packages(path=[TESTFN]): + with captured_stdout() as out: + with captured_stderr() as err: + pydoc.apropos('xyzzy') + # No result, no error + self.assertEqual(out.getvalue(), '') + self.assertEqual(err.getvalue(), '') + # The package name is still matched + with captured_stdout() as out: + with captured_stderr() as err: + pydoc.apropos('syntaxerr') + self.assertEqual(out.getvalue().strip(), 'syntaxerr') + self.assertEqual(err.getvalue(), '') def test_apropos_with_unreadable_dir(self): # Issue 7367 - pydoc -k failed when unreadable dir on path @@ -464,8 +501,13 @@ class PydocImportTest(unittest.TestCase): self.addCleanup(os.rmdir, self.unreadable_dir) # Note, on Windows the directory appears to be still # readable so this is not really testing the issue there - result = run_pydoc('zqwykjv', '-k', PYTHONPATH=TESTFN) - self.assertEqual(b'', result) + with self.restrict_walk_packages(path=[TESTFN]): + with captured_stdout() as out: + with captured_stderr() as err: + pydoc.apropos('SOMEKEY') + # No result, no error + self.assertEqual(out.getvalue(), '') + self.assertEqual(err.getvalue(), '') class TestDescriptions(unittest.TestCase): @@ -527,7 +569,7 @@ class PydocServerTest(unittest.TestCase): self.assertEqual(serverthread.error, None) -class PydocUrlHandlerTest(unittest.TestCase): +class PydocUrlHandlerTest(PydocBaseTest): """Tests for pydoc._url_handler""" def test_content_type_err(self): @@ -554,18 +596,19 @@ class PydocUrlHandlerTest(unittest.TestCase): ("getfile?key=foobar", "Pydoc: Error - getfile?key=foobar"), ] - for url, title in requests: + with self.restrict_walk_packages(): + for url, title in requests: + text = pydoc._url_handler(url, "text/html") + result = get_html_title(text) + self.assertEqual(result, title, text) + + path = string.__file__ + title = "Pydoc: getfile " + path + url = "getfile?key=" + path text = pydoc._url_handler(url, "text/html") result = get_html_title(text) self.assertEqual(result, title) - path = string.__file__ - title = "Pydoc: getfile " + path - url = "getfile?key=" + path - text = pydoc._url_handler(url, "text/html") - result = get_html_title(text) - self.assertEqual(result, title) - class TestHelper(unittest.TestCase): def test_keywords(self): |