def test_install_recreate(newmocksession, tmpdir): pkg = tmpdir.ensure("package.tar.gz") mocksession = newmocksession( ["--recreate"], """\ [testenv] deps=xyz """, ) venv = mocksession.getvenv("python") with mocksession.newaction(venv.name, "update") as action: venv.update(action) installpkg(venv, pkg) mocksession.report.expect("verbosity0", "*create*") venv.update(action) mocksession.report.expect("verbosity0", "*recreate*")
def test_installpkg_indexserver(newmocksession, tmpdir): mocksession = newmocksession( [], """\ [tox] indexserver = default = ABC """, ) venv = mocksession.getvenv("python") pcalls = mocksession._pcalls p = tmpdir.ensure("distfile.tar.gz") installpkg(venv, p) # two different index servers, two calls assert len(pcalls) == 1 args = " ".join(pcalls[0].args) assert "-i ABC" in args
def test_env_variables_added_to_pcall(tmpdir, mocksession, newconfig, monkeypatch): monkeypatch.delenv("PYTHONPATH", raising=False) pkg = tmpdir.ensure("package.tar.gz") monkeypatch.setenv("X123", "123") monkeypatch.setenv("YY", "456") config = newconfig( [], """\ [testenv:python] commands=python -V passenv = x123 setenv = ENV_VAR = value PYTHONPATH = value """, ) mocksession._clearmocks() mocksession.new_config(config) venv = mocksession.getvenv("python") installpkg(venv, pkg) venv.test() pcalls = mocksession._pcalls assert len(pcalls) == 2 for x in pcalls: env = x.env assert env is not None assert "ENV_VAR" in env assert env["ENV_VAR"] == "value" assert env["VIRTUAL_ENV"] == str(venv.path) assert env["X123"] == "123" assert "PYTHONPATH" in env assert env["PYTHONPATH"] == "value" # all env variables are passed for installation assert pcalls[0].env["YY"] == "456" assert "YY" not in pcalls[1].env assert {"ENV_VAR", "VIRTUAL_ENV", "PYTHONHASHSEED", "X123", "PATH"}.issubset(pcalls[1].env) # setenv does not trigger PYTHONPATH warnings mocksession.report.not_expect("warning", "*Discarding $PYTHONPATH from environment*")
def test_path_change(tmpdir, mocksession, newconfig, monkeypatch): config = newconfig( [], """\ [testenv:python] setenv = PATH = {env:PATH}{:}{toxinidir}/bin """, ) pkg = tmpdir.ensure("package.tar.gz") mocksession._clearmocks() mocksession.new_config(config) venv = mocksession.getvenv("python") installpkg(venv, pkg) venv.test() pcalls = mocksession._pcalls for x in pcalls: path = x.env["PATH"] assert os.environ["PATH"] in path assert path.endswith(str(venv.envconfig.config.toxinidir) + "/bin")
def test_env_variables_added_to_pcall(tmpdir, mocksession, newconfig, monkeypatch, tmp_path): monkeypatch.delenv("PYTHONPATH", raising=False) pkg = tmpdir.ensure("package.tar.gz") monkeypatch.setenv("X123", "123") monkeypatch.setenv("YY", "456") env_path = tmp_path / ".env" env_file_content = "ENV_FILE_VAR = file_value" env_path.write_text(env_file_content.decode() if PY2 else env_file_content) config = newconfig( [], r""" [base] base_var = base_value [testenv:python] commands=python -V passenv = x123 setenv = ENV_VAR = value ESCAPED_VAR = \{value\} ESCAPED_VAR2 = \\{value\\} BASE_VAR = {[base]base_var} PYTHONPATH = value TTY_VAR = {tty:ON_VALUE:OFF_VALUE} COLON = {:} REUSED_FILE_VAR = reused {env:ENV_FILE_VAR} file| %s """ % env_path, ) mocksession._clearmocks() mocksession.new_config(config) venv = mocksession.getvenv("python") installpkg(venv, pkg) venv.test() pcalls = mocksession._pcalls assert len(pcalls) == 2 for x in pcalls: env = x.env assert env is not None assert "ENV_VAR" in env assert env["ENV_VAR"] == "value" assert env["ESCAPED_VAR"] == "{value}" assert env["ESCAPED_VAR2"] == r"\{value\}" assert env["COLON"] == ";" if sys.platform == "win32" else ":" assert env["TTY_VAR"] == "OFF_VALUE" assert env["ENV_FILE_VAR"] == "file_value" assert env["REUSED_FILE_VAR"] == "reused file_value" assert env["BASE_VAR"] == "base_value" assert env["VIRTUAL_ENV"] == str(venv.path) assert env["X123"] == "123" assert "PYTHONPATH" in env assert env["PYTHONPATH"] == "value" # all env variables are passed for installation assert pcalls[0].env["YY"] == "456" assert "YY" not in pcalls[1].env assert {"ENV_VAR", "VIRTUAL_ENV", "PYTHONHASHSEED", "X123", "PATH"}.issubset(pcalls[1].env) # setenv does not trigger PYTHONPATH warnings mocksession.report.not_expect("warning", "*Discarding $PYTHONPATH from environment*")