aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Ganssle <paul@ganssle.io>2018-04-07 13:38:31 -0400
committerPaul Ganssle <paul@ganssle.io>2018-04-07 13:38:37 -0400
commited3762fc7d16174a54b2fa83af1996decafd756f (patch)
treea95132e97ed3faa3e17679ac1265d1cd41721feb
parent41882016dbd6b334e6e10e2c3ac5afb9f5793ede (diff)
downloadexternal_python_setuptools-ed3762fc7d16174a54b2fa83af1996decafd756f.tar.gz
external_python_setuptools-ed3762fc7d16174a54b2fa83af1996decafd756f.tar.bz2
external_python_setuptools-ed3762fc7d16174a54b2fa83af1996decafd756f.zip
Switch test_wheel over to subset-based test
This is both compatible with the old version of wheel (last one supported under Python 3.3) and is more in line with our commitment, which is that the wheel install provides at least these files.
-rw-r--r--setuptools/tests/test_wheel.py268
1 files changed, 142 insertions, 126 deletions
diff --git a/setuptools/tests/test_wheel.py b/setuptools/tests/test_wheel.py
index d8d5ddb2..150ac4c1 100644
--- a/setuptools/tests/test_wheel.py
+++ b/setuptools/tests/test_wheel.py
@@ -92,39 +92,49 @@ def build_wheel(extra_file_defs=None, **kwargs):
yield glob.glob(os.path.join(source_dir, 'dist', '*.whl'))[0]
-def tree(root):
- def depth(path):
- return len(path.split(os.path.sep))
- def prefix(path_depth):
- if not path_depth:
- return ''
- return '| ' * (path_depth - 1) + '|-- '
- lines = []
- root_depth = depth(root)
+def tree_set(root):
+ contents = set()
for dirpath, dirnames, filenames in os.walk(root):
- dirnames.sort()
- filenames.sort()
- dir_depth = depth(dirpath) - root_depth
- if dir_depth > 0:
- lines.append('%s%s/' % (prefix(dir_depth - 1),
- os.path.basename(dirpath)))
- for f in filenames:
- lines.append('%s%s' % (prefix(dir_depth), f))
- return '\n'.join(lines) + '\n'
-
-
-def _check_wheel_install(filename, install_dir, install_tree,
+ for filename in filenames:
+ contents.add(os.path.join(os.path.relpath(dirpath, root),
+ filename))
+ return contents
+
+
+def flatten_tree(tree):
+ """Flatten nested dicts and lists into a full list of paths"""
+ output = set()
+ for node, contents in tree.items():
+ if isinstance(contents, dict):
+ contents = flatten_tree(contents)
+
+ for elem in contents:
+ if isinstance(elem, dict):
+ output |= {os.path.join(node, val)
+ for val in flatten_tree(elem)}
+ else:
+ output.add(os.path.join(node, elem))
+ return output
+
+
+def format_install_tree(tree):
+ return {x.format(
+ py_version=PY_MAJOR,
+ platform=get_platform(),
+ shlib_ext=get_config_var('EXT_SUFFIX') or get_config_var('SO'))
+ for x in tree}
+
+
+def _check_wheel_install(filename, install_dir, install_tree_includes,
project_name, version, requires_txt):
w = Wheel(filename)
egg_path = os.path.join(install_dir, w.egg_name())
w.install_as_egg(egg_path)
- if install_tree is not None:
- install_tree = install_tree.format(
- py_version=PY_MAJOR,
- platform=get_platform(),
- shlib_ext=get_config_var('EXT_SUFFIX') or get_config_var('SO')
- )
- assert install_tree == tree(install_dir)
+ if install_tree_includes is not None:
+ install_tree = format_install_tree(install_tree_includes)
+ exp = tree_set(install_dir)
+ assert install_tree.issubset(exp), (install_tree - exp)
+
metadata = PathMetadata(egg_path, os.path.join(egg_path, 'EGG-INFO'))
dist = Distribution.from_filename(egg_path, metadata=metadata)
assert dist.project_name == project_name
@@ -157,18 +167,17 @@ WHEEL_INSTALL_TESTS = (
setup_kwargs=dict(
packages=['foo'],
),
- install_tree=DALS(
- '''
- foo-1.0-py{py_version}.egg/
- |-- EGG-INFO/
- | |-- PKG-INFO
- | |-- RECORD
- | |-- WHEEL
- | |-- top_level.txt
- |-- foo/
- | |-- __init__.py
- '''
- ),
+ install_tree=flatten_tree({
+ 'foo-1.0-py{py_version}.egg': {
+ 'EGG-INFO': [
+ 'PKG-INFO',
+ 'RECORD',
+ 'WHEEL',
+ 'top_level.txt'
+ ],
+ 'foo': ['__init__.py']
+ }
+ }),
),
dict(
@@ -190,18 +199,19 @@ WHEEL_INSTALL_TESTS = (
setup_kwargs=dict(
data_files=[('data_dir', ['data.txt'])],
),
- install_tree=DALS(
- '''
- foo-1.0-py{py_version}.egg/
- |-- EGG-INFO/
- | |-- PKG-INFO
- | |-- RECORD
- | |-- WHEEL
- | |-- top_level.txt
- |-- data_dir/
- | |-- data.txt
- '''
- ),
+ install_tree=flatten_tree({
+ 'foo-1.0-py{py_version}.egg': {
+ 'EGG-INFO': [
+ 'PKG-INFO',
+ 'RECORD',
+ 'WHEEL',
+ 'top_level.txt'
+ ],
+ 'data_dir': [
+ 'data.txt'
+ ]
+ }
+ }),
),
dict(
@@ -258,17 +268,17 @@ WHEEL_INSTALL_TESTS = (
sources=['extension.c'])
],
),
- install_tree=DALS(
- '''
- foo-1.0-py{py_version}-{platform}.egg/
- |-- extension{shlib_ext}
- |-- EGG-INFO/
- | |-- PKG-INFO
- | |-- RECORD
- | |-- WHEEL
- | |-- top_level.txt
- '''
- ),
+ install_tree=flatten_tree({
+ 'foo-1.0-py{py_version}-{platform}.egg': [
+ 'extension{shlib_ext}',
+ {'EGG-INFO': [
+ 'PKG-INFO',
+ 'RECORD',
+ 'WHEEL',
+ 'top_level.txt',
+ ]},
+ ]
+ }),
),
dict(
@@ -282,17 +292,17 @@ WHEEL_INSTALL_TESTS = (
setup_kwargs=dict(
headers=['header.h'],
),
- install_tree=DALS(
- '''
- foo-1.0-py{py_version}.egg/
- |-- header.h
- |-- EGG-INFO/
- | |-- PKG-INFO
- | |-- RECORD
- | |-- WHEEL
- | |-- top_level.txt
- '''
- ),
+ install_tree=flatten_tree({
+ 'foo-1.0-py{py_version}.egg': [
+ 'header.h',
+ {'EGG-INFO': [
+ 'PKG-INFO',
+ 'RECORD',
+ 'WHEEL',
+ 'top_level.txt',
+ ]},
+ ]
+ }),
),
dict(
@@ -314,34 +324,37 @@ WHEEL_INSTALL_TESTS = (
setup_kwargs=dict(
scripts=['script.py', 'script.sh'],
),
- install_tree=DALS(
- '''
- foo-1.0-py{py_version}.egg/
- |-- EGG-INFO/
- | |-- PKG-INFO
- | |-- RECORD
- | |-- WHEEL
- | |-- top_level.txt
- | |-- scripts/
- | | |-- script.py
- | | |-- script.sh
- '''
- ),
+ install_tree=flatten_tree({
+ 'foo-1.0-py{py_version}.egg': {
+ 'EGG-INFO': [
+ 'PKG-INFO',
+ 'RECORD',
+ 'WHEEL',
+ 'top_level.txt',
+ {'scripts': [
+ 'script.py',
+ 'script.sh'
+ ]}
+
+ ]
+ }
+ })
),
dict(
id='requires1',
install_requires='foobar==2.0',
- install_tree=DALS(
- '''
- foo-1.0-py{py_version}.egg/
- |-- EGG-INFO/
- | |-- PKG-INFO
- | |-- RECORD
- | |-- WHEEL
- | |-- requires.txt
- | |-- top_level.txt
- '''),
+ install_tree=flatten_tree({
+ 'foo-1.0-py{py_version}.egg': {
+ 'EGG-INFO': [
+ 'PKG-INFO',
+ 'RECORD',
+ 'WHEEL',
+ 'requires.txt',
+ 'top_level.txt',
+ ]
+ }
+ }),
requires_txt=DALS(
'''
foobar==2.0
@@ -413,21 +426,22 @@ WHEEL_INSTALL_TESTS = (
namespace_packages=['foo'],
packages=['foo.bar'],
),
- install_tree=DALS(
- '''
- foo-1.0-py{py_version}.egg/
- |-- foo-1.0-py{py_version}-nspkg.pth
- |-- EGG-INFO/
- | |-- PKG-INFO
- | |-- RECORD
- | |-- WHEEL
- | |-- namespace_packages.txt
- | |-- top_level.txt
- |-- foo/
- | |-- __init__.py
- | |-- bar/
- | | |-- __init__.py
- '''),
+ install_tree=flatten_tree({
+ 'foo-1.0-py{py_version}.egg': [
+ 'foo-1.0-py{py_version}-nspkg.pth',
+ {'EGG-INFO': [
+ 'PKG-INFO',
+ 'RECORD',
+ 'WHEEL',
+ 'namespace_packages.txt',
+ 'top_level.txt',
+ ]},
+ {'foo': [
+ '__init__.py',
+ {'bar': ['__init__.py']},
+ ]},
+ ]
+ }),
),
dict(
@@ -448,20 +462,22 @@ WHEEL_INSTALL_TESTS = (
packages=['foo'],
data_files=[('foo/data_dir', ['foo/data_dir/data.txt'])],
),
- install_tree=DALS(
- '''
- foo-1.0-py{py_version}.egg/
- |-- EGG-INFO/
- | |-- PKG-INFO
- | |-- RECORD
- | |-- WHEEL
- | |-- top_level.txt
- |-- foo/
- | |-- __init__.py
- | |-- data_dir/
- | | |-- data.txt
- '''
- ),
+ install_tree=flatten_tree({
+ 'foo-1.0-py{py_version}.egg': {
+ 'EGG-INFO': [
+ 'PKG-INFO',
+ 'RECORD',
+ 'WHEEL',
+ 'top_level.txt',
+ ],
+ 'foo': [
+ '__init__.py',
+ {'data_dir': [
+ 'data.txt',
+ ]}
+ ]
+ }
+ }),
),
)