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