mirror of https://github.com/python/cpython
Issue #11995: test_pydoc doesn't import all sys.path modules anymore.
This commit is contained in:
commit
c52d113e28
|
@ -1,10 +1,12 @@
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import builtins
|
import builtins
|
||||||
|
import contextlib
|
||||||
import difflib
|
import difflib
|
||||||
import inspect
|
import inspect
|
||||||
import pydoc
|
import pydoc
|
||||||
import keyword
|
import keyword
|
||||||
|
import pkgutil
|
||||||
import re
|
import re
|
||||||
import string
|
import string
|
||||||
import test.support
|
import test.support
|
||||||
|
@ -17,7 +19,8 @@ from collections import namedtuple
|
||||||
from test.script_helper import assert_python_ok
|
from test.script_helper import assert_python_ok
|
||||||
from test.support import (
|
from test.support import (
|
||||||
TESTFN, rmtree,
|
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
|
from test import pydoc_mod
|
||||||
|
|
||||||
|
@ -255,6 +258,29 @@ def get_html_title(text):
|
||||||
return title
|
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):
|
class PydocDocTest(unittest.TestCase):
|
||||||
|
|
||||||
@unittest.skipIf(sys.flags.optimize >= 2,
|
@unittest.skipIf(sys.flags.optimize >= 2,
|
||||||
|
@ -441,7 +467,7 @@ class PydocDocTest(unittest.TestCase):
|
||||||
self.assertDictEqual(methods, expected)
|
self.assertDictEqual(methods, expected)
|
||||||
|
|
||||||
|
|
||||||
class PydocImportTest(unittest.TestCase):
|
class PydocImportTest(PydocBaseTest):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.test_dir = os.mkdir(TESTFN)
|
self.test_dir = os.mkdir(TESTFN)
|
||||||
|
@ -475,8 +501,19 @@ class PydocImportTest(unittest.TestCase):
|
||||||
badsyntax = os.path.join(pkgdir, "__init__") + os.extsep + "py"
|
badsyntax = os.path.join(pkgdir, "__init__") + os.extsep + "py"
|
||||||
with open(badsyntax, 'w') as f:
|
with open(badsyntax, 'w') as f:
|
||||||
f.write("invalid python syntax = $1\n")
|
f.write("invalid python syntax = $1\n")
|
||||||
result = run_pydoc('zqwykjv', '-k', PYTHONPATH=TESTFN)
|
with self.restrict_walk_packages(path=[TESTFN]):
|
||||||
self.assertEqual(b'', result)
|
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):
|
def test_apropos_with_unreadable_dir(self):
|
||||||
# Issue 7367 - pydoc -k failed when unreadable dir on path
|
# Issue 7367 - pydoc -k failed when unreadable dir on path
|
||||||
|
@ -485,8 +522,13 @@ class PydocImportTest(unittest.TestCase):
|
||||||
self.addCleanup(os.rmdir, self.unreadable_dir)
|
self.addCleanup(os.rmdir, self.unreadable_dir)
|
||||||
# Note, on Windows the directory appears to be still
|
# Note, on Windows the directory appears to be still
|
||||||
# readable so this is not really testing the issue there
|
# readable so this is not really testing the issue there
|
||||||
result = run_pydoc('zqwykjv', '-k', PYTHONPATH=TESTFN)
|
with self.restrict_walk_packages(path=[TESTFN]):
|
||||||
self.assertEqual(b'', result)
|
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):
|
class TestDescriptions(unittest.TestCase):
|
||||||
|
@ -548,7 +590,7 @@ class PydocServerTest(unittest.TestCase):
|
||||||
self.assertEqual(serverthread.error, None)
|
self.assertEqual(serverthread.error, None)
|
||||||
|
|
||||||
|
|
||||||
class PydocUrlHandlerTest(unittest.TestCase):
|
class PydocUrlHandlerTest(PydocBaseTest):
|
||||||
"""Tests for pydoc._url_handler"""
|
"""Tests for pydoc._url_handler"""
|
||||||
|
|
||||||
def test_content_type_err(self):
|
def test_content_type_err(self):
|
||||||
|
@ -575,18 +617,19 @@ class PydocUrlHandlerTest(unittest.TestCase):
|
||||||
("getfile?key=foobar", "Pydoc: Error - getfile?key=foobar"),
|
("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")
|
text = pydoc._url_handler(url, "text/html")
|
||||||
result = get_html_title(text)
|
result = get_html_title(text)
|
||||||
self.assertEqual(result, title)
|
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):
|
class TestHelper(unittest.TestCase):
|
||||||
def test_keywords(self):
|
def test_keywords(self):
|
||||||
|
|
|
@ -331,6 +331,11 @@ Documentation
|
||||||
- Issue #6696: add documentation for the Profile objects, and improve
|
- Issue #6696: add documentation for the Profile objects, and improve
|
||||||
profile/cProfile docs. Patch by Tom Pinckney.
|
profile/cProfile docs. Patch by Tom Pinckney.
|
||||||
|
|
||||||
|
Tests
|
||||||
|
-----
|
||||||
|
|
||||||
|
- Issue #11995: test_pydoc doesn't import all sys.path modules anymore.
|
||||||
|
|
||||||
C-API
|
C-API
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
@ -338,7 +343,6 @@ C-API
|
||||||
|
|
||||||
- Issue #17327: Add PyDict_SetDefault.
|
- Issue #17327: Add PyDict_SetDefault.
|
||||||
|
|
||||||
|
|
||||||
IDLE
|
IDLE
|
||||||
----
|
----
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue