def test_install_suffix(pipx_temp_env, capsys): name = "pbr" suffix = "_a" assert not run_pipx_cli(["install", PKG[name]["spec"], f"--suffix={suffix}"]) captured = capsys.readouterr() name_a = app_name(f"{name}{suffix}") assert f"- {name_a}" in captured.out suffix = "_b" assert not run_pipx_cli(["install", PKG[name]["spec"], f"--suffix={suffix}"]) captured = capsys.readouterr() name_b = app_name(f"{name}{suffix}") assert f"- {name_b}" in captured.out assert (constants.LOCAL_BIN_DIR / name_a).exists() assert (constants.LOCAL_BIN_DIR / name_b).exists()
def test_uninstall_legacy_venv(pipx_temp_env, metadata_version): executable_path = constants.LOCAL_BIN_DIR / app_name("pycowsay") assert not run_pipx_cli(["install", "pycowsay"]) assert executable_path.exists() mock_legacy_venv("pycowsay", metadata_version=metadata_version) assert not run_pipx_cli(["uninstall", "pycowsay"]) assert not file_or_symlink(executable_path)
def test_uninstall_suffix(pipx_temp_env): name = "pbr" suffix = "_a" executable_path = constants.LOCAL_BIN_DIR / app_name(f"{name}{suffix}") assert not run_pipx_cli(["install", "pbr", f"--suffix={suffix}"]) assert executable_path.exists() assert not run_pipx_cli(["uninstall", f"{name}{suffix}"]) assert not file_or_symlink(executable_path)
def test_uninstall_with_missing_interpreter(pipx_temp_env, metadata_version): executable_path = constants.LOCAL_BIN_DIR / app_name("pycowsay") assert not run_pipx_cli(["install", "pycowsay"]) assert executable_path.exists() mock_legacy_venv("pycowsay", metadata_version=metadata_version) remove_venv_interpreter("pycowsay") assert not run_pipx_cli(["uninstall", "pycowsay"]) # On Windows we cannot remove app binaries if no metadata and no python if not (sys.platform.startswith("win") and metadata_version is None): assert not file_or_symlink(executable_path)
def test_uninstall_suffix_legacy_venv(pipx_temp_env, metadata_version): name = "pbr" # legacy uninstall on Windows only works with "canonical name characters" # in suffix suffix = "-a" executable_path = constants.LOCAL_BIN_DIR / app_name(f"{name}{suffix}") assert not run_pipx_cli(["install", "pbr", f"--suffix={suffix}"]) mock_legacy_venv(f"{name}{suffix}", metadata_version=metadata_version) assert executable_path.exists() assert not run_pipx_cli(["uninstall", f"{name}{suffix}"]) assert not file_or_symlink(executable_path)
def test_list_json(pipx_temp_env, capsys): pipx_venvs_dir = constants.PIPX_HOME / "venvs" venv_bin_dir = "Scripts" if constants.WINDOWS else "bin" assert not run_pipx_cli(["install", PKG["pycowsay"]["spec"]]) assert not run_pipx_cli(["install", PKG["pylint"]["spec"]]) assert not run_pipx_cli(["inject", "pylint", PKG["isort"]["spec"]]) captured = capsys.readouterr() assert not run_pipx_cli(["list", "--json"]) captured = capsys.readouterr() assert not re.search(r"\S", captured.err) json_parsed = json.loads(captured.out, object_hook=_json_decoder_object_hook) # raises error if not valid json assert sorted(json_parsed["venvs"].keys()) == ["pycowsay", "pylint"] # pycowsay venv pycowsay_package_ref = create_package_info_ref("pycowsay", "pycowsay", pipx_venvs_dir) assert_package_metadata( PackageInfo( **json_parsed["venvs"]["pycowsay"]["metadata"]["main_package"]), pycowsay_package_ref, ) assert json_parsed["venvs"]["pycowsay"]["metadata"][ "injected_packages"] == {} # pylint venv pylint_package_ref = create_package_info_ref( "pylint", "pylint", pipx_venvs_dir, **{ "app_paths_of_dependencies": { "isort": [pipx_venvs_dir / "pylint" / venv_bin_dir / app_name("isort")] } }, ) assert_package_metadata( PackageInfo( **json_parsed["venvs"]["pylint"]["metadata"]["main_package"]), pylint_package_ref, ) assert sorted(json_parsed["venvs"]["pylint"]["metadata"] ["injected_packages"].keys()) == ["isort"] isort_package_ref = create_package_info_ref("pylint", "isort", pipx_venvs_dir, include_apps=False) print(isort_package_ref) print( PackageInfo(**json_parsed["venvs"]["pylint"]["metadata"] ["injected_packages"]["isort"])) assert_package_metadata( PackageInfo(**json_parsed["venvs"]["pylint"]["metadata"] ["injected_packages"]["isort"]), isort_package_ref, )