@@ -407,6 +407,74 @@ def test_venv_changed_name_posix(self):
407407 actual = getpath(ns, expected)
408408 self.assertEqual(expected, actual)
409409
410+ def test_venv_relocated_base_installation_posix(self):
411+ "Test a venv whose base installation was relocated from PREFIX."
412+ ns = MockPosixNamespace(
413+ argv0="/venv/bin/python",
414+ PREFIX="/build/install",
415+ )
416+ ns.add_known_xfile("/relocated/bin/python3")
417+ ns.add_known_xfile("/public/bin/python")
418+ ns.add_known_link("/public/bin/python", "/relocated/bin/python3")
419+ ns.add_known_xfile("/venv/bin/python")
420+ ns.add_known_link("/venv/bin/python", "/public/bin/python")
421+ ns.add_known_file("/relocated/lib/python9.8/os.py")
422+ ns.add_known_dir("/relocated/lib/python9.8/lib-dynload")
423+ ns.add_known_file("/venv/pyvenv.cfg", [
424+ "home = /public/bin",
425+ ])
426+ expected = dict(
427+ executable="/venv/bin/python",
428+ prefix="/venv",
429+ exec_prefix="/venv",
430+ base_executable="/relocated/bin/python3",
431+ base_prefix="/relocated",
432+ base_exec_prefix="/relocated",
433+ module_search_paths_set=1,
434+ module_search_paths=[
435+ "/relocated/lib/python98.zip",
436+ "/relocated/lib/python9.8",
437+ "/relocated/lib/python9.8/lib-dynload",
438+ ],
439+ )
440+ actual = getpath(ns, expected)
441+ self.assertEqual(expected, actual)
442+
443+ def test_venv_symlink_with_misleading_landmarks_posix(self):
444+ "Test that landmarks near an external symlink do effect resolution."
445+ ns = MockPosixNamespace(
446+ argv0="/venv/bin/python",
447+ PREFIX="/opt/python",
448+ )
449+ ns.add_known_xfile("/opt/python/bin/python3")
450+ ns.add_known_xfile("/public/bin/python")
451+ ns.add_known_link("/public/bin/python", "/opt/python/bin/python3")
452+ ns.add_known_xfile("/venv/bin/python")
453+ ns.add_known_link("/venv/bin/python", "/public/bin/python")
454+ ns.add_known_file("/opt/python/lib/python9.8/os.py")
455+ ns.add_known_dir("/opt/python/lib/python9.8/lib-dynload")
456+ ns.add_known_file("/public/lib/python9.8/os.py")
457+ ns.add_known_dir("/public/lib/python9.8/lib-dynload")
458+ ns.add_known_file("/venv/pyvenv.cfg", [
459+ "home = /public/bin",
460+ ])
461+ expected = dict(
462+ executable="/venv/bin/python",
463+ prefix="/venv",
464+ exec_prefix="/venv",
465+ base_executable="/opt/python/bin/python3",
466+ base_prefix="/opt/python",
467+ base_exec_prefix="/opt/python",
468+ module_search_paths_set=1,
469+ module_search_paths=[
470+ "/opt/python/lib/python98.zip",
471+ "/opt/python/lib/python9.8",
472+ "/opt/python/lib/python9.8/lib-dynload",
473+ ],
474+ )
475+ actual = getpath(ns, expected)
476+ self.assertEqual(expected, actual)
477+
410478 def test_venv_non_installed_zip_path_posix(self):
411479 "Test a venv created from non-installed python has correct zip path."""
412480 ns = MockPosixNamespace(
0 commit comments