»Core Development>Code coverage>Lib/packaging/tests/test_create.py

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

#countcontent
1n/a"""Tests for packaging.create."""
2n/aimport os
3n/aimport sys
4n/aimport sysconfig
5n/afrom textwrap import dedent
6n/afrom packaging import create
7n/afrom packaging.create import MainProgram, ask_yn, ask, main
8n/a
9n/afrom packaging.tests import support, unittest
10n/afrom packaging.tests.support import Inputs
11n/a
12n/a
13n/aclass CreateTestCase(support.TempdirManager,
14n/a support.EnvironRestorer,
15n/a support.LoggingCatcher,
16n/a unittest.TestCase):
17n/a
18n/a maxDiff = None
19n/a restore_environ = ['PLAT']
20n/a
21n/a def setUp(self):
22n/a super(CreateTestCase, self).setUp()
23n/a self.wdir = self.mkdtemp()
24n/a os.chdir(self.wdir)
25n/a # patch sysconfig
26n/a self._old_get_paths = sysconfig.get_paths
27n/a sysconfig.get_paths = lambda *args, **kwargs: {
28n/a 'man': sys.prefix + '/share/man',
29n/a 'doc': sys.prefix + '/share/doc/pyxfoil', }
30n/a
31n/a def tearDown(self):
32n/a sysconfig.get_paths = self._old_get_paths
33n/a if hasattr(create, 'input'):
34n/a del create.input
35n/a super(CreateTestCase, self).tearDown()
36n/a
37n/a def test_ask_yn(self):
38n/a create.input = Inputs('y')
39n/a self.assertEqual('y', ask_yn('is this a test'))
40n/a
41n/a def test_ask(self):
42n/a create.input = Inputs('a', 'b')
43n/a self.assertEqual('a', ask('is this a test'))
44n/a self.assertEqual('b', ask(str(list(range(0, 70))), default='c',
45n/a lengthy=True))
46n/a
47n/a def test_set_multi(self):
48n/a mainprogram = MainProgram()
49n/a create.input = Inputs('aaaaa')
50n/a mainprogram.data['author'] = []
51n/a mainprogram._set_multi('_set_multi test', 'author')
52n/a self.assertEqual(['aaaaa'], mainprogram.data['author'])
53n/a
54n/a def test_find_files(self):
55n/a # making sure we scan a project dir correctly
56n/a mainprogram = MainProgram()
57n/a
58n/a # building the structure
59n/a tempdir = self.wdir
60n/a dirs = ['pkg1', 'data', 'pkg2', 'pkg2/sub']
61n/a files = [
62n/a 'README',
63n/a 'data/data1',
64n/a 'foo.py',
65n/a 'pkg1/__init__.py',
66n/a 'pkg1/bar.py',
67n/a 'pkg2/__init__.py',
68n/a 'pkg2/sub/__init__.py',
69n/a ]
70n/a
71n/a for dir_ in dirs:
72n/a os.mkdir(os.path.join(tempdir, dir_))
73n/a
74n/a for file_ in files:
75n/a self.write_file((tempdir, file_), 'xxx')
76n/a
77n/a mainprogram._find_files()
78n/a mainprogram.data['packages'].sort()
79n/a
80n/a # do we have what we want?
81n/a self.assertEqual(mainprogram.data['packages'],
82n/a ['pkg1', 'pkg2', 'pkg2.sub'])
83n/a self.assertEqual(mainprogram.data['modules'], ['foo'])
84n/a data_fn = os.path.join('data', 'data1')
85n/a self.assertEqual(mainprogram.data['extra_files'],
86n/a ['README', data_fn])
87n/a
88n/a def test_convert_setup_py_to_cfg(self):
89n/a self.write_file((self.wdir, 'setup.py'),
90n/a dedent("""
91n/a # coding: utf-8
92n/a from distutils.core import setup
93n/a
94n/a long_description = '''My super Death-scription
95n/a barbar is now on the public domain,
96n/a ho, baby !'''
97n/a
98n/a setup(name='pyxfoil',
99n/a version='0.2',
100n/a description='Python bindings for the Xfoil engine',
101n/a long_description=long_description,
102n/a maintainer='André Espaze',
103n/a maintainer_email='andre.espaze@logilab.fr',
104n/a url='http://www.python-science.org/project/pyxfoil',
105n/a license='GPLv2',
106n/a packages=['pyxfoil', 'babar', 'me'],
107n/a data_files=[
108n/a ('share/doc/pyxfoil', ['README.rst']),
109n/a ('share/man', ['pyxfoil.1']),
110n/a ],
111n/a py_modules=['my_lib', 'mymodule'],
112n/a package_dir={
113n/a 'babar': '',
114n/a 'me': 'Martinique/Lamentin',
115n/a },
116n/a package_data={
117n/a 'babar': ['Pom', 'Flora', 'Alexander'],
118n/a 'me': ['dady', 'mumy', 'sys', 'bro'],
119n/a 'pyxfoil': ['fengine.so'],
120n/a },
121n/a scripts=['my_script', 'bin/run'],
122n/a )
123n/a """), encoding='utf-8')
124n/a create.input = Inputs('y')
125n/a main()
126n/a
127n/a path = os.path.join(self.wdir, 'setup.cfg')
128n/a with open(path, encoding='utf-8') as fp:
129n/a contents = fp.read()
130n/a
131n/a self.assertEqual(contents, dedent("""\
132n/a [metadata]
133n/a name = pyxfoil
134n/a version = 0.2
135n/a summary = Python bindings for the Xfoil engine
136n/a download_url = UNKNOWN
137n/a home_page = http://www.python-science.org/project/pyxfoil
138n/a maintainer = André Espaze
139n/a maintainer_email = andre.espaze@logilab.fr
140n/a description = My super Death-scription
141n/a |barbar is now on the public domain,
142n/a |ho, baby !
143n/a
144n/a [files]
145n/a packages = pyxfoil
146n/a babar
147n/a me
148n/a modules = my_lib
149n/a mymodule
150n/a scripts = my_script
151n/a bin/run
152n/a package_data =
153n/a babar = Pom
154n/a Flora
155n/a Alexander
156n/a me = dady
157n/a mumy
158n/a sys
159n/a bro
160n/a pyxfoil = fengine.so
161n/a
162n/a resources =
163n/a README.rst = {doc}
164n/a pyxfoil.1 = {man}
165n/a
166n/a """))
167n/a
168n/a def test_convert_setup_py_to_cfg_with_description_in_readme(self):
169n/a self.write_file((self.wdir, 'setup.py'),
170n/a dedent("""
171n/a # coding: utf-8
172n/a from distutils.core import setup
173n/a with open('README.txt') as fp:
174n/a long_description = fp.read()
175n/a
176n/a setup(name='pyxfoil',
177n/a version='0.2',
178n/a description='Python bindings for the Xfoil engine',
179n/a long_description=long_description,
180n/a maintainer='André Espaze',
181n/a maintainer_email='andre.espaze@logilab.fr',
182n/a url='http://www.python-science.org/project/pyxfoil',
183n/a license='GPLv2',
184n/a packages=['pyxfoil'],
185n/a package_data={'pyxfoil': ['fengine.so', 'babar.so']},
186n/a data_files=[
187n/a ('share/doc/pyxfoil', ['README.rst']),
188n/a ('share/man', ['pyxfoil.1']),
189n/a ],
190n/a )
191n/a """), encoding='utf-8')
192n/a self.write_file((self.wdir, 'README.txt'),
193n/a dedent('''
194n/aMy super Death-scription
195n/abarbar is now in the public domain,
196n/aho, baby!
197n/a '''))
198n/a create.input = Inputs('y')
199n/a main()
200n/a
201n/a path = os.path.join(self.wdir, 'setup.cfg')
202n/a with open(path, encoding='utf-8') as fp:
203n/a contents = fp.read()
204n/a
205n/a self.assertEqual(contents, dedent("""\
206n/a [metadata]
207n/a name = pyxfoil
208n/a version = 0.2
209n/a summary = Python bindings for the Xfoil engine
210n/a download_url = UNKNOWN
211n/a home_page = http://www.python-science.org/project/pyxfoil
212n/a maintainer = André Espaze
213n/a maintainer_email = andre.espaze@logilab.fr
214n/a description-file = README.txt
215n/a
216n/a [files]
217n/a packages = pyxfoil
218n/a package_data =
219n/a pyxfoil = fengine.so
220n/a babar.so
221n/a
222n/a resources =
223n/a README.rst = {doc}
224n/a pyxfoil.1 = {man}
225n/a
226n/a """))
227n/a
228n/a
229n/adef test_suite():
230n/a return unittest.makeSuite(CreateTestCase)
231n/a
232n/aif __name__ == '__main__':
233n/a unittest.main(defaultTest='test_suite')