Skip to content

Commit 235c168

Browse files
committed
Rework PipTestResult for detection of modern editables
1 parent b8abef7 commit 235c168

File tree

5 files changed

+38
-69
lines changed

5 files changed

+38
-69
lines changed

tests/functional/test_install.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -437,7 +437,9 @@ def test_install_editable_uninstalls_existing(
437437
to_install = data.packages.joinpath("pip_test_package-0.1.tar.gz")
438438
result = script.pip_install_local(to_install)
439439
assert "Successfully installed pip-test-package" in result.stdout
440-
result.assert_installed("piptestpackage", editable=False)
440+
result.assert_installed(
441+
"piptestpackage", dist_name="pip-test-package", editable=False
442+
)
441443

442444
result = script.pip(
443445
"install",
@@ -449,7 +451,9 @@ def test_install_editable_uninstalls_existing(
449451
)
450452
),
451453
)
452-
result.assert_installed("pip-test-package", with_files=[".git"])
454+
result.assert_installed(
455+
"piptestpackage", dist_name="pip-test-package", with_files=[".git"]
456+
)
453457
assert "Found existing installation: pip-test-package 0.1" in result.stdout
454458
assert "Uninstalling pip-test-package-" in result.stdout
455459
assert "Successfully uninstalled pip-test-package" in result.stdout

tests/functional/test_install_user.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ def test_install_subversion_usersite_editable_with_distribute(
7575
)
7676
),
7777
)
78-
result.assert_installed("INITools", use_user_site=True)
78+
result.assert_installed("INITools")
7979

8080
def test_install_from_current_directory_into_usersite(
8181
self, script: PipTestEnvironment, data: TestData

tests/functional/test_install_vcs_git.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,9 @@ def test_install_editable_from_git_with_https(
183183
url_path = "pypa/pip-test-package.git"
184184
local_url = _github_checkout(url_path, tmpdir, egg="pip-test-package")
185185
result = script.pip("install", "-e", local_url)
186-
result.assert_installed("pip-test-package", with_files=[".git"])
186+
result.assert_installed(
187+
"piptestpackage", dist_name="pip-test-package", with_files=[".git"]
188+
)
187189

188190

189191
@pytest.mark.network
@@ -193,11 +195,12 @@ def test_install_noneditable_git(script: PipTestEnvironment) -> None:
193195
"""
194196
result = script.pip(
195197
"install",
196-
"git+https://github.com/pypa/pip-test-package.git"
197-
"@0.1.1#egg=pip-test-package",
198+
"git+https://github.com/pypa/[email protected]#egg=pip-test-package",
198199
)
199200
dist_info_folder = script.site_packages / "pip_test_package-0.1.1.dist-info"
200-
result.assert_installed("piptestpackage", without_egg_link=True, editable=False)
201+
result.assert_installed(
202+
"piptestpackage", dist_name="pip-test-package", editable=False
203+
)
201204
result.did_create(dist_info_folder)
202205

203206

tests/functional/test_install_wheel.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,15 @@ def test_install_from_future_wheel_version(
3838

3939
result = script.pip("install", package, "--no-index", expect_error=True)
4040
with pytest.raises(TestFailure):
41-
result.assert_installed("futurewheel", without_egg_link=True, editable=False)
41+
result.assert_installed("futurewheel", editable=False)
4242

4343
package = make_wheel_with_file(
4444
name="futurewheel",
4545
version="1.9",
4646
wheel_metadata_updates={"Wheel-Version": "1.9"},
4747
).save_to_dir(tmpdir)
4848
result = script.pip("install", package, "--no-index", expect_stderr=True)
49-
result.assert_installed("futurewheel", without_egg_link=True, editable=False)
49+
result.assert_installed("futurewheel", editable=False)
5050

5151

5252
@pytest.mark.parametrize(
@@ -67,7 +67,7 @@ def test_install_from_broken_wheel(
6767
package = data.packages.joinpath(wheel_name)
6868
result = script.pip("install", package, "--no-index", expect_error=True)
6969
with pytest.raises(TestFailure):
70-
result.assert_installed("futurewheel", without_egg_link=True, editable=False)
70+
result.assert_installed("futurewheel", editable=False)
7171

7272

7373
def test_basic_install_from_wheel(

tests/lib/__init__.py

Lines changed: 21 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
from pip._internal.models.selection_prefs import SelectionPreferences
3535
from pip._internal.models.target_python import TargetPython
3636
from pip._internal.network.session import PipSession
37-
from pip._internal.utils.egg_link import _egg_link_names
3837

3938
from tests.lib.venv import VirtualEnvironment
4039
from tests.lib.wheel import make_wheel
@@ -294,12 +293,6 @@ def files_updated(self) -> FoundFiles:
294293
def files_deleted(self) -> FoundFiles:
295294
return FoundFiles(self._impl.files_deleted)
296295

297-
def _get_egg_link_path_created(self, egg_link_paths: list[str]) -> str | None:
298-
for egg_link_path in egg_link_paths:
299-
if egg_link_path in self.files_created:
300-
return egg_link_path
301-
return None
302-
303296
def get_created_direct_url_path(self, pkg: str) -> Path | None:
304297
dist_info_prefix = canonicalize_name(pkg).replace("-", "_") + "-"
305298
for filename in self.files_created:
@@ -321,81 +314,50 @@ def get_created_direct_url(self, pkg: str) -> DirectUrl | None:
321314
def assert_installed(
322315
self,
323316
pkg_name: str,
317+
*,
318+
dist_name: str | None = None,
324319
editable: bool = True,
320+
editable_vcs: bool = True,
325321
with_files: list[str] | None = None,
326322
without_files: list[str] | None = None,
327-
without_egg_link: bool = False,
328-
use_user_site: bool = False,
329323
sub_dir: str | None = None,
330324
) -> None:
325+
if dist_name is None:
326+
dist_name = pkg_name
331327
with_files = with_files or []
332328
without_files = without_files or []
333329
e = self.test_env
334330

335-
if editable:
331+
if editable and editable_vcs:
336332
pkg_dir = e.venv / "src" / canonicalize_name(dist_name)
337333
# If package was installed in a sub directory
338334
if sub_dir:
339335
pkg_dir = pkg_dir / sub_dir
336+
elif editable and not editable_vcs:
337+
pkg_dir = None
338+
assert not with_files
339+
assert not without_files
340340
else:
341-
without_egg_link = True
342341
pkg_dir = e.site_packages / pkg_name
343342

344-
if use_user_site:
345-
egg_link_paths = [
346-
e.user_site / egg_link_name
347-
for egg_link_name in _egg_link_names(pkg_name)
348-
]
349-
else:
350-
egg_link_paths = [
351-
e.site_packages / egg_link_name
352-
for egg_link_name in _egg_link_names(pkg_name)
353-
]
354-
355-
egg_link_path_created = self._get_egg_link_path_created(egg_link_paths)
356-
if without_egg_link:
357-
if egg_link_path_created:
343+
direct_url = self.get_created_direct_url(dist_name)
344+
if not editable:
345+
if direct_url and direct_url.is_local_editable():
358346
raise TestFailure(
359-
f"unexpected egg link file created: {egg_link_path_created!r}\n"
347+
"unexpected editable direct_url.json created: "
348+
f"{self.get_created_direct_url_path(dist_name)!r}\n"
360349
f"{self}"
361350
)
362351
else:
363-
if not egg_link_path_created:
364-
raise TestFailure(
365-
f"expected egg link file missing: {egg_link_paths!r}\n{self}"
366-
)
367-
368-
egg_link_file = self.files_created[egg_link_path_created]
369-
egg_link_contents = egg_link_file.bytes.replace(os.linesep, "\n")
370-
371-
# FIXME: I don't understand why there's a trailing . here
372-
if not (
373-
egg_link_contents.endswith("\n.")
374-
and egg_link_contents[:-2].endswith(os.fspath(pkg_dir))
375-
):
376-
expected_ending = f"{pkg_dir}\n."
352+
if not direct_url or not direct_url.is_local_editable():
377353
raise TestFailure(
378-
textwrap.dedent(
379-
f"""
380-
Incorrect egg_link file {egg_link_file!r}
381-
Expected ending: {expected_ending!r}
382-
------- Actual contents -------
383-
{egg_link_contents!r}
384-
-------------------------------
385-
"""
386-
).strip()
354+
f"{dist_name!r} not installed as editable: direct_url.json "
355+
"not found or not editable\n"
356+
f"{self.get_created_direct_url_path(dist_name)!r}\n"
357+
f"{self}"
387358
)
388359

389-
if use_user_site:
390-
pth_file = e.user_site / "easy-install.pth"
391-
else:
392-
pth_file = e.site_packages / "easy-install.pth"
393-
394-
if (pth_file in self.files_updated) == without_egg_link:
395-
maybe = "" if without_egg_link else "not "
396-
raise TestFailure(f"{pth_file} unexpectedly {maybe}updated by install")
397-
398-
if (pkg_dir in self.files_created) == (os.curdir in without_files):
360+
if pkg_dir and (pkg_dir in self.files_created) == (os.curdir in without_files):
399361
maybe = "not " if os.curdir in without_files else ""
400362
files = sorted(p.as_posix() for p in self.files_created)
401363
raise TestFailure(

0 commit comments

Comments
 (0)