# the current directory is changed with os.chdir(), an incorrect
# path will be displayed.
-import os
-import sys
import builtins
import imp
-import io
import inspect
+import io
+import os
import pkgutil
import platform
import re
+import sys
import time
+import tokenize
import warnings
from collections import deque
from reprlib import Repr
if lastupdate < mtime:
info = inspect.getmoduleinfo(filename)
try:
- file = open(filename)
+ file = tokenize.open(filename)
except IOError:
# module can't be opened, so skip it
return None
from collections import namedtuple
from contextlib import contextmanager
from test.support import TESTFN, forget, rmtree, EnvironmentVarGuard, \
- reap_children, captured_output, captured_stdout
+ reap_children, captured_output, captured_stdout, unlink
from test import pydoc_mod
self.assertIn('_replace', helptext)
self.assertIn('_asdict', helptext)
+ def test_synopsis(self):
+ self.addCleanup(unlink, TESTFN)
+ for encoding in ('ISO-8859-1', 'UTF-8'):
+ with open(TESTFN, 'w', encoding=encoding) as script:
+ if encoding != 'UTF-8':
+ print('#coding: {}'.format(encoding), file=script)
+ print('"""line 1: h\xe9', file=script)
+ print('line 2: hi"""', file=script)
+ synopsis = pydoc.synopsis(TESTFN, {})
+ self.assertEqual(synopsis, 'line 1: h\xe9')
+
class TestDescriptions(unittest.TestCase):
Library
-------
+- Issue #12451: pydoc.synopsis() now reads the encoding cookie if available,
+ to read the Python script from the right encoding.
+
- Issue #12451: distutils now opens the setup script in binary mode to read the
encoding cookie, instead of opening it in UTF-8.