[Python-checkins] cpython (2.7): Issue #7425: Refactor test_pydoc test case for '-k' behavior and add
ned.deily
python-checkins at python.org
Thu Oct 6 23:43:07 CEST 2011
http://hg.python.org/cpython/rev/45862f4ab1c5
changeset: 72768:45862f4ab1c5
branch: 2.7
parent: 72754:89b9e4bf6f1f
user: Ned Deily <nad at acm.org>
date: Thu Oct 06 14:17:34 2011 -0700
summary:
Issue #7425: Refactor test_pydoc test case for '-k' behavior and add
new test cases for importing bad packages and unreadable packages dirs.
files:
Lib/test/test_pydoc.py | 112 ++++++++++++++++------------
1 files changed, 63 insertions(+), 49 deletions(-)
diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py
--- a/Lib/test/test_pydoc.py
+++ b/Lib/test/test_pydoc.py
@@ -1,7 +1,6 @@
import os
import sys
import difflib
-import subprocess
import __builtin__
import re
import pydoc
@@ -10,10 +9,10 @@
import unittest
import xml.etree
import test.test_support
-from contextlib import contextmanager
from collections import namedtuple
+from test.script_helper import assert_python_ok
from test.test_support import (
- TESTFN, forget, rmtree, EnvironmentVarGuard, reap_children, captured_stdout)
+ TESTFN, rmtree, reap_children, captured_stdout)
from test import pydoc_mod
@@ -176,17 +175,15 @@
# output pattern for module with bad imports
badimport_pattern = "problem in %s - <type 'exceptions.ImportError'>: No module named %s"
-def run_pydoc(module_name, *args):
+def run_pydoc(module_name, *args, **env):
"""
Runs pydoc on the specified module. Returns the stripped
output of pydoc.
"""
- cmd = [sys.executable, pydoc.__file__, " ".join(args), module_name]
- try:
- output = subprocess.Popen(cmd, stdout=subprocess.PIPE).communicate()[0]
- return output.strip()
- finally:
- reap_children()
+ args = args + (module_name,)
+ # do not write bytecode files to avoid caching errors
+ rc, out, err = assert_python_ok('-B', pydoc.__file__, *args, **env)
+ return out.strip()
def get_pydoc_html(module):
"Returns pydoc generated output as html"
@@ -259,42 +256,6 @@
self.assertEqual(expected, result,
"documentation for missing module found")
- def test_badimport(self):
- # This tests the fix for issue 5230, where if pydoc found the module
- # but the module had an internal import error pydoc would report no doc
- # found.
- modname = 'testmod_xyzzy'
- testpairs = (
- ('i_am_not_here', 'i_am_not_here'),
- ('test.i_am_not_here_either', 'i_am_not_here_either'),
- ('test.i_am_not_here.neither_am_i', 'i_am_not_here.neither_am_i'),
- ('i_am_not_here.{}'.format(modname), 'i_am_not_here.{}'.format(modname)),
- ('test.{}'.format(modname), modname),
- )
-
- @contextmanager
- def newdirinpath(dir):
- os.mkdir(dir)
- sys.path.insert(0, dir)
- yield
- sys.path.pop(0)
- rmtree(dir)
-
- with newdirinpath(TESTFN), EnvironmentVarGuard() as env:
- env['PYTHONPATH'] = TESTFN
- fullmodname = os.path.join(TESTFN, modname)
- sourcefn = fullmodname + os.extsep + "py"
- for importstring, expectedinmsg in testpairs:
- f = open(sourcefn, 'w')
- f.write("import {}\n".format(importstring))
- f.close()
- try:
- result = run_pydoc(modname)
- finally:
- forget(modname)
- expected = badimport_pattern % (modname, expectedinmsg)
- self.assertEqual(expected, result)
-
def test_input_strip(self):
missing_module = " test.i_am_not_here "
result = run_pydoc(missing_module)
@@ -317,6 +278,55 @@
"<type 'exceptions.Exception'>")
+class PydocImportTest(unittest.TestCase):
+
+ def setUp(self):
+ self.test_dir = os.mkdir(TESTFN)
+ self.addCleanup(rmtree, TESTFN)
+
+ def test_badimport(self):
+ # This tests the fix for issue 5230, where if pydoc found the module
+ # but the module had an internal import error pydoc would report no doc
+ # found.
+ modname = 'testmod_xyzzy'
+ testpairs = (
+ ('i_am_not_here', 'i_am_not_here'),
+ ('test.i_am_not_here_either', 'i_am_not_here_either'),
+ ('test.i_am_not_here.neither_am_i', 'i_am_not_here.neither_am_i'),
+ ('i_am_not_here.{}'.format(modname),
+ 'i_am_not_here.{}'.format(modname)),
+ ('test.{}'.format(modname), modname),
+ )
+
+ sourcefn = os.path.join(TESTFN, modname) + os.extsep + "py"
+ for importstring, expectedinmsg in testpairs:
+ with open(sourcefn, 'w') as f:
+ f.write("import {}\n".format(importstring))
+ result = run_pydoc(modname, PYTHONPATH=TESTFN)
+ expected = badimport_pattern % (modname, expectedinmsg)
+ self.assertEqual(expected, result)
+
+ def test_apropos_with_bad_package(self):
+ # Issue 7425 - pydoc -k failed when bad package on path
+ pkgdir = os.path.join(TESTFN, "syntaxerr")
+ os.mkdir(pkgdir)
+ 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('nothing', '-k', PYTHONPATH=TESTFN)
+ self.assertEqual('', result)
+
+ def test_apropos_with_unreadable_dir(self):
+ # Issue 7367 - pydoc -k failed when unreadable dir on path
+ self.unreadable_dir = os.path.join(TESTFN, "unreadable")
+ os.mkdir(self.unreadable_dir, 0)
+ 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('nothing', '-k', PYTHONPATH=TESTFN)
+ self.assertEqual('', result)
+
+
class TestDescriptions(unittest.TestCase):
def test_module(self):
@@ -376,9 +386,13 @@
def test_main():
- test.test_support.run_unittest(PyDocDocTest,
- TestDescriptions,
- TestHelper)
+ try:
+ test.test_support.run_unittest(PyDocDocTest,
+ PydocImportTest,
+ TestDescriptions,
+ TestHelper)
+ finally:
+ reap_children()
if __name__ == "__main__":
test_main()
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list