summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2013-05-19 13:46:37 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2013-05-19 13:46:37 (GMT)
commitc52d113e282630a5d44d80a8f02ce743b57aeb81 (patch)
treeee1751815400637f5edddcce328571c83a10ca19
parent87aa7dc211451c0858f4f8cf7adae2de2a16e8fa (diff)
parent916fc7bf286469f41e2d4b2bcd2d6c73314421a4 (diff)
downloadcpython-c52d113e282630a5d44d80a8f02ce743b57aeb81.zip
cpython-c52d113e282630a5d44d80a8f02ce743b57aeb81.tar.gz
cpython-c52d113e282630a5d44d80a8f02ce743b57aeb81.tar.bz2
Issue #11995: test_pydoc doesn't import all sys.path modules anymore.
-rw-r--r--Lib/test/test_pydoc.py73
-rw-r--r--Misc/NEWS6
2 files changed, 63 insertions, 16 deletions
diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py
index 8524e5a..399f818 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
@@ -255,6 +258,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,
@@ -441,7 +467,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)
@@ -475,8 +501,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
@@ -485,8 +522,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):
@@ -548,7 +590,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):
@@ -575,18 +617,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):
diff --git a/Misc/NEWS b/Misc/NEWS
index 4a3ba4b..da81c3b 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -331,6 +331,11 @@ Documentation
- Issue #6696: add documentation for the Profile objects, and improve
profile/cProfile docs. Patch by Tom Pinckney.
+Tests
+-----
+
+- Issue #11995: test_pydoc doesn't import all sys.path modules anymore.
+
C-API
-----
@@ -338,7 +343,6 @@ C-API
- Issue #17327: Add PyDict_SetDefault.
-
IDLE
----