You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			113 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			113 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
"""develop tests"""
 | 
						|
 | 
						|
import os
 | 
						|
import platform
 | 
						|
import subprocess
 | 
						|
import sys
 | 
						|
 | 
						|
import pytest
 | 
						|
 | 
						|
from setuptools._path import paths_on_pythonpath
 | 
						|
 | 
						|
from . import contexts, namespaces
 | 
						|
 | 
						|
SETUP_PY = """\
 | 
						|
from setuptools import setup
 | 
						|
 | 
						|
setup(name='foo',
 | 
						|
    packages=['foo'],
 | 
						|
)
 | 
						|
"""
 | 
						|
 | 
						|
INIT_PY = """print "foo"
 | 
						|
"""
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def temp_user(monkeypatch):
 | 
						|
    with contexts.tempdir() as user_base:
 | 
						|
        with contexts.tempdir() as user_site:
 | 
						|
            monkeypatch.setattr('site.USER_BASE', user_base)
 | 
						|
            monkeypatch.setattr('site.USER_SITE', user_site)
 | 
						|
            yield
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_env(tmpdir, temp_user):
 | 
						|
    target = tmpdir
 | 
						|
    foo = target.mkdir('foo')
 | 
						|
    setup = target / 'setup.py'
 | 
						|
    if setup.isfile():
 | 
						|
        raise ValueError(dir(target))
 | 
						|
    with setup.open('w') as f:
 | 
						|
        f.write(SETUP_PY)
 | 
						|
    init = foo / '__init__.py'
 | 
						|
    with init.open('w') as f:
 | 
						|
        f.write(INIT_PY)
 | 
						|
    with target.as_cwd():
 | 
						|
        yield target
 | 
						|
 | 
						|
 | 
						|
class TestNamespaces:
 | 
						|
    @staticmethod
 | 
						|
    def install_develop(src_dir, target):
 | 
						|
        develop_cmd = [
 | 
						|
            sys.executable,
 | 
						|
            'setup.py',
 | 
						|
            'develop',
 | 
						|
            '--install-dir',
 | 
						|
            str(target),
 | 
						|
        ]
 | 
						|
        with src_dir.as_cwd():
 | 
						|
            with paths_on_pythonpath([str(target)]):
 | 
						|
                subprocess.check_call(develop_cmd)
 | 
						|
 | 
						|
    @pytest.mark.skipif(
 | 
						|
        bool(os.environ.get("APPVEYOR")),
 | 
						|
        reason="https://github.com/pypa/setuptools/issues/851",
 | 
						|
    )
 | 
						|
    @pytest.mark.skipif(
 | 
						|
        platform.python_implementation() == 'PyPy',
 | 
						|
        reason="https://github.com/pypa/setuptools/issues/1202",
 | 
						|
    )
 | 
						|
    @pytest.mark.uses_network
 | 
						|
    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 = namespaces.build_namespace_package(tmpdir, 'myns.pkgA')
 | 
						|
        pkg_B = namespaces.build_namespace_package(tmpdir, 'myns.pkgB')
 | 
						|
        target = tmpdir / 'packages'
 | 
						|
        # use pip to install to the target directory
 | 
						|
        install_cmd = [
 | 
						|
            sys.executable,
 | 
						|
            '-m',
 | 
						|
            'pip',
 | 
						|
            'install',
 | 
						|
            str(pkg_A),
 | 
						|
            '-t',
 | 
						|
            str(target),
 | 
						|
        ]
 | 
						|
        subprocess.check_call(install_cmd)
 | 
						|
        self.install_develop(pkg_B, target)
 | 
						|
        namespaces.make_site_dir(target)
 | 
						|
        try_import = [
 | 
						|
            sys.executable,
 | 
						|
            '-c',
 | 
						|
            'import myns.pkgA; import myns.pkgB',
 | 
						|
        ]
 | 
						|
        with paths_on_pythonpath([str(target)]):
 | 
						|
            subprocess.check_call(try_import)
 | 
						|
 | 
						|
        # additionally ensure that pkg_resources import works
 | 
						|
        pkg_resources_imp = [
 | 
						|
            sys.executable,
 | 
						|
            '-c',
 | 
						|
            'import pkg_resources',
 | 
						|
        ]
 | 
						|
        with paths_on_pythonpath([str(target)]):
 | 
						|
            subprocess.check_call(pkg_resources_imp)
 |