Commit ed3762fc authored by Paul Ganssle's avatar Paul Ganssle

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.
parent 41882016
......@@ -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',
]}
]
}
}),
),
)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment