1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
import os
from pathlib import Path
import pytest
from virtualenv.config.cli.parser import VirtualEnvOptions
from virtualenv.config.ini import IniConfig
from virtualenv.run import session_via_cli
@pytest.fixture()
def _empty_conf(tmp_path, monkeypatch):
conf = tmp_path / "conf.ini"
monkeypatch.setenv(IniConfig.VIRTUALENV_CONFIG_FILE_ENV_VAR, str(conf))
conf.write_text("[virtualenv]")
@pytest.mark.usefixtures("_empty_conf")
def test_value_ok(monkeypatch):
monkeypatch.setenv("VIRTUALENV_VERBOSE", "5")
result = session_via_cli(["venv"])
assert result.verbosity == 5
@pytest.mark.usefixtures("_empty_conf")
def test_value_bad(monkeypatch, caplog):
monkeypatch.setenv("VIRTUALENV_VERBOSE", "a")
result = session_via_cli(["venv"])
assert result.verbosity == 2
assert len(caplog.messages) == 1
assert "env var VIRTUALENV_VERBOSE failed to convert" in caplog.messages[0]
assert "invalid literal" in caplog.messages[0]
def test_python_via_env_var(monkeypatch):
options = VirtualEnvOptions()
monkeypatch.setenv("VIRTUALENV_PYTHON", "python3")
session_via_cli(["venv"], options=options)
assert options.python == ["python3"]
def test_python_multi_value_via_env_var(monkeypatch):
options = VirtualEnvOptions()
monkeypatch.setenv("VIRTUALENV_PYTHON", "python3,python2")
session_via_cli(["venv"], options=options)
assert options.python == ["python3", "python2"]
def test_python_multi_value_newline_via_env_var(monkeypatch):
options = VirtualEnvOptions()
monkeypatch.setenv("VIRTUALENV_PYTHON", "python3\npython2")
session_via_cli(["venv"], options=options)
assert options.python == ["python3", "python2"]
def test_python_multi_value_prefer_newline_via_env_var(monkeypatch):
options = VirtualEnvOptions()
monkeypatch.setenv("VIRTUALENV_PYTHON", "python3\npython2,python27")
session_via_cli(["venv"], options=options)
assert options.python == ["python3", "python2,python27"]
def test_extra_search_dir_via_env_var(tmp_path, monkeypatch):
monkeypatch.chdir(tmp_path)
value = f"a{os.linesep}0{os.linesep}b{os.pathsep}c"
monkeypatch.setenv("VIRTUALENV_EXTRA_SEARCH_DIR", str(value))
(tmp_path / "a").mkdir()
(tmp_path / "b").mkdir()
(tmp_path / "c").mkdir()
result = session_via_cli(["venv"])
assert result.seeder.extra_search_dir == [Path("a").resolve(), Path("b").resolve(), Path("c").resolve()]
@pytest.mark.usefixtures("_empty_conf")
def test_value_alias(monkeypatch, mocker):
from virtualenv.config.cli.parser import VirtualEnvConfigParser
prev = VirtualEnvConfigParser._fix_default
def func(self, action):
if action.dest == "symlinks":
action.default = True # force symlink to be true
elif action.dest == "copies":
action.default = False # force default copy to be False, we expect env-var to flip it
return prev(self, action)
mocker.patch("virtualenv.run.VirtualEnvConfigParser._fix_default", side_effect=func, autospec=True)
monkeypatch.delenv("SYMLINKS", raising=False)
monkeypatch.delenv("VIRTUALENV_COPIES", raising=False)
monkeypatch.setenv("VIRTUALENV_ALWAYS_COPY", "1")
result = session_via_cli(["venv"])
assert result.creator.symlinks is False
|