Commit 41eb0370 authored by Jason R. Coombs's avatar Jason R. Coombs

Merged pull request #151 - prep work for issue #450.

parents 3172bf95 a9c37399
import os
def build_files(file_defs, prefix=""):
"""
Build a set of files/directories, as described by the file_defs dictionary.
Each key/value pair in the dictionary is interpreted as a filename/contents
pair. If the contents value is a dictionary, a directory is created, and the
dictionary interpreted as the files within it, recursively.
For example:
{"README.txt": "A README file",
"foo": {
"__init__.py": "",
"bar": {
"__init__.py": "",
},
"baz.py": "# Some code",
}
}
"""
for name, contents in file_defs.items():
full_name = os.path.join(prefix, name)
if isinstance(contents, dict):
if not os.path.exists(full_name):
os.makedirs(full_name)
build_files(contents, prefix=full_name)
else:
with open(full_name, 'w') as f:
f.write(contents)
...@@ -4,6 +4,7 @@ import stat ...@@ -4,6 +4,7 @@ import stat
import pytest import pytest
from . import environment from . import environment
from .files import build_files
from .textwrap import DALS from .textwrap import DALS
from . import contexts from . import contexts
...@@ -26,14 +27,13 @@ class TestEggInfo(object): ...@@ -26,14 +27,13 @@ class TestEggInfo(object):
""") """)
def _create_project(self): def _create_project(self):
with open('setup.py', 'w') as f: build_files({
f.write(self.setup_script) 'setup.py': self.setup_script,
'hello.py': DALS("""
with open('hello.py', 'w') as f:
f.write(DALS("""
def run(): def run():
print('hello') print('hello')
""")) """)
})
@pytest.yield_fixture @pytest.yield_fixture
def env(self): def env(self):
...@@ -46,17 +46,48 @@ class TestEggInfo(object): ...@@ -46,17 +46,48 @@ class TestEggInfo(object):
for dirname in subs for dirname in subs
) )
list(map(os.mkdir, env.paths.values())) list(map(os.mkdir, env.paths.values()))
config = os.path.join(env.paths['home'], '.pydistutils.cfg') build_files({
with open(config, 'w') as f: env.paths['home']: {
f.write(DALS(""" '.pydistutils.cfg': DALS("""
[egg_info] [egg_info]
egg-base = %(egg-base)s egg-base = %(egg-base)s
""" % env.paths)) """ % env.paths)
}
})
yield env yield env
def test_egg_base_installed_egg_info(self, tmpdir_cwd, env): def test_egg_base_installed_egg_info(self, tmpdir_cwd, env):
self._create_project() self._create_project()
self._run_install_command(tmpdir_cwd, env)
_, actual = self._find_egg_info_files(env.paths['lib'])
expected = [
'PKG-INFO',
'SOURCES.txt',
'dependency_links.txt',
'entry_points.txt',
'not-zip-safe',
'top_level.txt',
]
assert sorted(actual) == expected
def test_manifest_template_is_read(self, tmpdir_cwd, env):
self._create_project()
build_files({
'MANIFEST.in': DALS("""
recursive-include docs *.rst
"""),
'docs': {
'usage.rst': "Run 'hi'",
}
})
self._run_install_command(tmpdir_cwd, env)
egg_info_dir, _ = self._find_egg_info_files(env.paths['lib'])
sources_txt = os.path.join(egg_info_dir, 'SOURCES.txt')
assert 'docs/usage.rst' in open(sources_txt).read().split('\n')
def _run_install_command(self, tmpdir_cwd, env):
environ = os.environ.copy().update( environ = os.environ.copy().update(
HOME=env.paths['home'], HOME=env.paths['home'],
) )
...@@ -76,21 +107,9 @@ class TestEggInfo(object): ...@@ -76,21 +107,9 @@ class TestEggInfo(object):
if code: if code:
raise AssertionError(data) raise AssertionError(data)
actual = self._find_egg_info_files(env.paths['lib'])
expected = [
'PKG-INFO',
'SOURCES.txt',
'dependency_links.txt',
'entry_points.txt',
'not-zip-safe',
'top_level.txt',
]
assert sorted(actual) == expected
def _find_egg_info_files(self, root): def _find_egg_info_files(self, root):
results = ( results = (
filenames (dirpath, filenames)
for dirpath, dirnames, filenames in os.walk(root) for dirpath, dirnames, filenames in os.walk(root)
if os.path.basename(dirpath) == 'EGG-INFO' if os.path.basename(dirpath) == 'EGG-INFO'
) )
......
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