Merged revisions 74988 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r74988 | tarek.ziade | 2009-09-21 14:19:07 +0200 (Mon, 21 Sep 2009) | 1 line

  improved distutils test coverage: now the DEBUG mode is covered too (will help fix the issue #6954 in py3k branch)
........
This commit is contained in:
Tarek Ziadé 2009-09-21 13:01:54 +00:00
parent eb097fca52
commit 03d5d08798
7 changed files with 97 additions and 6 deletions

View File

@ -157,7 +157,7 @@ class Command:
self.announce(indent + header, level=log.INFO) self.announce(indent + header, level=log.INFO)
indent = indent + " " indent = indent + " "
for (option, _, _) in self.user_options: for (option, _, _) in self.user_options:
option = longopt_xlate(option) option = option.translate(longopt_xlate)
if option[-1] == "=": if option[-1] == "=":
option = option[:-1] option = option[:-1]
value = getattr(self, option) value = getattr(self, option)

View File

@ -26,7 +26,7 @@ neg_alias_re = re.compile("^(%s)=!(%s)$" % (longopt_pat, longopt_pat))
# This is used to translate long options to legitimate Python identifiers # This is used to translate long options to legitimate Python identifiers
# (for use as attributes of some object). # (for use as attributes of some object).
longopt_xlate = lambda s: s.replace('-', '_') longopt_xlate = str.maketrans('-', '_')
class FancyGetopt: class FancyGetopt:
"""Wrapper around the standard 'getopt()' module that provides some """Wrapper around the standard 'getopt()' module that provides some
@ -107,7 +107,7 @@ class FancyGetopt:
"""Translate long option name 'long_option' to the form it """Translate long option name 'long_option' to the form it
has as an attribute of some object: ie., translate hyphens has as an attribute of some object: ie., translate hyphens
to underscores.""" to underscores."""
return longopt_xlate(long_option) return long_option.translate(longopt_xlate)
def _check_alias_dict(self, aliases, what): def _check_alias_dict(self, aliases, what):
assert isinstance(aliases, dict) assert isinstance(aliases, dict)
@ -432,7 +432,7 @@ def translate_longopt(opt):
"""Convert a long option name to a valid Python identifier by """Convert a long option name to a valid Python identifier by
changing "-" to "_". changing "-" to "_".
""" """
return longopt_xlate(opt) return opt.translate(longopt_xlate)
class OptionDummy: class OptionDummy:

View File

@ -1,8 +1,10 @@
"""Tests for distutils.ccompiler.""" """Tests for distutils.ccompiler."""
import os import os
import unittest import unittest
from test.support import captured_stdout
from distutils.ccompiler import gen_lib_options from distutils.ccompiler import gen_lib_options, CCompiler
from distutils import debug
class FakeCompiler(object): class FakeCompiler(object):
def library_dir_option(self, dir): def library_dir_option(self, dir):
@ -30,6 +32,26 @@ class CCompilerTestCase(unittest.TestCase):
'-lname2'] '-lname2']
self.assertEquals(opts, wanted) self.assertEquals(opts, wanted)
def test_debug_print(self):
class MyCCompiler(CCompiler):
executables = {}
compiler = MyCCompiler()
with captured_stdout() as stdout:
compiler.debug_print('xxx')
stdout.seek(0)
self.assertEquals(stdout.read(), '')
debug.DEBUG = True
try:
with captured_stdout() as stdout:
compiler.debug_print('xxx')
stdout.seek(0)
self.assertEquals(stdout.read(), 'xxx\n')
finally:
debug.DEBUG = False
def test_suite(): def test_suite():
return unittest.makeSuite(CCompilerTestCase) return unittest.makeSuite(CCompilerTestCase)

View File

@ -1,10 +1,12 @@
"""Tests for distutils.cmd.""" """Tests for distutils.cmd."""
import unittest import unittest
import os import os
from test.support import captured_stdout
from distutils.cmd import Command from distutils.cmd import Command
from distutils.dist import Distribution from distutils.dist import Distribution
from distutils.errors import DistutilsOptionError from distutils.errors import DistutilsOptionError
from distutils import debug
class MyCmd(Command): class MyCmd(Command):
def initialize_options(self): def initialize_options(self):
@ -102,6 +104,22 @@ class CommandTestCase(unittest.TestCase):
cmd.option2 = 'xxx' cmd.option2 = 'xxx'
self.assertRaises(DistutilsOptionError, cmd.ensure_dirname, 'option2') self.assertRaises(DistutilsOptionError, cmd.ensure_dirname, 'option2')
def test_debug_print(self):
cmd = self.cmd
with captured_stdout() as stdout:
cmd.debug_print('xxx')
stdout.seek(0)
self.assertEquals(stdout.read(), '')
debug.DEBUG = True
try:
with captured_stdout() as stdout:
cmd.debug_print('xxx')
stdout.seek(0)
self.assertEquals(stdout.read(), 'xxx\n')
finally:
debug.DEBUG = False
def test_suite(): def test_suite():
return unittest.makeSuite(CommandTestCase) return unittest.makeSuite(CommandTestCase)

View File

@ -6,6 +6,7 @@ import os
import shutil import shutil
import sys import sys
import test.support import test.support
from test.support import captured_stdout
import unittest import unittest
@ -33,10 +34,12 @@ class CoreTestCase(unittest.TestCase):
def setUp(self): def setUp(self):
self.old_stdout = sys.stdout self.old_stdout = sys.stdout
self.cleanup_testfn() self.cleanup_testfn()
self.old_argv = sys.argv[:]
def tearDown(self): def tearDown(self):
sys.stdout = self.old_stdout sys.stdout = self.old_stdout
self.cleanup_testfn() self.cleanup_testfn()
sys.argv = self.old_argv[:]
def cleanup_testfn(self): def cleanup_testfn(self):
path = test.support.TESTFN path = test.support.TESTFN
@ -73,6 +76,23 @@ class CoreTestCase(unittest.TestCase):
output = output[:-1] output = output[:-1]
self.assertEqual(cwd, output) self.assertEqual(cwd, output)
def test_debug_mode(self):
# this covers the code called when DEBUG is set
sys.argv = ['setup.py', '--name']
with captured_stdout() as stdout:
distutils.core.setup(name='bar')
stdout.seek(0)
self.assertEquals(stdout.read(), 'bar\n')
distutils.core.DEBUG = True
try:
with captured_stdout() as stdout:
distutils.core.setup(name='bar')
finally:
distutils.core.DEBUG = False
stdout.seek(0)
wanted = "options (after parsing config files):\n"
self.assertEquals(stdout.readlines()[0], wanted)
def test_suite(): def test_suite():
return unittest.makeSuite(CoreTestCase) return unittest.makeSuite(CoreTestCase)

View File

@ -1,7 +1,10 @@
"""Tests for distutils.filelist.""" """Tests for distutils.filelist."""
from os.path import join from os.path import join
import unittest import unittest
from test.support import captured_stdout
from distutils.filelist import glob_to_re, FileList from distutils.filelist import glob_to_re, FileList
from distutils import debug
MANIFEST_IN = """\ MANIFEST_IN = """\
include ok include ok
@ -59,6 +62,22 @@ class FileListTestCase(unittest.TestCase):
self.assertEquals(file_list.files, wanted) self.assertEquals(file_list.files, wanted)
def test_debug_print(self):
file_list = FileList()
with captured_stdout() as stdout:
file_list.debug_print('xxx')
stdout.seek(0)
self.assertEquals(stdout.read(), '')
debug.DEBUG = True
try:
with captured_stdout() as stdout:
file_list.debug_print('xxx')
stdout.seek(0)
self.assertEquals(stdout.read(), 'xxx\n')
finally:
debug.DEBUG = False
def test_suite(): def test_suite():
return unittest.makeSuite(FileListTestCase) return unittest.makeSuite(FileListTestCase)

View File

@ -6,6 +6,8 @@ import sys
import unittest import unittest
import site import site
from test.support import captured_stdout
from distutils.command.install import install from distutils.command.install import install
from distutils.command import install as install_module from distutils.command import install as install_module
from distutils.command.install import INSTALL_SCHEMES from distutils.command.install import INSTALL_SCHEMES
@ -14,7 +16,6 @@ from distutils.errors import DistutilsOptionError
from distutils.tests import support from distutils.tests import support
class InstallTestCase(support.TempdirManager, class InstallTestCase(support.TempdirManager,
support.LoggingSilencer, support.LoggingSilencer,
unittest.TestCase): unittest.TestCase):
@ -183,6 +184,17 @@ class InstallTestCase(support.TempdirManager,
with open(cmd.record) as f: with open(cmd.record) as f:
self.assertEquals(len(f.readlines()), 1) self.assertEquals(len(f.readlines()), 1)
def test_debug_mode(self):
# this covers the code called when DEBUG is set
old_logs_len = len(self.logs)
install_module.DEBUG = True
try:
with captured_stdout() as stdout:
self.test_record()
finally:
install_module.DEBUG = False
self.assertTrue(len(self.logs) > old_logs_len)
def test_suite(): def test_suite():
return unittest.makeSuite(InstallTestCase) return unittest.makeSuite(InstallTestCase)