diff options
| author | Daniel Himmelstein <daniel.himmelstein@gmail.com> | 2019-05-22 17:45:44 -0400 |
|---|---|---|
| committer | Benoit Pierre <benoit.pierre@gmail.com> | 2019-07-16 13:20:36 +0200 |
| commit | 8f848bd777278fc8dcb42dc45751cd8b95ec2a02 (patch) | |
| tree | d78ada4b85b44d48a3bda0a2a43b4261c4847e89 /setuptools/tests | |
| parent | 305bb1cefc3251c67b55149139a768ddf474f7b6 (diff) | |
| download | external_python_setuptools-8f848bd777278fc8dcb42dc45751cd8b95ec2a02.tar.gz external_python_setuptools-8f848bd777278fc8dcb42dc45751cd8b95ec2a02.tar.bz2 external_python_setuptools-8f848bd777278fc8dcb42dc45751cd8b95ec2a02.zip | |
improve `package_data` check
Ensure the dictionary values are lists/tuples of strings.
Fix #1459.
Diffstat (limited to 'setuptools/tests')
| -rw-r--r-- | setuptools/tests/test_dist.py | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/setuptools/tests/test_dist.py b/setuptools/tests/test_dist.py index 390c3dfc..c771a19a 100644 --- a/setuptools/tests/test_dist.py +++ b/setuptools/tests/test_dist.py @@ -3,7 +3,13 @@ from __future__ import unicode_literals import io -from setuptools.dist import DistDeprecationWarning, _get_unpatched +import re +from distutils.errors import DistutilsSetupError +from setuptools.dist import ( + _get_unpatched, + check_package_data, + DistDeprecationWarning, +) from setuptools import Distribution from setuptools.extern.six.moves.urllib.request import pathname2url from setuptools.extern.six.moves.urllib_parse import urljoin @@ -263,3 +269,48 @@ def test_maintainer_author(name, attrs, tmpdir): else: line = '%s: %s' % (fkey, val) assert line in pkg_lines_set + + +CHECK_PACKAGE_DATA_TESTS = ( + # Valid. + ({ + '': ['*.txt', '*.rst'], + 'hello': ['*.msg'], + }, None), + # Not a dictionary. + (( + ('', ['*.txt', '*.rst']), + ('hello', ['*.msg']), + ), ( + "'package_data' must be a dictionary mapping package" + " names to lists of string wildcard patterns" + )), + # Invalid key type. + ({ + 400: ['*.txt', '*.rst'], + }, ( + "keys of 'package_data' dict must be strings (got 400)" + )), + # Invalid value type. + ({ + 'hello': str('*.msg'), + }, ( + "\"values of 'package_data' dict\" must be a list of strings (got '*.msg')" + )), + # Invalid value type (generators are single use) + ({ + 'hello': (x for x in "generator"), + }, ( + "\"values of 'package_data' dict\" must be a list of strings " + "(got <generator object" + )), +) + + +@pytest.mark.parametrize('package_data, expected_message', CHECK_PACKAGE_DATA_TESTS) +def test_check_package_data(package_data, expected_message): + if expected_message is None: + assert check_package_data(None, 'package_data', package_data) is None + else: + with pytest.raises(DistutilsSetupError, match=re.escape(expected_message)): + check_package_data(None, str('package_data'), package_data) |
