Commit 41868fe7 authored by Jason R. Coombs's avatar Jason R. Coombs

Rewrite test to simply create the egg_info.

parent 25fc8c1d
...@@ -8,13 +8,10 @@ import subprocess ...@@ -8,13 +8,10 @@ import subprocess
import stat import stat
import pytest import pytest
import py
import pkg_resources import pkg_resources
from setuptools.tests.textwrap import DALS
from setuptools.tests import contexts
from setuptools.tests import environment
try: try:
unicode unicode
...@@ -120,88 +117,46 @@ class TestIndependence: ...@@ -120,88 +117,46 @@ class TestIndependence:
class TestEggInfoDistutils(object): class TestDeepVersionLookup(object):
version = '1.11.0.dev0+2329eae'
setup_script = DALS("""
from distutils.core import setup
setup(
name='foo',
py_modules=['hello'],
version='%s',
)
""")
def _create_project(self):
with open('setup.py', 'w') as f:
f.write(self.setup_script % self.version)
with open('hello.py', 'w') as f:
f.write(DALS("""
def run():
print('hello')
"""))
@pytest.yield_fixture @pytest.fixture
def env(self): def env(self, tmpdir):
"""
Create a package environment, similar to a virtualenv,
in which packages are installed.
"""
class Environment(str): class Environment(str):
pass pass
with contexts.tempdir(prefix='setuptools-test.') as env_dir:
env = Environment(env_dir) env = Environment(tmpdir)
os.chmod(env_dir, stat.S_IRWXU) tmpdir.chmod(stat.S_IRWXU)
subs = 'home', 'lib', 'scripts', 'data', 'egg-base' subs = 'home', 'lib', 'scripts', 'data', 'egg-base'
env.paths = dict( env.paths = dict(
(dirname, os.path.join(env_dir, dirname)) (dirname, str(tmpdir / dirname))
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') return env
with open(config, 'w') as f:
f.write(DALS(""" def create_foo_pkg(self, env, version):
[egg_info] """
egg-base = %(egg-base)s Create a foo package installed to env.paths['lib']
""" % env.paths)) as version.
yield env """
safe_version = pkg_resources.safe_version(version)
def test_version_resolved_from_egg_info(self, tmpdir_cwd, env): lib = py.path.local(env.paths['lib'])
self._create_project() egg_info = lib / 'foo-' + safe_version + '.egg-info'
egg_info.mkdir()
environ = os.environ.copy().update( pkg_info = egg_info / 'PKG_INFO'
HOME=env.paths['home'], with pkg_info.open('w') as strm:
) strm.write('version: ' + version)
cmd = [
'install', def test_version_resolved_from_egg_info(self, env):
'--home', env.paths['home'], version = '1.11.0.dev0+2329eae'
'--install-lib', env.paths['lib'], self.create_foo_pkg(env, version)
'--install-scripts', env.paths['scripts'],
'--install-data', env.paths['data'],
]
code, data = environment.run_setup_py(
cmd=cmd,
pypath=os.pathsep.join([env.paths['lib'], str(tmpdir_cwd)]),
data_stream=1,
env=environ,
)
if code:
raise AssertionError(data)
actual = self._find_egg_info_file(env.paths['lib'])
# On Py3k it can be e.g. foo-1.11.0.dev0_2329eae-py3.4.egg-info
# but 2.7 doesn't add the Python version, so to be expedient we
# just check our start and end, omitting the potential version num
assert actual.startswith('foo-' + self.version.replace('+', '_'))
assert actual.endswith('.egg-info')
# this requirement parsing will raise a VersionConflict unless the # this requirement parsing will raise a VersionConflict unless the
# .egg-info file is parsed (see #419 on BitBucket) # .egg-info file is parsed (see #419 on BitBucket)
req = pkg_resources.Requirement.parse('foo>=1.9') req = pkg_resources.Requirement.parse('foo>=1.9')
dist = pkg_resources.WorkingSet([env.paths['lib']]).find(req) dist = pkg_resources.WorkingSet([env.paths['lib']]).find(req)
assert dist.version == self.version assert dist.version == version
def _find_egg_info_file(self, root):
# expect exactly one result
result = (filename for dirpath, dirnames, filenames in os.walk(root)
for filename in filenames if filename.endswith('.egg-info'))
result, = result
return result
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