def test_discover_exe_on_path_non_spec_name_match(mocker): suffixed_name = "python{}.{}m".format(CURRENT.version_info.major, CURRENT.version_info.minor) if sys.platform == "win32": suffixed_name += Path(CURRENT.original_executable).suffix spec = PythonSpec.from_string_spec(suffixed_name) mocker.patch.object(CURRENT, "original_executable", str(Path(CURRENT.executable).parent / suffixed_name)) assert CURRENT.satisfies(spec, impl_must_match=True) is True
def test_bad_py_spec(): text = "python2.3.4.5" spec = PythonSpec.from_string_spec(text) assert text in repr(spec) assert spec.str_spec == text assert spec.path == text content = vars(spec) del content[str("str_spec")] del content[str("path")] assert all(v is None for v in content.values())
def default_base_python(self, conf, env_name): spec = PythonSpec.from_string_spec(env_name) if spec.implementation is not None: if spec.implementation.lower() in ("cpython", "pypy"): return [env_name] return [sys.executable]
def test_satisfy_not_arch(): parsed_spec = PythonSpec.from_string_spec( "{}-{}".format(CURRENT.implementation, 64 if CURRENT.architecture == 32 else 32) ) matches = CURRENT.satisfies(parsed_spec, True) assert matches is False
def test_satisfy_py_info(spec): parsed_spec = PythonSpec.from_string_spec(spec) matches = CURRENT.satisfies(parsed_spec, True) assert matches is True
def test_satisfy_not_version(spec): parsed_spec = PythonSpec.from_string_spec("{}{}".format(CURRENT.implementation, spec)) matches = CURRENT.satisfies(parsed_spec, True) assert matches is False
def test_version_satisfies_ok(req, spec): req_spec = PythonSpec.from_string_spec("python{}".format(req)) sat_spec = PythonSpec.from_string_spec("python{}".format(spec)) assert sat_spec.satisfies(req_spec) is True
def test_spec_satisfies_implementation_nok(): spec_1 = PythonSpec.from_string_spec("python") spec_2 = PythonSpec.from_string_spec("jython") assert spec_2.satisfies(spec_1) is False assert spec_1.satisfies(spec_2) is False
def test_spec_satisfies_implementation_ok(req, spec): spec_1 = PythonSpec.from_string_spec(req) spec_2 = PythonSpec.from_string_spec(spec) assert spec_1.satisfies(spec_1) is True assert spec_2.satisfies(spec_1) is True
def test_spec_satisfies_arch(): spec_1 = PythonSpec.from_string_spec("python-32") spec_2 = PythonSpec.from_string_spec("python-64") assert spec_1.satisfies(spec_1) is True assert spec_2.satisfies(spec_1) is False
def test_spec_satisfies_path_nok(tmp_path): spec = PythonSpec.from_string_spec(sys.executable) of = PythonSpec.from_string_spec(str(tmp_path)) assert spec.satisfies(of) is False
def test_spec_satisfies_path_ok(): spec = PythonSpec.from_string_spec(sys.executable) assert spec.satisfies(spec) is True
def test_py_spec_first_digit_only_major(): spec = PythonSpec.from_string_spec("278") assert spec.major == 2 assert spec.minor == 78
def test_relative_spec(tmp_path, monkeypatch): monkeypatch.chdir(tmp_path) a_relative_path = str((tmp_path / "a" / "b").relative_to(tmp_path)) spec = PythonSpec.from_string_spec(a_relative_path) assert spec.path == a_relative_path
def test_satisfy_not_version(spec): parsed_spec = PythonSpec.from_string_spec(f"{CURRENT.implementation}{spec}") matches = CURRENT.satisfies(parsed_spec, True) assert matches is False
def test_version_satisfies_ok(req, spec): req_spec = PythonSpec.from_string_spec(f"python{req}") sat_spec = PythonSpec.from_string_spec(f"python{spec}") assert sat_spec.satisfies(req_spec) is True