Skip to content

Commit

Permalink
Add test capturing expectation for #250.
Browse files Browse the repository at this point in the history
  • Loading branch information
jaraco committed Nov 7, 2016
1 parent 3556032 commit bcddc3d
Showing 1 changed file with 73 additions and 0 deletions.
73 changes: 73 additions & 0 deletions setuptools/tests/test_develop.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,3 +114,76 @@ def test_console_scripts(self, tmpdir):
cmd.install_dir = tmpdir
cmd.run()
# assert '0.0' not in foocmd_text


import textwrap
import subprocess


class TestNamespaces:
@staticmethod
def build_namespace_package(tmpdir, name):
src_dir = tmpdir / name
src_dir.mkdir()
setup_py = src_dir / 'setup.py'
namespace, sep, rest = name.partition('.')
script = textwrap.dedent("""
import setuptools
setuptools.setup(
name={name!r},
version="1.0",
namespace_packages=[{namespace!r}],
packages=[{namespace!r}],
)
""").format(**locals())
setup_py.write_text(script, encoding='utf-8')
ns_pkg_dir = src_dir / namespace
ns_pkg_dir.mkdir()
pkg_init = ns_pkg_dir / '__init__.py'
tmpl = '__import__("pkg_resources").declare_namespace({namespace!r})'
decl = tmpl.format(**locals())
pkg_init.write_text(decl, encoding='utf-8')
pkg_mod = ns_pkg_dir / (rest + '.py')
some_functionality = 'name = {rest!r}'.format(**locals())
pkg_mod.write_text(some_functionality, encoding='utf-8')
return src_dir

@staticmethod
def make_site_dir(target):
"""
Add a sitecustomize.py module in target to cause
target to be added to site dirs such that .pth files
are processed there.
"""
sc = target / 'sitecustomize.py'
target_str = str(target)
tmpl = '__import__("site").addsitedir({target_str!r})'
sc.write_text(tmpl.format(**locals()), encoding='utf-8')

def test_namespace_package_importable(self, tmpdir):
"""
Installing two packages sharing the same namespace, one installed
naturally using pip or `--single-version-externally-managed`
and the other installed using `develop` should leave the namespace
in tact and both packages reachable by import.
"""
pkg_A = self.build_namespace_package(tmpdir, 'myns.pkgA')
pkg_B = self.build_namespace_package(tmpdir, 'myns.pkgB')
target = tmpdir / 'packages'
# use pip to install to the target directory
install_cmd = [
'pip',
'install',
'-e', str(pkg_B),
str(pkg_A),
'-t', str(target),
]
subprocess.check_call(install_cmd)
self.make_site_dir(target)
try_import = [
sys.executable,
'-c', 'import myns.pkgA; import myns.pkgB',
]
env = dict(PYTHONPATH=str(target))
subprocess.check_call(try_import, env=env)

0 comments on commit bcddc3d

Please sign in to comment.