summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_pydoc/test_pydoc.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_pydoc/test_pydoc.py')
-rw-r--r--Lib/test/test_pydoc/test_pydoc.py62
1 files changed, 49 insertions, 13 deletions
diff --git a/Lib/test/test_pydoc/test_pydoc.py b/Lib/test/test_pydoc/test_pydoc.py
index 57e5b8e..f29ff0b 100644
--- a/Lib/test/test_pydoc/test_pydoc.py
+++ b/Lib/test/test_pydoc/test_pydoc.py
@@ -31,7 +31,7 @@ from test.support import os_helper
from test.support.script_helper import (assert_python_ok,
assert_python_failure, spawn_python)
from test.support import threading_helper
-from test.support import (reap_children, captured_output, captured_stdout,
+from test.support import (reap_children, captured_stdout,
captured_stderr, is_emscripten, is_wasi,
requires_docstrings, MISSING_C_DOCSTRINGS)
from test.support.os_helper import (TESTFN, rmtree, unlink)
@@ -675,9 +675,8 @@ class PydocDocTest(unittest.TestCase):
help_header = textwrap.dedent(help_header)
expected_help_pattern = help_header + expected_text_pattern
- with captured_output('stdout') as output, \
- captured_output('stderr') as err, \
- StringIO() as buf:
+ with captured_stdout() as output, captured_stderr() as err:
+ buf = StringIO()
helper = pydoc.Helper(output=buf)
helper.help(module)
result = buf.getvalue().strip()
@@ -701,9 +700,8 @@ class PydocDocTest(unittest.TestCase):
def run_pydoc_for_request(request, expected_text_part):
"""Helper function to run pydoc with its output redirected"""
- with captured_output('stdout') as output, \
- captured_output('stderr') as err, \
- StringIO() as buf:
+ with captured_stdout() as output, captured_stderr() as err:
+ buf = StringIO()
helper = pydoc.Helper(output=buf)
helper.help(request)
result = buf.getvalue().strip()
@@ -737,6 +735,45 @@ class PydocDocTest(unittest.TestCase):
run_pydoc_for_request(pydoc.Helper.help, 'Help on function help in module pydoc:')
# test for pydoc.Helper() instance skipped because it is always meant to be interactive
+ @unittest.skipIf(hasattr(sys, 'gettrace') and sys.gettrace(),
+ 'trace function introduces __locals__ unexpectedly')
+ @requires_docstrings
+ def test_help_output_pager(self):
+ def run_pydoc_pager(request, what, expected_first_line):
+ with (captured_stdout() as output,
+ captured_stderr() as err,
+ unittest.mock.patch('pydoc.pager') as pager_mock,
+ self.subTest(repr(request))):
+ helper = pydoc.Helper()
+ helper.help(request)
+ self.assertEqual('', err.getvalue())
+ self.assertEqual('\n', output.getvalue())
+ pager_mock.assert_called_once()
+ result = clean_text(pager_mock.call_args.args[0])
+ self.assertEqual(result.splitlines()[0], expected_first_line)
+ self.assertEqual(pager_mock.call_args.args[1], f'Help on {what}')
+
+ run_pydoc_pager('%', 'EXPRESSIONS', 'Operator precedence')
+ run_pydoc_pager('True', 'bool object', 'Help on bool object:')
+ run_pydoc_pager(True, 'bool object', 'Help on bool object:')
+ run_pydoc_pager('assert', 'assert', 'The "assert" statement')
+ run_pydoc_pager('TYPES', 'TYPES', 'The standard type hierarchy')
+ run_pydoc_pager('pydoc.Helper.help', 'pydoc.Helper.help',
+ 'Help on function help in pydoc.Helper:')
+ run_pydoc_pager(pydoc.Helper.help, 'Helper.help',
+ 'Help on function help in module pydoc:')
+ run_pydoc_pager('str', 'str', 'Help on class str in module builtins:')
+ run_pydoc_pager(str, 'str', 'Help on class str in module builtins:')
+ run_pydoc_pager('str.upper', 'str.upper', 'Help on method_descriptor in str:')
+ run_pydoc_pager(str.upper, 'str.upper', 'Help on method_descriptor:')
+ run_pydoc_pager(str.__add__, 'str.__add__', 'Help on wrapper_descriptor:')
+ run_pydoc_pager(int.numerator, 'int.numerator',
+ 'Help on getset descriptor builtins.int.numerator:')
+ run_pydoc_pager(list[int], 'list',
+ 'Help on GenericAlias in module builtins:')
+ run_pydoc_pager('sys', 'sys', 'Help on built-in module sys:')
+ run_pydoc_pager(sys, 'sys', 'Help on built-in module sys:')
+
def test_showtopic(self):
with captured_stdout() as showtopic_io:
helper = pydoc.Helper()
@@ -770,9 +807,8 @@ class PydocDocTest(unittest.TestCase):
# Helper.showtopic should be redirected
self.maxDiff = None
- with captured_output('stdout') as output, \
- captured_output('stderr') as err, \
- StringIO() as buf:
+ with captured_stdout() as output, captured_stderr() as err:
+ buf = StringIO()
helper = pydoc.Helper(output=buf)
helper.showtopic('with')
result = buf.getvalue().strip()
@@ -785,7 +821,7 @@ class PydocDocTest(unittest.TestCase):
def test_lambda_with_return_annotation(self):
func = lambda a, b, c: 1
func.__annotations__ = {"return": int}
- with captured_output('stdout') as help_io:
+ with captured_stdout() as help_io:
pydoc.help(func)
helptext = help_io.getvalue()
self.assertIn("lambda (a, b, c) -> int", helptext)
@@ -793,7 +829,7 @@ class PydocDocTest(unittest.TestCase):
def test_lambda_without_return_annotation(self):
func = lambda a, b, c: 1
func.__annotations__ = {"a": int, "b": int, "c": int}
- with captured_output('stdout') as help_io:
+ with captured_stdout() as help_io:
pydoc.help(func)
helptext = help_io.getvalue()
self.assertIn("lambda (a: int, b: int, c: int)", helptext)
@@ -801,7 +837,7 @@ class PydocDocTest(unittest.TestCase):
def test_lambda_with_return_and_params_annotation(self):
func = lambda a, b, c: 1
func.__annotations__ = {"a": int, "b": int, "c": int, "return": int}
- with captured_output('stdout') as help_io:
+ with captured_stdout() as help_io:
pydoc.help(func)
helptext = help_io.getvalue()
self.assertIn("lambda (a: int, b: int, c: int) -> int", helptext)