pydoc.Helper.help() ignores input/output init parameters (issue 940286) - Code Review (original) (raw)
OLD
NEW
1 import sys
1 import sys
2 import os
2 import os
3 import os.path
3 import os.path
4 import difflib
4 import difflib
5 import subprocess
5 import subprocess
6 import re
6 import re
7 import pydoc
7 import pydoc
8 import inspect
8 import inspect
9 import unittest
9 import unittest
10 import test.support
10 import test.support
11 import xml.etree
11 import xml.etree
12 import textwrap
13 from io import StringIO
12 from contextlib import contextmanager
14 from contextlib import contextmanager
13 from test.support import (
15 from test.support import (
14 TESTFN, forget, rmtree, EnvironmentVarGuard, reap_children)
16 TESTFN, forget, rmtree, EnvironmentVarGuard, reap_children, captured_output)
15
17
16 from test import pydoc_mod
18 from test import pydoc_mod
17
19
18 # Just in case sys.modules["test"] has the optional attribute __loader__.
20 # Just in case sys.modules["test"] has the optional attribute __loader__.
19 if hasattr(pydoc_mod, "__loader__"):
21 if hasattr(pydoc_mod, "__loader__"):
20 del pydoc_mod.__loader__
22 del pydoc_mod.__loader__
21
23
22 expected_text_pattern = """
24 expected_text_pattern = """
23 NAME
25 NAME
24 test.pydoc_mod - This is a test module for test_pydoc
26 test.pydoc_mod - This is a test module for test_pydoc
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading...
320 # strip the id
322 # strip the id
321 self.assertEqual(stripid('<function stripid at 0x88dcee4>'),
323 self.assertEqual(stripid('<function stripid at 0x88dcee4>'),
322 '')
324 '')
323 self.assertEqual(stripid('<function stripid at 0x01F65390>'),
325 self.assertEqual(stripid('<function stripid at 0x01F65390>'),
324 '')
326 '')
325 # nothing to strip, return the same text
327 # nothing to strip, return the same text
326 self.assertEqual(stripid('42'), '42')
328 self.assertEqual(stripid('42'), '42')
327 self.assertEqual(stripid("<type 'exceptions.Exception'>"),
329 self.assertEqual(stripid("<type 'exceptions.Exception'>"),
328 "<type 'exceptions.Exception'>")
330 "<type 'exceptions.Exception'>")
329
331
332 @unittest.skipIf(sys.flags.optimize >= 2,
333 "Docstrings are omitted with -O2 and above")
334 def test_help_output_redirect(self):
335 # issue 940286, if output is set in Helper, then output from
336 # Helper.help should be redirected
337 old_pattern = expected_text_pattern
338 getpager_old = pydoc.getpager
339 getpager_new = lambda: (lambda x: x)
340 pydoc.getpager = getpager_new
341 self.maxDiff = None
342
343 buf = StringIO()
344 helper = pydoc.Helper(output=buf)
345 unused, doc_loc = get_pydoc_text(pydoc_mod)
346 module = "test.pydoc_mod"
347 help_header = """
348 Help on module test.pydoc_mod in test:
349
350 """.lstrip()
351 help_header = textwrap.dedent(help_header)
352 expected_help_pattern = help_header + expected_text_pattern
353
354 try:
355 with captured_output('stdout') as output, \
356 captured_output('stderr') as err:
357 helper.help(module)
358 result = buf.getvalue().strip()
359 expected_text = expected_help_pattern % \
360 (doc_loc, inspect.getabsfile(pydoc_mod))
361 self.assertEqual('', output.getvalue())
362 self.assertEqual('', err.getvalue())
363 self.assertEqual(expected_text, result)
364 finally:
365 pydoc.getpager = getpager_old
330
366
331 class TestDescriptions(unittest.TestCase):
367 class TestDescriptions(unittest.TestCase):
332
368
333 def test_module(self):
369 def test_module(self):
334 # Check that pydocfodder module can be described
370 # Check that pydocfodder module can be described
335 from test import pydocfodder
371 from test import pydocfodder
336 doc = pydoc.render_doc(pydocfodder)
372 doc = pydoc.render_doc(pydocfodder)
337 self.assertIn("pydocfodder", doc)
373 self.assertIn("pydocfodder", doc)
338
374
339 def test_classic_class(self):
375 def test_classic_class(self):
(...skipping 12 matching lines...) Expand all Loading...
352 self.assertEqual(pydoc.describe(c), 'C')
388 self.assertEqual(pydoc.describe(c), 'C')
353 expected = 'C in module %s object' % __name__
389 expected = 'C in module %s object' % __name__
354 self.assertIn(expected, pydoc.render_doc(c))
390 self.assertIn(expected, pydoc.render_doc(c))
355
391
356
392
357 def test_main():
393 def test_main():
358 test.support.run_unittest(PyDocDocTest, TestDescriptions)
394 test.support.run_unittest(PyDocDocTest, TestDescriptions)
359
395
360 if __name__ == "__main__":
396 if __name__ == "__main__":
361 test_main()
397 test_main()
OLD
NEW