ยปCore Development>Code coverage>Lib/packaging/tests/test_command_build_py.py

Python code coverage for Lib/packaging/tests/test_command_build_py.py

#countcontent
1n/a"""Tests for distutils.command.build_py."""
2n/a
3n/aimport os
4n/aimport sys
5n/aimport imp
6n/a
7n/afrom packaging.command.build_py import build_py
8n/afrom packaging.dist import Distribution
9n/afrom packaging.errors import PackagingFileError
10n/a
11n/afrom packaging.tests import unittest, support
12n/a
13n/a
14n/aclass BuildPyTestCase(support.TempdirManager,
15n/a support.LoggingCatcher,
16n/a unittest.TestCase):
17n/a
18n/a def test_package_data(self):
19n/a sources = self.mkdtemp()
20n/a pkg_dir = os.path.join(sources, 'pkg')
21n/a os.mkdir(pkg_dir)
22n/a f = open(os.path.join(pkg_dir, "__init__.py"), "w")
23n/a try:
24n/a f.write("# Pretend this is a package.")
25n/a finally:
26n/a f.close()
27n/a # let's have two files to make sure globbing works
28n/a f = open(os.path.join(pkg_dir, "README.txt"), "w")
29n/a try:
30n/a f.write("Info about this package")
31n/a finally:
32n/a f.close()
33n/a f = open(os.path.join(pkg_dir, "HACKING.txt"), "w")
34n/a try:
35n/a f.write("How to contribute")
36n/a finally:
37n/a f.close()
38n/a
39n/a destination = self.mkdtemp()
40n/a
41n/a dist = Distribution({"packages": ["pkg"],
42n/a "package_dir": sources})
43n/a
44n/a dist.command_obj["build"] = support.DummyCommand(
45n/a force=False,
46n/a build_lib=destination,
47n/a use_2to3_fixers=None,
48n/a convert_2to3_doctests=None,
49n/a use_2to3=False)
50n/a dist.packages = ["pkg"]
51n/a dist.package_data = {"pkg": ["*.txt"]}
52n/a dist.package_dir = sources
53n/a
54n/a cmd = build_py(dist)
55n/a cmd.compile = True
56n/a cmd.ensure_finalized()
57n/a self.assertEqual(cmd.package_data, dist.package_data)
58n/a
59n/a cmd.run()
60n/a
61n/a # This makes sure the list of outputs includes byte-compiled
62n/a # files for Python modules but not for package data files
63n/a # (there shouldn't *be* byte-code files for those!).
64n/a # FIXME the test below is not doing what the comment above says, and
65n/a # if it did it would show a code bug: if we add a demo.py file to
66n/a # package_data, it gets byte-compiled!
67n/a outputs = cmd.get_outputs()
68n/a self.assertEqual(len(outputs), 4, outputs)
69n/a pkgdest = os.path.join(destination, "pkg")
70n/a files = os.listdir(pkgdest)
71n/a pycache_dir = os.path.join(pkgdest, "__pycache__")
72n/a self.assertIn("__init__.py", files)
73n/a self.assertIn("README.txt", files)
74n/a self.assertIn("HACKING.txt", files)
75n/a pyc_files = os.listdir(pycache_dir)
76n/a self.assertEqual(["__init__.%s.pyc" % imp.get_tag()], pyc_files)
77n/a
78n/a def test_empty_package_dir(self):
79n/a # See SF 1668596/1720897.
80n/a # create the distribution files.
81n/a sources = self.mkdtemp()
82n/a pkg = os.path.join(sources, 'pkg')
83n/a os.mkdir(pkg)
84n/a open(os.path.join(pkg, "__init__.py"), "wb").close()
85n/a testdir = os.path.join(pkg, "doc")
86n/a os.mkdir(testdir)
87n/a open(os.path.join(testdir, "testfile"), "wb").close()
88n/a
89n/a os.chdir(sources)
90n/a dist = Distribution({"packages": ["pkg"],
91n/a "package_dir": sources,
92n/a "package_data": {"pkg": ["doc/*"]}})
93n/a dist.script_args = ["build"]
94n/a dist.parse_command_line()
95n/a
96n/a try:
97n/a dist.run_commands()
98n/a except PackagingFileError:
99n/a self.fail("failed package_data test when package_dir is ''")
100n/a
101n/a def test_byte_compile(self):
102n/a project_dir, dist = self.create_dist(py_modules=['boiledeggs'])
103n/a os.chdir(project_dir)
104n/a self.write_file('boiledeggs.py', 'import antigravity')
105n/a cmd = build_py(dist)
106n/a cmd.compile = True
107n/a cmd.build_lib = 'here'
108n/a cmd.finalize_options()
109n/a cmd.run()
110n/a
111n/a found = os.listdir(cmd.build_lib)
112n/a self.assertEqual(sorted(found), ['__pycache__', 'boiledeggs.py'])
113n/a found = os.listdir(os.path.join(cmd.build_lib, '__pycache__'))
114n/a self.assertEqual(found, ['boiledeggs.%s.pyc' % imp.get_tag()])
115n/a
116n/a def test_byte_compile_optimized(self):
117n/a project_dir, dist = self.create_dist(py_modules=['boiledeggs'])
118n/a os.chdir(project_dir)
119n/a self.write_file('boiledeggs.py', 'import antigravity')
120n/a cmd = build_py(dist)
121n/a cmd.compile = True
122n/a cmd.optimize = 1
123n/a cmd.build_lib = 'here'
124n/a cmd.finalize_options()
125n/a cmd.run()
126n/a
127n/a found = os.listdir(cmd.build_lib)
128n/a self.assertEqual(sorted(found), ['__pycache__', 'boiledeggs.py'])
129n/a found = os.listdir(os.path.join(cmd.build_lib, '__pycache__'))
130n/a self.assertEqual(sorted(found), ['boiledeggs.%s.pyc' % imp.get_tag(),
131n/a 'boiledeggs.%s.pyo' % imp.get_tag()])
132n/a
133n/a def test_byte_compile_under_B(self):
134n/a # make sure byte compilation works under -B (dont_write_bytecode)
135n/a self.addCleanup(setattr, sys, 'dont_write_bytecode',
136n/a sys.dont_write_bytecode)
137n/a sys.dont_write_bytecode = True
138n/a self.test_byte_compile()
139n/a self.test_byte_compile_optimized()
140n/a
141n/a
142n/adef test_suite():
143n/a return unittest.makeSuite(BuildPyTestCase)
144n/a
145n/aif __name__ == "__main__":
146n/a unittest.main(defaultTest="test_suite")