diff --git a/setuptools/tests/test_wheel.py b/setuptools/tests/test_wheel.py
index b6be6f1f0..150ac4c1b 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,20 +167,17 @@ def __repr__(self):
setup_kwargs=dict(
packages=['foo'],
),
- install_tree=DALS(
- '''
- foo-1.0-py{py_version}.egg/
- |-- EGG-INFO/
- | |-- DESCRIPTION.rst
- | |-- PKG-INFO
- | |-- RECORD
- | |-- WHEEL
- | |-- metadata.json
- | |-- 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(
@@ -192,20 +199,19 @@ def __repr__(self):
setup_kwargs=dict(
data_files=[('data_dir', ['data.txt'])],
),
- install_tree=DALS(
- '''
- foo-1.0-py{py_version}.egg/
- |-- EGG-INFO/
- | |-- DESCRIPTION.rst
- | |-- PKG-INFO
- | |-- RECORD
- | |-- WHEEL
- | |-- metadata.json
- | |-- 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(
@@ -262,19 +268,17 @@ def __repr__(self):
sources=['extension.c'])
],
),
- install_tree=DALS(
- '''
- foo-1.0-py{py_version}-{platform}.egg/
- |-- extension{shlib_ext}
- |-- EGG-INFO/
- | |-- DESCRIPTION.rst
- | |-- PKG-INFO
- | |-- RECORD
- | |-- WHEEL
- | |-- metadata.json
- | |-- 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(
@@ -288,19 +292,17 @@ def __repr__(self):
setup_kwargs=dict(
headers=['header.h'],
),
- install_tree=DALS(
- '''
- foo-1.0-py{py_version}.egg/
- |-- header.h
- |-- EGG-INFO/
- | |-- DESCRIPTION.rst
- | |-- PKG-INFO
- | |-- RECORD
- | |-- WHEEL
- | |-- metadata.json
- | |-- 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(
@@ -322,38 +324,37 @@ def __repr__(self):
setup_kwargs=dict(
scripts=['script.py', 'script.sh'],
),
- install_tree=DALS(
- '''
- foo-1.0-py{py_version}.egg/
- |-- EGG-INFO/
- | |-- DESCRIPTION.rst
- | |-- PKG-INFO
- | |-- RECORD
- | |-- WHEEL
- | |-- metadata.json
- | |-- 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/
- | |-- DESCRIPTION.rst
- | |-- PKG-INFO
- | |-- RECORD
- | |-- WHEEL
- | |-- metadata.json
- | |-- 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
@@ -425,23 +426,22 @@ def __repr__(self):
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/
- | |-- DESCRIPTION.rst
- | |-- PKG-INFO
- | |-- RECORD
- | |-- WHEEL
- | |-- metadata.json
- | |-- 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(
@@ -462,22 +462,22 @@ def __repr__(self):
packages=['foo'],
data_files=[('foo/data_dir', ['foo/data_dir/data.txt'])],
),
- install_tree=DALS(
- '''
- foo-1.0-py{py_version}.egg/
- |-- EGG-INFO/
- | |-- DESCRIPTION.rst
- | |-- PKG-INFO
- | |-- RECORD
- | |-- WHEEL
- | |-- metadata.json
- | |-- 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',
+ ]}
+ ]
+ }
+ }),
),
)