mirror of
https://github.com/python/cpython.git
synced 2025-07-25 12:14:38 +00:00

svn+ssh://pythondev@svn.python.org/python/trunk ........ r78351 | r.david.murray | 2010-02-22 19:24:49 -0500 (Mon, 22 Feb 2010) | 5 lines Issue 6292: for the moment at least, the test suite passes if run with -OO. Tests requiring docstrings are skipped. Patch by Brian Curtin, thanks to Matias Torchinsky for helping review and improve the patch. ........
122 lines
3.9 KiB
Python
122 lines
3.9 KiB
Python
"""Tests for distutils.command.build_py."""
|
|
|
|
import os
|
|
import sys
|
|
import io
|
|
import unittest
|
|
|
|
from distutils.command.build_py import build_py
|
|
from distutils.core import Distribution
|
|
from distutils.errors import DistutilsFileError
|
|
|
|
from distutils.tests import support
|
|
|
|
|
|
class BuildPyTestCase(support.TempdirManager,
|
|
support.LoggingSilencer,
|
|
unittest.TestCase):
|
|
|
|
def _setup_package_data(self):
|
|
sources = self.mkdtemp()
|
|
f = open(os.path.join(sources, "__init__.py"), "w")
|
|
f.write("# Pretend this is a package.")
|
|
f.close()
|
|
f = open(os.path.join(sources, "README.txt"), "w")
|
|
f.write("Info about this package")
|
|
f.close()
|
|
|
|
destination = self.mkdtemp()
|
|
|
|
dist = Distribution({"packages": ["pkg"],
|
|
"package_dir": {"pkg": sources}})
|
|
# script_name need not exist, it just need to be initialized
|
|
dist.script_name = os.path.join(sources, "setup.py")
|
|
dist.command_obj["build"] = support.DummyCommand(
|
|
force=0,
|
|
build_lib=destination)
|
|
dist.packages = ["pkg"]
|
|
dist.package_data = {"pkg": ["README.txt"]}
|
|
dist.package_dir = {"pkg": sources}
|
|
|
|
cmd = build_py(dist)
|
|
cmd.compile = 1
|
|
cmd.ensure_finalized()
|
|
self.assertEqual(cmd.package_data, dist.package_data)
|
|
|
|
cmd.run()
|
|
|
|
# This makes sure the list of outputs includes byte-compiled
|
|
# files for Python modules but not for package data files
|
|
# (there shouldn't *be* byte-code files for those!).
|
|
#
|
|
self.assertEqual(len(cmd.get_outputs()), 3)
|
|
pkgdest = os.path.join(destination, "pkg")
|
|
files = os.listdir(pkgdest)
|
|
return files
|
|
|
|
def test_package_data(self):
|
|
files = self._setup_package_data()
|
|
self.assertTrue("__init__.py" in files)
|
|
self.assertTrue("README.txt" in files)
|
|
|
|
@unittest.skipIf(sys.flags.optimize >= 2,
|
|
"pyc files are not written with -O2 and above")
|
|
def test_package_data_pyc(self):
|
|
files = self._setup_package_data()
|
|
self.assertTrue("__init__.pyc" in files)
|
|
|
|
def test_empty_package_dir (self):
|
|
# See SF 1668596/1720897.
|
|
cwd = os.getcwd()
|
|
|
|
# create the distribution files.
|
|
sources = self.mkdtemp()
|
|
open(os.path.join(sources, "__init__.py"), "w").close()
|
|
|
|
testdir = os.path.join(sources, "doc")
|
|
os.mkdir(testdir)
|
|
open(os.path.join(testdir, "testfile"), "w").close()
|
|
|
|
os.chdir(sources)
|
|
old_stdout = sys.stdout
|
|
sys.stdout = io.StringIO()
|
|
|
|
try:
|
|
dist = Distribution({"packages": ["pkg"],
|
|
"package_dir": {"pkg": ""},
|
|
"package_data": {"pkg": ["doc/*"]}})
|
|
# script_name need not exist, it just need to be initialized
|
|
dist.script_name = os.path.join(sources, "setup.py")
|
|
dist.script_args = ["build"]
|
|
dist.parse_command_line()
|
|
|
|
try:
|
|
dist.run_commands()
|
|
except DistutilsFileError:
|
|
self.fail("failed package_data test when package_dir is ''")
|
|
finally:
|
|
# Restore state.
|
|
os.chdir(cwd)
|
|
sys.stdout = old_stdout
|
|
|
|
def test_dont_write_bytecode(self):
|
|
# makes sure byte_compile is not used
|
|
pkg_dir, dist = self.create_dist()
|
|
cmd = build_py(dist)
|
|
cmd.compile = 1
|
|
cmd.optimize = 1
|
|
|
|
old_dont_write_bytecode = sys.dont_write_bytecode
|
|
sys.dont_write_bytecode = True
|
|
try:
|
|
cmd.byte_compile([])
|
|
finally:
|
|
sys.dont_write_bytecode = old_dont_write_bytecode
|
|
|
|
self.assertTrue('byte-compiling is disabled' in self.logs[0][1])
|
|
|
|
def test_suite():
|
|
return unittest.makeSuite(BuildPyTestCase)
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main(defaultTest="test_suite")
|