mirror of
https://github.com/python/cpython.git
synced 2025-07-24 19:54:21 +00:00

Running with regrtest does not show spurious output or unrestored sys.std* objects; sometimes running with make test is different, I’ll watch the buildbots. In addition, update the create module to use logging.
234 lines
7.5 KiB
Python
234 lines
7.5 KiB
Python
"""Tests for packaging.create."""
|
|
import os
|
|
import sys
|
|
import sysconfig
|
|
from textwrap import dedent
|
|
from packaging import create
|
|
from packaging.create import MainProgram, ask_yn, ask, main
|
|
|
|
from packaging.tests import support, unittest
|
|
from packaging.tests.support import Inputs
|
|
|
|
|
|
class CreateTestCase(support.TempdirManager,
|
|
support.EnvironRestorer,
|
|
support.LoggingCatcher,
|
|
unittest.TestCase):
|
|
|
|
maxDiff = None
|
|
restore_environ = ['PLAT']
|
|
|
|
def setUp(self):
|
|
super(CreateTestCase, self).setUp()
|
|
self.wdir = self.mkdtemp()
|
|
os.chdir(self.wdir)
|
|
# patch sysconfig
|
|
self._old_get_paths = sysconfig.get_paths
|
|
sysconfig.get_paths = lambda *args, **kwargs: {
|
|
'man': sys.prefix + '/share/man',
|
|
'doc': sys.prefix + '/share/doc/pyxfoil', }
|
|
|
|
def tearDown(self):
|
|
sysconfig.get_paths = self._old_get_paths
|
|
if hasattr(create, 'input'):
|
|
del create.input
|
|
super(CreateTestCase, self).tearDown()
|
|
|
|
def test_ask_yn(self):
|
|
create.input = Inputs('y')
|
|
self.assertEqual('y', ask_yn('is this a test'))
|
|
|
|
def test_ask(self):
|
|
create.input = Inputs('a', 'b')
|
|
self.assertEqual('a', ask('is this a test'))
|
|
self.assertEqual('b', ask(str(list(range(0, 70))), default='c',
|
|
lengthy=True))
|
|
|
|
def test_set_multi(self):
|
|
mainprogram = MainProgram()
|
|
create.input = Inputs('aaaaa')
|
|
mainprogram.data['author'] = []
|
|
mainprogram._set_multi('_set_multi test', 'author')
|
|
self.assertEqual(['aaaaa'], mainprogram.data['author'])
|
|
|
|
def test_find_files(self):
|
|
# making sure we scan a project dir correctly
|
|
mainprogram = MainProgram()
|
|
|
|
# building the structure
|
|
tempdir = self.wdir
|
|
dirs = ['pkg1', 'data', 'pkg2', 'pkg2/sub']
|
|
files = [
|
|
'README',
|
|
'data/data1',
|
|
'foo.py',
|
|
'pkg1/__init__.py',
|
|
'pkg1/bar.py',
|
|
'pkg2/__init__.py',
|
|
'pkg2/sub/__init__.py',
|
|
]
|
|
|
|
for dir_ in dirs:
|
|
os.mkdir(os.path.join(tempdir, dir_))
|
|
|
|
for file_ in files:
|
|
self.write_file((tempdir, file_), 'xxx')
|
|
|
|
mainprogram._find_files()
|
|
mainprogram.data['packages'].sort()
|
|
|
|
# do we have what we want?
|
|
self.assertEqual(mainprogram.data['packages'],
|
|
['pkg1', 'pkg2', 'pkg2.sub'])
|
|
self.assertEqual(mainprogram.data['modules'], ['foo'])
|
|
data_fn = os.path.join('data', 'data1')
|
|
self.assertEqual(mainprogram.data['extra_files'],
|
|
['README', data_fn])
|
|
|
|
def test_convert_setup_py_to_cfg(self):
|
|
self.write_file((self.wdir, 'setup.py'),
|
|
dedent("""
|
|
# coding: utf-8
|
|
from distutils.core import setup
|
|
|
|
long_description = '''My super Death-scription
|
|
barbar is now on the public domain,
|
|
ho, baby !'''
|
|
|
|
setup(name='pyxfoil',
|
|
version='0.2',
|
|
description='Python bindings for the Xfoil engine',
|
|
long_description=long_description,
|
|
maintainer='André Espaze',
|
|
maintainer_email='andre.espaze@logilab.fr',
|
|
url='http://www.python-science.org/project/pyxfoil',
|
|
license='GPLv2',
|
|
packages=['pyxfoil', 'babar', 'me'],
|
|
data_files=[
|
|
('share/doc/pyxfoil', ['README.rst']),
|
|
('share/man', ['pyxfoil.1']),
|
|
],
|
|
py_modules=['my_lib', 'mymodule'],
|
|
package_dir={
|
|
'babar': '',
|
|
'me': 'Martinique/Lamentin',
|
|
},
|
|
package_data={
|
|
'babar': ['Pom', 'Flora', 'Alexander'],
|
|
'me': ['dady', 'mumy', 'sys', 'bro'],
|
|
'': ['setup.py', 'README'],
|
|
'pyxfoil': ['fengine.so'],
|
|
},
|
|
scripts=['my_script', 'bin/run'],
|
|
)
|
|
"""), encoding='utf-8')
|
|
create.input = Inputs('y')
|
|
main()
|
|
|
|
path = os.path.join(self.wdir, 'setup.cfg')
|
|
with open(path, encoding='utf-8') as fp:
|
|
contents = fp.read()
|
|
|
|
self.assertEqual(contents, dedent("""\
|
|
[metadata]
|
|
name = pyxfoil
|
|
version = 0.2
|
|
summary = Python bindings for the Xfoil engine
|
|
download_url = UNKNOWN
|
|
home_page = http://www.python-science.org/project/pyxfoil
|
|
maintainer = André Espaze
|
|
maintainer_email = andre.espaze@logilab.fr
|
|
description = My super Death-scription
|
|
|barbar is now on the public domain,
|
|
|ho, baby !
|
|
|
|
[files]
|
|
packages = pyxfoil
|
|
babar
|
|
me
|
|
modules = my_lib
|
|
mymodule
|
|
scripts = my_script
|
|
bin/run
|
|
extra_files = Martinique/Lamentin/dady
|
|
Martinique/Lamentin/mumy
|
|
Martinique/Lamentin/sys
|
|
Martinique/Lamentin/bro
|
|
setup.py
|
|
README
|
|
Pom
|
|
Flora
|
|
Alexander
|
|
pyxfoil/fengine.so
|
|
|
|
resources =
|
|
README.rst = {doc}
|
|
pyxfoil.1 = {man}
|
|
|
|
"""))
|
|
|
|
def test_convert_setup_py_to_cfg_with_description_in_readme(self):
|
|
self.write_file((self.wdir, 'setup.py'),
|
|
dedent("""
|
|
# coding: utf-8
|
|
from distutils.core import setup
|
|
with open('README.txt') as fp:
|
|
long_description = fp.read()
|
|
|
|
setup(name='pyxfoil',
|
|
version='0.2',
|
|
description='Python bindings for the Xfoil engine',
|
|
long_description=long_description,
|
|
maintainer='André Espaze',
|
|
maintainer_email='andre.espaze@logilab.fr',
|
|
url='http://www.python-science.org/project/pyxfoil',
|
|
license='GPLv2',
|
|
packages=['pyxfoil'],
|
|
package_data={'pyxfoil': ['fengine.so', 'babar.so']},
|
|
data_files=[
|
|
('share/doc/pyxfoil', ['README.rst']),
|
|
('share/man', ['pyxfoil.1']),
|
|
],
|
|
)
|
|
"""), encoding='utf-8')
|
|
self.write_file((self.wdir, 'README.txt'),
|
|
dedent('''
|
|
My super Death-scription
|
|
barbar is now in the public domain,
|
|
ho, baby!
|
|
'''))
|
|
create.input = Inputs('y')
|
|
main()
|
|
|
|
path = os.path.join(self.wdir, 'setup.cfg')
|
|
with open(path, encoding='utf-8') as fp:
|
|
contents = fp.read()
|
|
|
|
self.assertEqual(contents, dedent("""\
|
|
[metadata]
|
|
name = pyxfoil
|
|
version = 0.2
|
|
summary = Python bindings for the Xfoil engine
|
|
download_url = UNKNOWN
|
|
home_page = http://www.python-science.org/project/pyxfoil
|
|
maintainer = André Espaze
|
|
maintainer_email = andre.espaze@logilab.fr
|
|
description-file = README.txt
|
|
|
|
[files]
|
|
packages = pyxfoil
|
|
extra_files = pyxfoil/fengine.so
|
|
pyxfoil/babar.so
|
|
|
|
resources =
|
|
README.rst = {doc}
|
|
pyxfoil.1 = {man}
|
|
|
|
"""))
|
|
|
|
|
|
def test_suite():
|
|
return unittest.makeSuite(CreateTestCase)
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main(defaultTest='test_suite')
|