Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def check_animate_output(
capsys, test_string, frame_strings, frame_period, frames_to_test
):
expected_string = f"{HIDE_CURSOR}" + "".join(frame_strings)
chars_to_test = 1 + len("".join(frame_strings[:frames_to_test]))
with pipx.animate.animate(test_string, do_animation=True):
time.sleep(frame_period * (frames_to_test - 1) + 0.2)
captured = capsys.readouterr()
assert captured.err[:chars_to_test] == expected_string[:chars_to_test]
def test_existing_symlink_points_to_existing_wrong_location_warning(
pipx_temp_env, caplog, capsys
):
if sys.platform.startswith("win"):
pytest.skip("pipx does not use symlinks on Windows")
constants.LOCAL_BIN_DIR.mkdir(exist_ok=True, parents=True)
(constants.LOCAL_BIN_DIR / "pycowsay").symlink_to(os.devnull)
assert not run_pipx_cli(["install", "pycowsay"])
captured = capsys.readouterr()
assert "File exists at" in caplog.text
assert "symlink missing or pointing to unexpected location" in captured.out
# bin dir was on path, so the warning should NOT appear (even though the symlink
# pointed to the wrong location)
assert "is not on your PATH environment variable" not in captured.err
def test_existing_symlink_points_to_nothing(pipx_temp_env, caplog, capsys):
constants.LOCAL_BIN_DIR.mkdir(exist_ok=True, parents=True)
(constants.LOCAL_BIN_DIR / "pycowsay").symlink_to("/asdf/jkl")
assert not run_pipx_cli(["install", "pycowsay"])
captured = capsys.readouterr()
# pipx should realize the symlink points to nothing and replace it,
# so no warning should be present
assert "symlink missing or pointing to unexpected location" not in captured.out
def test_uninstall_with_missing_interpreter(pipx_temp_env, capsys):
assert not run_pipx_cli(["install", "pycowsay"])
_, python_path = util.get_venv_paths(constants.PIPX_LOCAL_VENVS / "pycowsay")
assert python_path.is_file()
python_path.unlink()
assert not python_path.is_file()
assert not run_pipx_cli(["uninstall", "pycowsay"])
def test_missing_interpreter(pipx_temp_env, monkeypatch, capsys):
assert not run_pipx_cli(["install", "pycowsay"])
_, python_path = util.get_venv_paths(constants.PIPX_LOCAL_VENVS / "pycowsay")
assert (python_path).is_file()
assert not run_pipx_cli(["list"])
captured = capsys.readouterr()
assert "package pycowsay has invalid interpreter" not in captured.out
python_path.unlink()
assert not run_pipx_cli(["list"])
captured = capsys.readouterr()
assert "package pycowsay has invalid interpreter" in captured.out
def test_existing_symlink_points_to_nothing(pipx_temp_env, caplog, capsys):
constants.LOCAL_BIN_DIR.mkdir(exist_ok=True, parents=True)
(constants.LOCAL_BIN_DIR / "pycowsay").symlink_to("/asdf/jkl")
assert not run_pipx_cli(["install", "pycowsay"])
captured = capsys.readouterr()
# pipx should realize the symlink points to nothing and replace it,
# so no warning should be present
assert "symlink missing or pointing to unexpected location" not in captured.out
def test_appargs_doubledash(
pipx_temp_env, capsys, monkeypatch, input_run_args, expected_app_with_args
):
parser = pipx.main.get_command_parser()
monkeypatch.setattr(sys, "argv", ["pipx", "run"] + input_run_args)
parsed_pipx_args = parser.parse_args()
pipx.main.check_args(parsed_pipx_args)
assert parsed_pipx_args.app_with_args == expected_app_with_args
def run_pipx_cli(pipx_args: List[str]):
with mock.patch.object(sys, "argv", ["pipx"] + pipx_args):
return main.cli()
def test_version(monkeypatch, capsys):
mock_exit = mock.Mock(side_effect=ValueError("raised in test to exit early"))
with mock.patch.object(sys, "exit", mock_exit), pytest.raises(
ValueError, match="raised in test to exit early"
):
assert not run_pipx_cli(["--version"])
captured = capsys.readouterr()
mock_exit.assert_called_with(0)
assert main.__version__ in captured.out.strip()
def test_simple_parse_version(ver_str, expected):
assert main.simple_parse_version(ver_str) == expected