mirror of
https://github.com/python/cpython.git
synced 2025-07-23 11:15:24 +00:00

Completely get rid of StringIO.py and cStringIO.c. I had to fix a few tests and modules beyond what Christian did, and invent a few conventions. E.g. in elementtree, I chose to write/return Unicode strings whe no encoding is given, but bytes when an explicit encoding is given. Also mimetools was made to always assume binary files.
96 lines
3.1 KiB
Python
96 lines
3.1 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 test_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)
|
|
self.assert_("__init__.py" in files)
|
|
self.assert_("__init__.pyc" in files)
|
|
self.assert_("README.txt" 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)
|
|
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 = sys.__stdout__
|
|
|
|
def test_suite():
|
|
return unittest.makeSuite(BuildPyTestCase)
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main(defaultTest="test_suite")
|