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

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

#countcontent
1n/a"""Tests for packaging.command.install_data."""
2n/aimport os
3n/aimport sys
4n/aimport sysconfig
5n/aimport packaging.database
6n/afrom sysconfig import _get_default_scheme
7n/afrom packaging.tests import unittest, support
8n/afrom packaging.command.install_data import install_data
9n/afrom packaging.command.install_dist import install_dist
10n/afrom packaging.command.install_distinfo import install_distinfo
11n/a
12n/a
13n/aclass InstallDataTestCase(support.TempdirManager,
14n/a support.LoggingCatcher,
15n/a unittest.TestCase):
16n/a
17n/a def setUp(self):
18n/a super(InstallDataTestCase, self).setUp()
19n/a scheme = _get_default_scheme()
20n/a old_items = sysconfig._SCHEMES.items(scheme)
21n/a
22n/a def restore():
23n/a sysconfig._SCHEMES.remove_section(scheme)
24n/a sysconfig._SCHEMES.add_section(scheme)
25n/a for option, value in old_items:
26n/a sysconfig._SCHEMES.set(scheme, option, value)
27n/a
28n/a self.addCleanup(restore)
29n/a
30n/a def test_simple_run(self):
31n/a pkg_dir, dist = self.create_dist()
32n/a cmd = install_data(dist)
33n/a cmd.install_dir = inst = os.path.join(pkg_dir, 'inst')
34n/a scheme = _get_default_scheme()
35n/a
36n/a sysconfig._SCHEMES.set(scheme, 'inst',
37n/a os.path.join(pkg_dir, 'inst'))
38n/a sysconfig._SCHEMES.set(scheme, 'inst2',
39n/a os.path.join(pkg_dir, 'inst2'))
40n/a
41n/a one = os.path.join(pkg_dir, 'one')
42n/a self.write_file(one, 'xxx')
43n/a inst2 = os.path.join(pkg_dir, 'inst2')
44n/a two = os.path.join(pkg_dir, 'two')
45n/a self.write_file(two, 'xxx')
46n/a
47n/a # FIXME this creates a literal \{inst2\} directory!
48n/a cmd.data_files = {one: '{inst}/one', two: '{inst2}/two'}
49n/a self.assertCountEqual(cmd.get_inputs(), [one, two])
50n/a
51n/a # let's run the command
52n/a cmd.ensure_finalized()
53n/a cmd.run()
54n/a
55n/a # let's check the result
56n/a self.assertEqual(len(cmd.get_outputs()), 2)
57n/a rtwo = os.path.split(two)[-1]
58n/a self.assertTrue(os.path.exists(os.path.join(inst2, rtwo)))
59n/a rone = os.path.split(one)[-1]
60n/a self.assertTrue(os.path.exists(os.path.join(inst, rone)))
61n/a cmd.outfiles = []
62n/a
63n/a # let's try with warn_dir one
64n/a cmd.warn_dir = True
65n/a cmd.finalized = False
66n/a cmd.ensure_finalized()
67n/a cmd.run()
68n/a
69n/a # let's check the result
70n/a self.assertEqual(len(cmd.get_outputs()), 2)
71n/a self.assertTrue(os.path.exists(os.path.join(inst2, rtwo)))
72n/a self.assertTrue(os.path.exists(os.path.join(inst, rone)))
73n/a cmd.outfiles = []
74n/a
75n/a # now using root and empty dir
76n/a cmd.root = os.path.join(pkg_dir, 'root')
77n/a three = os.path.join(cmd.install_dir, 'three')
78n/a self.write_file(three, 'xx')
79n/a
80n/a sysconfig._SCHEMES.set(scheme, 'inst3', cmd.install_dir)
81n/a
82n/a cmd.data_files = {one: '{inst}/one', two: '{inst2}/two',
83n/a three: '{inst3}/three'}
84n/a cmd.finalized = False
85n/a cmd.ensure_finalized()
86n/a cmd.run()
87n/a
88n/a # let's check the result
89n/a self.assertEqual(len(cmd.get_outputs()), 3)
90n/a self.assertTrue(os.path.exists(os.path.join(inst2, rtwo)))
91n/a self.assertTrue(os.path.exists(os.path.join(inst, rone)))
92n/a
93n/a def test_resources(self):
94n/a install_dir = self.mkdtemp()
95n/a scripts_dir = self.mkdtemp()
96n/a project_dir, dist = self.create_dist(
97n/a name='Spamlib', version='0.1',
98n/a data_files={'spamd': '{scripts}/spamd'})
99n/a
100n/a os.chdir(project_dir)
101n/a self.write_file('spamd', '# Python script')
102n/a sysconfig._SCHEMES.set(_get_default_scheme(), 'scripts', scripts_dir)
103n/a sys.path.insert(0, install_dir)
104n/a packaging.database.disable_cache()
105n/a self.addCleanup(sys.path.remove, install_dir)
106n/a self.addCleanup(packaging.database.enable_cache)
107n/a
108n/a cmd = install_dist(dist)
109n/a cmd.outputs = ['spamd']
110n/a cmd.install_lib = install_dir
111n/a dist.command_obj['install_dist'] = cmd
112n/a
113n/a cmd = install_data(dist)
114n/a cmd.install_dir = install_dir
115n/a cmd.ensure_finalized()
116n/a dist.command_obj['install_data'] = cmd
117n/a cmd.run()
118n/a
119n/a cmd = install_distinfo(dist)
120n/a cmd.ensure_finalized()
121n/a dist.command_obj['install_distinfo'] = cmd
122n/a cmd.run()
123n/a
124n/a # first a few sanity checks
125n/a self.assertEqual(os.listdir(scripts_dir), ['spamd'])
126n/a self.assertEqual(os.listdir(install_dir), ['Spamlib-0.1.dist-info'])
127n/a
128n/a # now the real test
129n/a fn = os.path.join(install_dir, 'Spamlib-0.1.dist-info', 'RESOURCES')
130n/a with open(fn, encoding='utf-8') as fp:
131n/a content = fp.read().strip()
132n/a
133n/a expected = 'spamd,%s' % os.path.join(scripts_dir, 'spamd')
134n/a self.assertEqual(content, expected)
135n/a
136n/a # just to be sure, we also test that get_file works here, even though
137n/a # packaging.database has its own test file
138n/a with packaging.database.get_file('Spamlib', 'spamd') as fp:
139n/a content = fp.read()
140n/a
141n/a self.assertEqual('# Python script', content)
142n/a
143n/a
144n/adef test_suite():
145n/a return unittest.makeSuite(InstallDataTestCase)
146n/a
147n/aif __name__ == "__main__":
148n/a unittest.main(defaultTest="test_suite")