From bcddc3dd9aa2b436a4260d4345d4ab1c6d4363ca Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Mon, 7 Nov 2016 03:53:32 -0500 Subject: Add test capturing expectation for #250. --- setuptools/tests/test_develop.py | 73 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) (limited to 'setuptools/tests/test_develop.py') diff --git a/setuptools/tests/test_develop.py b/setuptools/tests/test_develop.py index 4cf483f2..bf162d8d 100644 --- a/setuptools/tests/test_develop.py +++ b/setuptools/tests/test_develop.py @@ -114,3 +114,76 @@ class TestDevelop: 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) + -- cgit v1.2.1 From fd623755cad7ee9fc1492029f4ebdde8ae6b1c1a Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Mon, 7 Nov 2016 04:03:42 -0500 Subject: pip can't accept -e and -t --- setuptools/tests/test_develop.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'setuptools/tests/test_develop.py') diff --git a/setuptools/tests/test_develop.py b/setuptools/tests/test_develop.py index bf162d8d..8e905357 100644 --- a/setuptools/tests/test_develop.py +++ b/setuptools/tests/test_develop.py @@ -160,6 +160,19 @@ class TestNamespaces: tmpl = '__import__("site").addsitedir({target_str!r})' sc.write_text(tmpl.format(**locals()), encoding='utf-8') + @staticmethod + def install_develop(src_dir, target): + + develop_cmd = [ + sys.executable, + 'setup.py', + 'develop', + '--install-dir', str(target), + ] + env = dict(PYTHONPATH=str(target)) + with src_dir.as_cwd(): + subprocess.check_call(develop_cmd, env=env) + def test_namespace_package_importable(self, tmpdir): """ Installing two packages sharing the same namespace, one installed @@ -174,11 +187,11 @@ class TestNamespaces: install_cmd = [ 'pip', 'install', - '-e', str(pkg_B), str(pkg_A), '-t', str(target), ] subprocess.check_call(install_cmd) + self.install_develop(pkg_B, target) self.make_site_dir(target) try_import = [ sys.executable, -- cgit v1.2.1 From 3caf0231808268654570492a0623e72b22988243 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Mon, 7 Nov 2016 04:08:04 -0500 Subject: Move imports to top and use absolute_import for Python 2.7 compatibility --- setuptools/tests/test_develop.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'setuptools/tests/test_develop.py') diff --git a/setuptools/tests/test_develop.py b/setuptools/tests/test_develop.py index 8e905357..d6c24219 100644 --- a/setuptools/tests/test_develop.py +++ b/setuptools/tests/test_develop.py @@ -1,9 +1,14 @@ """develop tests """ + +from __future__ import absolute_import + import os import site import sys import io +import textwrap +import subprocess from setuptools.extern import six @@ -116,10 +121,6 @@ class TestDevelop: # assert '0.0' not in foocmd_text -import textwrap -import subprocess - - class TestNamespaces: @staticmethod def build_namespace_package(tmpdir, name): -- cgit v1.2.1 From d580f089b95b58a9a414faa8ed35419e71c995e1 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Mon, 7 Nov 2016 04:08:49 -0500 Subject: Use unicode literals for Python 2.7 compatibility --- setuptools/tests/test_develop.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'setuptools/tests/test_develop.py') diff --git a/setuptools/tests/test_develop.py b/setuptools/tests/test_develop.py index d6c24219..fb8e0e3f 100644 --- a/setuptools/tests/test_develop.py +++ b/setuptools/tests/test_develop.py @@ -1,7 +1,7 @@ """develop tests """ -from __future__ import absolute_import +from __future__ import absolute_import, unicode_literals import os import site -- cgit v1.2.1 From 8c055ff64792c23e80f85f4c127d003fd2ae4b7d Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sun, 11 Dec 2016 20:48:07 -0500 Subject: Mark another test to fail. Ref #851 --- setuptools/tests/test_develop.py | 2 ++ 1 file changed, 2 insertions(+) (limited to 'setuptools/tests/test_develop.py') diff --git a/setuptools/tests/test_develop.py b/setuptools/tests/test_develop.py index e0227453..d1e40929 100644 --- a/setuptools/tests/test_develop.py +++ b/setuptools/tests/test_develop.py @@ -136,6 +136,8 @@ class TestNamespaces: with src_dir.as_cwd(): subprocess.check_call(develop_cmd, env=env) + @pytest.mark.skipif(bool(os.environ.get("APPVEYOR")), + reason="https://github.com/pypa/setuptools/issues/851") def test_namespace_package_importable(self, tmpdir): """ Installing two packages sharing the same namespace, one installed -- cgit v1.2.1 From d9c9284e19ce475c2366b279dd4db82a2751a571 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Mon, 12 Dec 2016 21:14:34 -0500 Subject: Additionally, in test_develop, ensure that pkg_resources is importable. Ref #885. --- setuptools/tests/test_develop.py | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'setuptools/tests/test_develop.py') diff --git a/setuptools/tests/test_develop.py b/setuptools/tests/test_develop.py index d1e40929..430a07e6 100644 --- a/setuptools/tests/test_develop.py +++ b/setuptools/tests/test_develop.py @@ -165,3 +165,9 @@ class TestNamespaces: env = dict(PYTHONPATH=str(target)) subprocess.check_call(try_import, env=env) + # additionally ensure that pkg_resources import works + pkg_resources_imp = [ + sys.executable, + '-c', 'import pkg_resources', + ] + subprocess.check_call(pkg_resources_imp, env=env) -- cgit v1.2.1 From 7a1c700e16523ad07532bea2ed87718fe29d3595 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Thu, 22 Dec 2016 09:31:40 -0500 Subject: Re-use test.paths_on_pythonpath to extend the PYTHONPATH variable rather than erasing it. When tests are run under pytest-runner (or other setup.py test invocations), the PYTHONPATH is carefully curated to include dependencies and the project under test. Overwriting PYTHONPATH will break tests in those environments. Fixes #884. --- setuptools/tests/test_develop.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'setuptools/tests/test_develop.py') diff --git a/setuptools/tests/test_develop.py b/setuptools/tests/test_develop.py index 430a07e6..5dd72aae 100644 --- a/setuptools/tests/test_develop.py +++ b/setuptools/tests/test_develop.py @@ -10,6 +10,7 @@ import io import subprocess from setuptools.extern import six +from setuptools.command import test import pytest @@ -132,9 +133,9 @@ class TestNamespaces: 'develop', '--install-dir', str(target), ] - env = dict(PYTHONPATH=str(target)) with src_dir.as_cwd(): - subprocess.check_call(develop_cmd, env=env) + with test.test.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") @@ -162,12 +163,13 @@ class TestNamespaces: sys.executable, '-c', 'import myns.pkgA; import myns.pkgB', ] - env = dict(PYTHONPATH=str(target)) - subprocess.check_call(try_import, env=env) + with test.test.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', ] - subprocess.check_call(pkg_resources_imp, env=env) + with test.test.paths_on_pythonpath([str(target)]): + subprocess.check_call(pkg_resources_imp) -- cgit v1.2.1 From ff371f18f0076bc63da05334f7e551c1cc29e10d Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sun, 1 Jan 2017 22:34:28 -0500 Subject: Strip out vendored packages and require them instead. Ref #581. --- setuptools/tests/test_develop.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'setuptools/tests/test_develop.py') diff --git a/setuptools/tests/test_develop.py b/setuptools/tests/test_develop.py index 5dd72aae..3b1b1e2d 100644 --- a/setuptools/tests/test_develop.py +++ b/setuptools/tests/test_develop.py @@ -9,7 +9,7 @@ import sys import io import subprocess -from setuptools.extern import six +import six from setuptools.command import test import pytest -- cgit v1.2.1 From ba15c9294488451900766898865c024dad2bf2be Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Tue, 24 Jan 2017 10:23:51 -0500 Subject: Add tests for _resolve_setup_path, including one that elicits the error reported in #913. --- setuptools/tests/test_develop.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'setuptools/tests/test_develop.py') diff --git a/setuptools/tests/test_develop.py b/setuptools/tests/test_develop.py index 3b1b1e2d..54e199c3 100644 --- a/setuptools/tests/test_develop.py +++ b/setuptools/tests/test_develop.py @@ -122,6 +122,22 @@ class TestDevelop: # assert '0.0' not in foocmd_text +class TestResolver: + """ + TODO: These tests were written with a minimal understanding + of what _resolve_setup_path is intending to do. Come up with + more meaningful cases that look like real-world scenarios. + """ + def test_resolve_setup_path_cwd(self): + assert develop._resolve_setup_path('.', '.', '.') == '.' + + def test_resolve_setup_path_one_dir(self): + assert develop._resolve_setup_path('pkgs', '.', 'pkgs') == '../' + + def test_resolve_setup_path_one_dir_trailing_slash(self): + assert develop._resolve_setup_path('pkgs/', '.', 'pkgs') == '../' + + class TestNamespaces: @staticmethod -- cgit v1.2.1 From 3d0cc355fb5e8012cb8c72f0e25042a5a44f31d6 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Fri, 24 Feb 2017 11:49:51 -0500 Subject: Revert "Merge pull request #933 from pypa/feature/581-depend-not-bundle" This reverts commit 089cdeb489a0fa94d11b7307b54210ef9aa40511, reversing changes made to aaec654d804cb78dbb6391afff721a63f26a71cd. --- setuptools/tests/test_develop.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'setuptools/tests/test_develop.py') diff --git a/setuptools/tests/test_develop.py b/setuptools/tests/test_develop.py index 54e199c3..ad7cfa05 100644 --- a/setuptools/tests/test_develop.py +++ b/setuptools/tests/test_develop.py @@ -9,7 +9,7 @@ import sys import io import subprocess -import six +from setuptools.extern import six from setuptools.command import test import pytest -- cgit v1.2.1