From b344dd06c85e5961d5ce99fe9bfd1de10ae66440 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Araujo?= Date: Wed, 2 Feb 2011 21:38:37 +0000 Subject: [PATCH] Merged revisions 86236,86240,86332,86340,87271,87273,87447 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The missing NEWS entries correspond to changes that were made before 3.1.3, but I think it’s not usual to edit entries of released versions, so I put them at the top. ........ r86236 | eric.araujo | 2010-11-06 03:44:43 +0100 (sam., 06 nov. 2010) | 2 lines Make sure each test can be run standalone (./python Lib/distutils/tests/x.py) ........ r86240 | eric.araujo | 2010-11-06 05:11:59 +0100 (sam., 06 nov. 2010) | 2 lines Prevent ResourceWarnings in test_gettext ........ r86332 | eric.araujo | 2010-11-08 19:15:17 +0100 (lun., 08 nov. 2010) | 4 lines Add missing NEWS entry for a fix committed by Senthil. All recent modifications to distutils should now be covered in NEWS. ........ r86340 | eric.araujo | 2010-11-08 22:48:23 +0100 (lun., 08 nov. 2010) | 2 lines This was actually fixed for the previous alpha. ........ r87271 | eric.araujo | 2010-12-15 20:09:58 +0100 (mer., 15 déc. 2010) | 2 lines Improve trace documentation (#9264). Patch by Eli Bendersky. ........ r87273 | eric.araujo | 2010-12-15 20:30:15 +0100 (mer., 15 déc. 2010) | 2 lines Use nested method directives, rewrap long lines, fix whitespace. ........ r87447 | eric.araujo | 2010-12-23 20:13:05 +0100 (jeu., 23 déc. 2010) | 2 lines Fix typo in superclass method name ........ --- Doc/library/trace.rst | 191 +++++++++++++------ Lib/distutils/tests/__init__.py | 5 +- Lib/distutils/tests/test_archive_util.py | 4 +- Lib/distutils/tests/test_bdist.py | 3 +- Lib/distutils/tests/test_bdist_dumb.py | 3 +- Lib/distutils/tests/test_bdist_rpm.py | 3 +- Lib/distutils/tests/test_bdist_wininst.py | 3 +- Lib/distutils/tests/test_build_clib.py | 4 +- Lib/distutils/tests/test_build_ext.py | 1 + Lib/distutils/tests/test_build_py.py | 3 +- Lib/distutils/tests/test_build_scripts.py | 3 +- Lib/distutils/tests/test_check.py | 3 +- Lib/distutils/tests/test_clean.py | 3 +- Lib/distutils/tests/test_cmd.py | 6 +- Lib/distutils/tests/test_config.py | 3 +- Lib/distutils/tests/test_config_cmd.py | 3 +- Lib/distutils/tests/test_core.py | 4 +- Lib/distutils/tests/test_cygwinccompiler.py | 3 +- Lib/distutils/tests/test_dir_util.py | 3 +- Lib/distutils/tests/test_dist.py | 4 +- Lib/distutils/tests/test_extension.py | 4 +- Lib/distutils/tests/test_file_util.py | 3 +- Lib/distutils/tests/test_filelist.py | 4 +- Lib/distutils/tests/test_install.py | 4 +- Lib/distutils/tests/test_install_data.py | 3 +- Lib/distutils/tests/test_install_headers.py | 3 +- Lib/distutils/tests/test_install_lib.py | 3 +- Lib/distutils/tests/test_install_scripts.py | 3 +- Lib/distutils/tests/test_log.py | 3 +- Lib/distutils/tests/test_msvc9compiler.py | 3 +- Lib/distutils/tests/test_register.py | 4 +- Lib/distutils/tests/test_sdist.py | 8 +- Lib/distutils/tests/test_spawn.py | 4 +- Lib/distutils/tests/test_text_file.py | 3 +- Lib/distutils/tests/test_unixccompiler.py | 3 +- Lib/distutils/tests/test_upload.py | 5 +- Lib/distutils/tests/test_util.py | 3 +- Lib/distutils/tests/test_version.py | 3 +- Lib/distutils/tests/test_versionpredicate.py | 4 + Lib/test/test_gettext.py | 35 ++-- Lib/test/test_tuple.py | 2 +- Misc/NEWS | 4 + 42 files changed, 231 insertions(+), 135 deletions(-) diff --git a/Doc/library/trace.rst b/Doc/library/trace.rst index f90f44b33e8..7b49c8fd49a 100644 --- a/Doc/library/trace.rst +++ b/Doc/library/trace.rst @@ -13,103 +13,178 @@ or from the command line. .. _trace-cli: -Command Line Usage +Command-Line Usage ------------------ The :mod:`trace` module can be invoked from the command line. It can be as simple as :: - python -m trace --count somefile.py ... + python -m trace --count -C . somefile.py ... -The above will generate annotated listings of all Python modules imported during -the execution of :file:`somefile.py`. +The above will execute :file:`somefile.py` and generate annotated listings of +all Python modules imported during the execution into the current directory. -The following command-line arguments are supported: +.. program:: trace + +.. cmdoption:: --help + + Display usage and exit. + +.. cmdoption:: --version + + Display the version of the module and exit. + +Main options +^^^^^^^^^^^^ + +At least one of the following options must be specified when invoking +:mod:`trace`. The :option:`--listfuncs <-l>` option is mutually exclusive with +the :option:`--trace <-t>` and :option:`--counts <-c>` options . When +:option:`--listfuncs <-l>` is provided, neither :option:`--counts <-c>` nor +:option:`--trace <-t>` are accepted, and vice versa. + +.. program:: trace + +.. cmdoption:: -c, --count + + Produce a set of annotated listing files upon program completion that shows + how many times each statement was executed. See also + :option:`--coverdir <-C>`, :option:`--file <-f>` and + :option:`--no-report <-R>` below. + +.. cmdoption:: -t, --trace -:option:`--trace`, :option:`-t` Display lines as they are executed. -:option:`--count`, :option:`-c` - Produce a set of annotated listing files upon program completion that shows how - many times each statement was executed. +.. cmdoption:: -l, --listfuncs + + Display the functions executed by running the program. + +.. cmdoption:: -r, --report -:option:`--report`, :option:`-r` Produce an annotated list from an earlier program run that used the - :option:`--count` and :option:`--file` arguments. + :option:`--count <-c>` and :option:`--file <-f>` option. This does not + execute any code. -:option:`--no-report`, :option:`-R` - Do not generate annotated listings. This is useful if you intend to make - several runs with :option:`--count` then produce a single set of annotated - listings at the end. +.. cmdoption:: -T, --trackcalls -:option:`--listfuncs`, :option:`-l` - List the functions executed by running the program. + Display the calling relationships exposed by running the program. -:option:`--trackcalls`, :option:`-T` - Generate calling relationships exposed by running the program. +Modifiers +^^^^^^^^^ -:option:`--file`, :option:`-f` - Name a file containing (or to contain) counts. +.. program:: trace -:option:`--coverdir`, :option:`-C` - Name a directory in which to save annotated listing files. +.. cmdoption:: -f, --file= + + Name of a file to accumulate counts over several tracing runs. Should be + used with the :option:`--count <-c>` option. + +.. cmdoption:: -C, --coverdir= + + Directory where the report files go. The coverage report for + ``package.module`` is written to file :file:`{dir}/{package}/{module}.cover`. + +.. cmdoption:: -m, --missing -:option:`--missing`, :option:`-m` When generating annotated listings, mark lines which were not executed with - '``>>>>>>``'. + ``>>>>>>``. -:option:`--summary`, :option:`-s` - When using :option:`--count` or :option:`--report`, write a brief summary to - stdout for each file processed. +.. cmdoption:: -s, --summary -:option:`--ignore-module` - Accepts comma separated list of module names. Ignore each of the named - module and its submodules (if it is a package). May be given - multiple times. + When using :option:`--count <-c>` or :option:`--report <-r>`, write a brief + summary to stdout for each file processed. -:option:`--ignore-dir` - Ignore all modules and packages in the named directory and subdirectories - (multiple directories can be joined by os.pathsep). May be given multiple - times. +.. cmdoption:: -R, --no-report + Do not generate annotated listings. This is useful if you intend to make + several runs with :option:`--count <-c>`, and then produce a single set of + annotated listings at the end. + +.. cmdoption:: -g, --timing + + Prefix each line with the time since the program started. Only used while + tracing. + +Filters +^^^^^^^ + +These options may be repeated multiple times. + +.. program:: trace + +.. cmdoption:: --ignore-module= + + Ignore each of the given module names and its submodules (if it is a + package). The argument can be a list of names separated by a comma. + +.. cmdoption:: --ignore-dir= + + Ignore all modules and packages in the named directory and subdirectories. + The argument can be a list of directories separated by :data:`os.pathsep`. .. _trace-api: -Programming Interface ---------------------- +Programmatic Interface +---------------------- +.. class:: Trace(count=1, trace=1, countfuncs=0, countcallers=0, ignoremods=(),\ + ignoredirs=(), infile=None, outfile=None, timing=False) -.. class:: Trace(count=1, trace=1, countfuncs=0, countcallers=0, ignoremods=(), ignoredirs=(), infile=None, outfile=None, timing=False) + Create an object to trace execution of a single statement or expression. All + parameters are optional. *count* enables counting of line numbers. *trace* + enables line execution tracing. *countfuncs* enables listing of the + functions called during the run. *countcallers* enables call relationship + tracking. *ignoremods* is a list of modules or packages to ignore. + *ignoredirs* is a list of directories whose modules or packages should be + ignored. *infile* is the name of the file from which to read stored count + information. *outfile* is the name of the file in which to write updated + count information. *timing* enables a timestamp relative to when tracing was + started to be displayed. - Create an object to trace execution of a single statement or expression. All - parameters are optional. *count* enables counting of line numbers. *trace* - enables line execution tracing. *countfuncs* enables listing of the functions - called during the run. *countcallers* enables call relationship tracking. - *ignoremods* is a list of modules or packages to ignore. *ignoredirs* is a list - of directories whose modules or packages should be ignored. *infile* is the - file from which to read stored count information. *outfile* is a file in which - to write updated count information. *timing* enables a timestamp relative - to when tracing was started to be displayed. + .. method:: run(cmd) + Execute the command and gather statistics from the execution with + the current tracing parameters. *cmd* must be a string or code object, + suitable for passing into :func:`exec`. -.. method:: Trace.run(cmd) + .. method:: runctx(cmd, globals=None, locals=None) - Run *cmd* under control of the Trace object with the current tracing parameters. + Execute the command and gather statistics from the execution with the + current tracing parameters, in the defined global and local + environments. If not defined, *globals* and *locals* default to empty + dictionaries. + .. method:: runfunc(func, *args, **kwds) -.. method:: Trace.runctx(cmd, globals=None, locals=None) + Call *func* with the given arguments under control of the :class:`Trace` + object with the current tracing parameters. - Run *cmd* under control of the Trace object with the current tracing parameters - in the defined global and local environments. If not defined, *globals* and - *locals* default to empty dictionaries. + .. method:: results() + Return a :class:`CoverageResults` object that contains the cumulative + results of all previous calls to ``run``, ``runctx`` and ``runfunc`` + for the given :class:`Trace` instance. Does not reset the accumulated + trace results. -.. method:: Trace.runfunc(func, *args, **kwds) +.. class:: CoverageResults - Call *func* with the given arguments under control of the :class:`Trace` object - with the current tracing parameters. + A container for coverage results, created by :meth:`Trace.results`. Should + not be created directly by the user. -This is a simple example showing the use of this module:: + .. method:: update(other) + + Merge in data from another :class:`CoverageResults` object. + + .. method:: write_results(show_missing=True, summary=False, coverdir=None) + + Write coverage results. Set *show_missing* to show lines that had no + hits. Set *summary* to include in the output the coverage summary per + module. *coverdir* specifies the directory into which the coverage + result files will be output. If ``None``, the results for each source + file are placed in its directory. + +A simple example demonstrating the use of the programmatic interface:: import sys import trace diff --git a/Lib/distutils/tests/__init__.py b/Lib/distutils/tests/__init__.py index 7bdb912463c..1b939cbd5db 100644 --- a/Lib/distutils/tests/__init__.py +++ b/Lib/distutils/tests/__init__.py @@ -15,9 +15,10 @@ by import rather than matching pre-defined names. import os import sys import unittest +from test.support import run_unittest -here = os.path.dirname(__file__) +here = os.path.dirname(__file__) or os.curdir def test_suite(): @@ -32,4 +33,4 @@ def test_suite(): if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_archive_util.py b/Lib/distutils/tests/test_archive_util.py index d77302d5470..aff426521d9 100644 --- a/Lib/distutils/tests/test_archive_util.py +++ b/Lib/distutils/tests/test_archive_util.py @@ -12,7 +12,7 @@ from distutils.archive_util import (check_archive_formats, make_tarball, ARCHIVE_FORMATS) from distutils.spawn import find_executable, spawn from distutils.tests import support -from test.support import check_warnings +from test.support import check_warnings, run_unittest try: import zipfile @@ -211,4 +211,4 @@ def test_suite(): return unittest.makeSuite(ArchiveUtilTestCase) if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_bdist.py b/Lib/distutils/tests/test_bdist.py index 715283cb970..94d40cc25b3 100644 --- a/Lib/distutils/tests/test_bdist.py +++ b/Lib/distutils/tests/test_bdist.py @@ -4,6 +4,7 @@ import sys import os import tempfile import shutil +from test.support import run_unittest from distutils.core import Distribution from distutils.command.bdist import bdist @@ -40,4 +41,4 @@ def test_suite(): return unittest.makeSuite(BuildTestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_bdist_dumb.py b/Lib/distutils/tests/test_bdist_dumb.py index bf146eb5730..cc37fef8b01 100644 --- a/Lib/distutils/tests/test_bdist_dumb.py +++ b/Lib/distutils/tests/test_bdist_dumb.py @@ -3,6 +3,7 @@ import unittest import sys import os +from test.support import run_unittest from distutils.core import Distribution from distutils.command.bdist_dumb import bdist_dumb @@ -77,4 +78,4 @@ def test_suite(): return unittest.makeSuite(BuildDumbTestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_bdist_rpm.py b/Lib/distutils/tests/test_bdist_rpm.py index 2aa257f7e63..804fb1355f2 100644 --- a/Lib/distutils/tests/test_bdist_rpm.py +++ b/Lib/distutils/tests/test_bdist_rpm.py @@ -5,6 +5,7 @@ import sys import os import tempfile import shutil +from test.support import run_unittest from distutils.core import Distribution from distutils.command.bdist_rpm import bdist_rpm @@ -122,4 +123,4 @@ def test_suite(): return unittest.makeSuite(BuildRpmTestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_bdist_wininst.py b/Lib/distutils/tests/test_bdist_wininst.py index 9b1ba6d1074..f9e8f89e21d 100644 --- a/Lib/distutils/tests/test_bdist_wininst.py +++ b/Lib/distutils/tests/test_bdist_wininst.py @@ -1,5 +1,6 @@ """Tests for distutils.command.bdist_wininst.""" import unittest +from test.support import run_unittest from distutils.command.bdist_wininst import bdist_wininst from distutils.tests import support @@ -27,4 +28,4 @@ def test_suite(): return unittest.makeSuite(BuildWinInstTestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_build_clib.py b/Lib/distutils/tests/test_build_clib.py index d6d1a4d0c10..69bd2bf6241 100644 --- a/Lib/distutils/tests/test_build_clib.py +++ b/Lib/distutils/tests/test_build_clib.py @@ -3,6 +3,8 @@ import unittest import os import sys +from test.support import run_unittest + from distutils.command.build_clib import build_clib from distutils.errors import DistutilsSetupError from distutils.tests import support @@ -141,4 +143,4 @@ def test_suite(): return unittest.makeSuite(BuildCLibTestCase) if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_build_ext.py b/Lib/distutils/tests/test_build_ext.py index e8b15f156d0..11844d66d35 100644 --- a/Lib/distutils/tests/test_build_ext.py +++ b/Lib/distutils/tests/test_build_ext.py @@ -15,6 +15,7 @@ from distutils.errors import (UnknownFileError, DistutilsSetupError, import unittest from test import support +from test.support import run_unittest # http://bugs.python.org/issue4373 # Don't load the xx module more than once. diff --git a/Lib/distutils/tests/test_build_py.py b/Lib/distutils/tests/test_build_py.py index 8a69aaa0d6b..da3232cea8f 100644 --- a/Lib/distutils/tests/test_build_py.py +++ b/Lib/distutils/tests/test_build_py.py @@ -10,6 +10,7 @@ from distutils.core import Distribution from distutils.errors import DistutilsFileError from distutils.tests import support +from test.support import run_unittest class BuildPyTestCase(support.TempdirManager, @@ -114,4 +115,4 @@ def test_suite(): return unittest.makeSuite(BuildPyTestCase) if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_build_scripts.py b/Lib/distutils/tests/test_build_scripts.py index 85b04004602..e3326b85176 100644 --- a/Lib/distutils/tests/test_build_scripts.py +++ b/Lib/distutils/tests/test_build_scripts.py @@ -8,6 +8,7 @@ from distutils.core import Distribution from distutils import sysconfig from distutils.tests import support +from test.support import run_unittest class BuildScriptsTestCase(support.TempdirManager, @@ -108,4 +109,4 @@ def test_suite(): return unittest.makeSuite(BuildScriptsTestCase) if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_check.py b/Lib/distutils/tests/test_check.py index 7c56c043399..229ae25c6da 100644 --- a/Lib/distutils/tests/test_check.py +++ b/Lib/distutils/tests/test_check.py @@ -1,5 +1,6 @@ """Tests for distutils.command.check.""" import unittest +from test.support import run_unittest from distutils.command.check import check, HAS_DOCUTILS from distutils.tests import support @@ -95,4 +96,4 @@ def test_suite(): return unittest.makeSuite(CheckTestCase) if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_clean.py b/Lib/distutils/tests/test_clean.py index dbc4ee2a186..649855f7ab4 100755 --- a/Lib/distutils/tests/test_clean.py +++ b/Lib/distutils/tests/test_clean.py @@ -6,6 +6,7 @@ import getpass from distutils.command.clean import clean from distutils.tests import support +from test.support import run_unittest class cleanTestCase(support.TempdirManager, support.LoggingSilencer, @@ -47,4 +48,4 @@ def test_suite(): return unittest.makeSuite(cleanTestCase) if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_cmd.py b/Lib/distutils/tests/test_cmd.py index 5821fcd286c..195045cc7b8 100644 --- a/Lib/distutils/tests/test_cmd.py +++ b/Lib/distutils/tests/test_cmd.py @@ -1,7 +1,7 @@ """Tests for distutils.cmd.""" import unittest import os -from test.support import captured_stdout +from test.support import captured_stdout, run_unittest from distutils.cmd import Command from distutils.dist import Distribution @@ -99,7 +99,7 @@ class CommandTestCase(unittest.TestCase): def test_ensure_dirname(self): cmd = self.cmd - cmd.option1 = os.path.dirname(__file__) + cmd.option1 = os.path.dirname(__file__) or os.curdir cmd.ensure_dirname('option1') cmd.option2 = 'xxx' self.assertRaises(DistutilsOptionError, cmd.ensure_dirname, 'option2') @@ -124,4 +124,4 @@ def test_suite(): return unittest.makeSuite(CommandTestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_config.py b/Lib/distutils/tests/test_config.py index 2c075d7ee79..525bee9416a 100644 --- a/Lib/distutils/tests/test_config.py +++ b/Lib/distutils/tests/test_config.py @@ -10,6 +10,7 @@ from distutils.log import set_threshold from distutils.log import WARN from distutils.tests import support +from test.support import run_unittest PYPIRC = """\ [distutils] @@ -116,4 +117,4 @@ def test_suite(): return unittest.makeSuite(PyPIRCCommandTestCase) if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_config_cmd.py b/Lib/distutils/tests/test_config_cmd.py index fcb798e73ba..4f7ebdd9fc1 100644 --- a/Lib/distutils/tests/test_config_cmd.py +++ b/Lib/distutils/tests/test_config_cmd.py @@ -2,6 +2,7 @@ import unittest import os import sys +from test.support import run_unittest from distutils.command.config import dump_file, config from distutils.tests import support @@ -86,4 +87,4 @@ def test_suite(): return unittest.makeSuite(ConfigTestCase) if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_core.py b/Lib/distutils/tests/test_core.py index d781555da57..41321f7db4e 100644 --- a/Lib/distutils/tests/test_core.py +++ b/Lib/distutils/tests/test_core.py @@ -6,7 +6,7 @@ import os import shutil import sys import test.support -from test.support import captured_stdout +from test.support import captured_stdout, run_unittest import unittest from distutils.tests import support @@ -105,4 +105,4 @@ def test_suite(): return unittest.makeSuite(CoreTestCase) if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_cygwinccompiler.py b/Lib/distutils/tests/test_cygwinccompiler.py index 79377a7763e..856921679d6 100644 --- a/Lib/distutils/tests/test_cygwinccompiler.py +++ b/Lib/distutils/tests/test_cygwinccompiler.py @@ -4,6 +4,7 @@ import sys import os from io import BytesIO import subprocess +from test.support import run_unittest from distutils import cygwinccompiler from distutils.cygwinccompiler import (CygwinCCompiler, check_config_h, @@ -151,4 +152,4 @@ def test_suite(): return unittest.makeSuite(CygwinCCompilerTestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_dir_util.py b/Lib/distutils/tests/test_dir_util.py index 84a0ec6cfcb..ce74589dde5 100644 --- a/Lib/distutils/tests/test_dir_util.py +++ b/Lib/distutils/tests/test_dir_util.py @@ -10,6 +10,7 @@ from distutils.dir_util import (mkpath, remove_tree, create_tree, copy_tree, from distutils import log from distutils.tests import support +from test.support import run_unittest class DirUtilTestCase(support.TempdirManager, unittest.TestCase): @@ -112,4 +113,4 @@ def test_suite(): return unittest.makeSuite(DirUtilTestCase) if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_dist.py b/Lib/distutils/tests/test_dist.py index 2c19d892668..1624f00e53f 100644 --- a/Lib/distutils/tests/test_dist.py +++ b/Lib/distutils/tests/test_dist.py @@ -10,7 +10,7 @@ import textwrap from distutils.dist import Distribution, fix_help_options from distutils.cmd import Command -from test.support import TESTFN, captured_stdout +from test.support import TESTFN, captured_stdout, run_unittest from distutils.tests import support @@ -326,4 +326,4 @@ def test_suite(): return suite if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_extension.py b/Lib/distutils/tests/test_extension.py index d9a47a89c86..e35f2738b6a 100755 --- a/Lib/distutils/tests/test_extension.py +++ b/Lib/distutils/tests/test_extension.py @@ -3,7 +3,7 @@ import unittest import os import warnings -from test.support import check_warnings +from test.support import check_warnings, run_unittest from distutils.extension import read_setup_file, Extension class ExtensionTestCase(unittest.TestCase): @@ -66,4 +66,4 @@ def test_suite(): return unittest.makeSuite(ExtensionTestCase) if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_file_util.py b/Lib/distutils/tests/test_file_util.py index 730ffde4ffd..3c3e3dcb3bf 100644 --- a/Lib/distutils/tests/test_file_util.py +++ b/Lib/distutils/tests/test_file_util.py @@ -6,6 +6,7 @@ import shutil from distutils.file_util import move_file from distutils import log from distutils.tests import support +from test.support import run_unittest class FileUtilTestCase(support.TempdirManager, unittest.TestCase): @@ -62,4 +63,4 @@ def test_suite(): return unittest.makeSuite(FileUtilTestCase) if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_filelist.py b/Lib/distutils/tests/test_filelist.py index d2a2b449eeb..c7e5201b172 100644 --- a/Lib/distutils/tests/test_filelist.py +++ b/Lib/distutils/tests/test_filelist.py @@ -2,7 +2,7 @@ import unittest from distutils.filelist import glob_to_re, FileList -from test.support import captured_stdout +from test.support import captured_stdout, run_unittest from distutils import debug class FileListTestCase(unittest.TestCase): @@ -39,4 +39,4 @@ def test_suite(): return unittest.makeSuite(FileListTestCase) if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_install.py b/Lib/distutils/tests/test_install.py index f9c142e446c..a76e3e7a3cb 100644 --- a/Lib/distutils/tests/test_install.py +++ b/Lib/distutils/tests/test_install.py @@ -6,7 +6,7 @@ import sys import unittest import site -from test.support import captured_stdout +from test.support import captured_stdout, run_unittest from distutils.command.install import install from distutils.command import install as install_module @@ -203,4 +203,4 @@ def test_suite(): return unittest.makeSuite(InstallTestCase) if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_install_data.py b/Lib/distutils/tests/test_install_data.py index 86db4a12c57..4d8c00acb99 100644 --- a/Lib/distutils/tests/test_install_data.py +++ b/Lib/distutils/tests/test_install_data.py @@ -6,6 +6,7 @@ import getpass from distutils.command.install_data import install_data from distutils.tests import support +from test.support import run_unittest class InstallDataTestCase(support.TempdirManager, support.LoggingSilencer, @@ -73,4 +74,4 @@ def test_suite(): return unittest.makeSuite(InstallDataTestCase) if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_install_headers.py b/Lib/distutils/tests/test_install_headers.py index aa8a4e6014f..d953157bb7e 100644 --- a/Lib/distutils/tests/test_install_headers.py +++ b/Lib/distutils/tests/test_install_headers.py @@ -6,6 +6,7 @@ import getpass from distutils.command.install_headers import install_headers from distutils.tests import support +from test.support import run_unittest class InstallHeadersTestCase(support.TempdirManager, support.LoggingSilencer, @@ -37,4 +38,4 @@ def test_suite(): return unittest.makeSuite(InstallHeadersTestCase) if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_install_lib.py b/Lib/distutils/tests/test_install_lib.py index 46363046920..fddaabe111d 100644 --- a/Lib/distutils/tests/test_install_lib.py +++ b/Lib/distutils/tests/test_install_lib.py @@ -7,6 +7,7 @@ from distutils.command.install_lib import install_lib from distutils.extension import Extension from distutils.tests import support from distutils.errors import DistutilsOptionError +from test.support import run_unittest class InstallLibTestCase(support.TempdirManager, support.LoggingSilencer, @@ -98,4 +99,4 @@ def test_suite(): return unittest.makeSuite(InstallLibTestCase) if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_install_scripts.py b/Lib/distutils/tests/test_install_scripts.py index 08360d297b8..8952e744e5d 100644 --- a/Lib/distutils/tests/test_install_scripts.py +++ b/Lib/distutils/tests/test_install_scripts.py @@ -7,6 +7,7 @@ from distutils.command.install_scripts import install_scripts from distutils.core import Distribution from distutils.tests import support +from test.support import run_unittest class InstallScriptsTestCase(support.TempdirManager, @@ -78,4 +79,4 @@ def test_suite(): return unittest.makeSuite(InstallScriptsTestCase) if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_log.py b/Lib/distutils/tests/test_log.py index 9d40dcd72c8..ce66ee51e7c 100644 --- a/Lib/distutils/tests/test_log.py +++ b/Lib/distutils/tests/test_log.py @@ -3,6 +3,7 @@ import sys import unittest from tempfile import NamedTemporaryFile +from test.support import run_unittest from distutils import log @@ -33,4 +34,4 @@ def test_suite(): return unittest.makeSuite(TestLog) if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_msvc9compiler.py b/Lib/distutils/tests/test_msvc9compiler.py index 570fda121ef..a0d62efcfde 100644 --- a/Lib/distutils/tests/test_msvc9compiler.py +++ b/Lib/distutils/tests/test_msvc9compiler.py @@ -5,6 +5,7 @@ import os from distutils.errors import DistutilsPlatformError from distutils.tests import support +from test.support import run_unittest _MANIFEST = """\ @@ -137,4 +138,4 @@ def test_suite(): return unittest.makeSuite(msvc9compilerTestCase) if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_register.py b/Lib/distutils/tests/test_register.py index c98e28a1a4f..c712f56a788 100644 --- a/Lib/distutils/tests/test_register.py +++ b/Lib/distutils/tests/test_register.py @@ -6,7 +6,7 @@ import getpass import urllib import warnings -from test.support import check_warnings +from test.support import check_warnings, run_unittest from distutils.command import register as register_module from distutils.command.register import register @@ -259,4 +259,4 @@ def test_suite(): return unittest.makeSuite(RegisterTestCase) if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_sdist.py b/Lib/distutils/tests/test_sdist.py index d734ea0ac52..655e50dcfc2 100644 --- a/Lib/distutils/tests/test_sdist.py +++ b/Lib/distutils/tests/test_sdist.py @@ -8,11 +8,9 @@ import sys import tempfile import warnings -from test.support import check_warnings -from test.support import captured_stdout +from test.support import captured_stdout, check_warnings, run_unittest -from distutils.command.sdist import sdist -from distutils.command.sdist import show_formats +from distutils.command.sdist import sdist, show_formats from distutils.core import Distribution from distutils.tests.test_config import PyPIRCCommandTestCase from distutils.errors import DistutilsExecError, DistutilsOptionError @@ -356,4 +354,4 @@ def test_suite(): return unittest.makeSuite(SDistTestCase) if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_spawn.py b/Lib/distutils/tests/test_spawn.py index 0616c9f2e33..6c7eb20c471 100644 --- a/Lib/distutils/tests/test_spawn.py +++ b/Lib/distutils/tests/test_spawn.py @@ -2,7 +2,7 @@ import unittest import os import time -from test.support import captured_stdout +from test.support import captured_stdout, run_unittest from distutils.spawn import _nt_quote_args from distutils.spawn import spawn, find_executable @@ -55,4 +55,4 @@ def test_suite(): return unittest.makeSuite(SpawnTestCase) if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_text_file.py b/Lib/distutils/tests/test_text_file.py index f1e32b6cc64..7e76240a9a3 100644 --- a/Lib/distutils/tests/test_text_file.py +++ b/Lib/distutils/tests/test_text_file.py @@ -3,6 +3,7 @@ import os import unittest from distutils.text_file import TextFile from distutils.tests import support +from test.support import run_unittest TEST_DATA = """# test file @@ -103,4 +104,4 @@ def test_suite(): return unittest.makeSuite(TextFileTestCase) if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_unixccompiler.py b/Lib/distutils/tests/test_unixccompiler.py index 3a41e6fcaaf..1bff38e9eef 100644 --- a/Lib/distutils/tests/test_unixccompiler.py +++ b/Lib/distutils/tests/test_unixccompiler.py @@ -1,6 +1,7 @@ """Tests for distutils.unixccompiler.""" import sys import unittest +from test.support import run_unittest from distutils import sysconfig from distutils.unixccompiler import UnixCCompiler @@ -118,4 +119,4 @@ def test_suite(): return unittest.makeSuite(UnixCCompilerTestCase) if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_upload.py b/Lib/distutils/tests/test_upload.py index 8891820d670..4c6464a32e8 100644 --- a/Lib/distutils/tests/test_upload.py +++ b/Lib/distutils/tests/test_upload.py @@ -1,13 +1,12 @@ """Tests for distutils.command.upload.""" -import sys import os import unittest import http.client as httpclient +from test.support import run_unittest from distutils.command.upload import upload from distutils.core import Distribution -from distutils.tests import support from distutils.tests.test_config import PYPIRC, PyPIRCCommandTestCase PYPIRC_LONG_PASSWORD = """\ @@ -136,4 +135,4 @@ def test_suite(): return unittest.makeSuite(uploadTestCase) if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_util.py b/Lib/distutils/tests/test_util.py index f40caac838a..8ff5ae20856 100644 --- a/Lib/distutils/tests/test_util.py +++ b/Lib/distutils/tests/test_util.py @@ -3,6 +3,7 @@ import os import sys import unittest from copy import copy +from test.support import run_unittest from distutils.errors import DistutilsPlatformError, DistutilsByteCompileError from distutils.util import (get_platform, convert_path, change_root, @@ -274,4 +275,4 @@ def test_suite(): return unittest.makeSuite(UtilTestCase) if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_version.py b/Lib/distutils/tests/test_version.py index 980f83f29a2..15f14c7de3f 100644 --- a/Lib/distutils/tests/test_version.py +++ b/Lib/distutils/tests/test_version.py @@ -2,6 +2,7 @@ import unittest from distutils.version import LooseVersion from distutils.version import StrictVersion +from test.support import run_unittest class VersionTestCase(unittest.TestCase): @@ -67,4 +68,4 @@ def test_suite(): return unittest.makeSuite(VersionTestCase) if __name__ == "__main__": - unittest.main(defaultTest="test_suite") + run_unittest(test_suite()) diff --git a/Lib/distutils/tests/test_versionpredicate.py b/Lib/distutils/tests/test_versionpredicate.py index 8a60dbe8060..28ae09dc205 100644 --- a/Lib/distutils/tests/test_versionpredicate.py +++ b/Lib/distutils/tests/test_versionpredicate.py @@ -4,6 +4,10 @@ import distutils.versionpredicate import doctest +from test.support import run_unittest def test_suite(): return doctest.DocTestSuite(distutils.versionpredicate) + +if __name__ == '__main__': + run_unittest(test_suite()) diff --git a/Lib/test/test_gettext.py b/Lib/test/test_gettext.py index 634c6071938..5456948ca4b 100644 --- a/Lib/test/test_gettext.py +++ b/Lib/test/test_gettext.py @@ -64,15 +64,12 @@ class GettextBaseTest(unittest.TestCase): def setUp(self): if not os.path.isdir(LOCALEDIR): os.makedirs(LOCALEDIR) - fp = open(MOFILE, 'wb') - fp.write(base64.decodebytes(GNU_MO_DATA)) - fp.close() - fp = open(UMOFILE, 'wb') - fp.write(base64.decodebytes(UMO_DATA)) - fp.close() - fp = open(MMOFILE, 'wb') - fp.write(base64.decodebytes(MMO_DATA)) - fp.close() + with open(MOFILE, 'wb') as fp: + fp.write(base64.decodebytes(GNU_MO_DATA)) + with open(UMOFILE, 'wb') as fp: + fp.write(base64.decodebytes(UMO_DATA)) + with open(MMOFILE, 'wb') as fp: + fp.write(base64.decodebytes(MMO_DATA)) self.env = support.EnvironmentVarGuard() self.env['LANGUAGE'] = 'xx' gettext._translations.clear() @@ -135,9 +132,8 @@ trggrkg zrffntr pngnybt yvoenel.''') def test_the_alternative_interface(self): eq = self.assertEqual # test the alternative interface - fp = open(self.mofile, 'rb') - t = gettext.GNUTranslations(fp) - fp.close() + with open(self.mofile, 'rb') as fp: + t = gettext.GNUTranslations(fp) # Install the translation object t.install() eq(_('nudge nudge'), 'wink wink') @@ -227,9 +223,8 @@ class PluralFormsTestCase(GettextBaseTest): def test_plural_forms2(self): eq = self.assertEqual - fp = open(self.mofile, 'rb') - t = gettext.GNUTranslations(fp) - fp.close() + with open(self.mofile, 'rb') as fp: + t = gettext.GNUTranslations(fp) x = t.ngettext('There is %s file', 'There are %s files', 1) eq(x, 'Hay %s fichero') x = t.ngettext('There is %s file', 'There are %s files', 2) @@ -299,11 +294,8 @@ class PluralFormsTestCase(GettextBaseTest): class UnicodeTranslationsTest(GettextBaseTest): def setUp(self): GettextBaseTest.setUp(self) - fp = open(UMOFILE, 'rb') - try: + with open(UMOFILE, 'rb') as fp: self.t = gettext.GNUTranslations(fp) - finally: - fp.close() self._ = self.t.gettext def test_unicode_msgid(self): @@ -319,15 +311,12 @@ class UnicodeTranslationsTest(GettextBaseTest): class WeirdMetadataTest(GettextBaseTest): def setUp(self): GettextBaseTest.setUp(self) - fp = open(MMOFILE, 'rb') - try: + with open(MMOFILE, 'rb') as fp: try: self.t = gettext.GNUTranslations(fp) except: self.tearDown() raise - finally: - fp.close() def test_weird_metadata(self): info = self.t.info() diff --git a/Lib/test/test_tuple.py b/Lib/test/test_tuple.py index 53065bb2046..f5837479ea1 100644 --- a/Lib/test/test_tuple.py +++ b/Lib/test/test_tuple.py @@ -6,7 +6,7 @@ class TupleTest(seq_tests.CommonTest): type2test = tuple def test_constructors(self): - super().test_len() + super().test_constructors() # calling built-in types without argument must return empty self.assertEqual(tuple(), ()) t0_3 = (0, 1, 2, 3) diff --git a/Misc/NEWS b/Misc/NEWS index ba75e82d7a6..88c6749835f 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -37,6 +37,10 @@ Core and Builtins Library ------- +- Issue #2236: distutils' mkpath ignored the mode parameter. + +- Fix typo in one sdist option (medata-check). + - Issue #11089: Fix performance issue limiting the use of ConfigParser() with large config files.