from pyodide_build import pypabuild, pywasmcross class MockIsolatedEnv: def __init__(self, temp_path): self.path = temp_path self.installed = set() def install(self, reqs): for req in reqs: self.installed.add(req) def test_remove_avoided_requirements(): assert pypabuild.remove_avoided_requirements( {"foo", "bar", "baz"}, {"foo", "bar", "qux"}, ) == {"baz"} def test_install_reqs(tmp_path): env = MockIsolatedEnv(tmp_path) reqs = {"foo", "bar", "baz"} pypabuild.install_reqs(env, reqs) # type: ignore[arg-type] for req in reqs: assert req in env.installed pypabuild.install_reqs(env, set(pypabuild.AVOIDED_REQUIREMENTS)) # type: ignore[arg-type] for req in pypabuild.AVOIDED_REQUIREMENTS: assert req not in env.installed def test_make_command_wrapper_symlinks(tmp_path): symlink_dir = tmp_path env = pypabuild.make_command_wrapper_symlinks(symlink_dir) wrapper = symlink_dir / "pywasmcross.py" assert wrapper.exists() assert not wrapper.is_symlink() assert wrapper.stat().st_mode & 0o755 == 0o755 for _, path in env.items(): symlink_path = symlink_dir / path assert symlink_path.exists() assert symlink_path.is_symlink() assert symlink_path.name in pywasmcross.SYMLINKS def test_get_build_env(tmp_path): build_env_ctx = pypabuild.get_build_env( env={"PATH": ""}, pkgname="", cflags="", cxxflags="", ldflags="", target_install_dir=str(tmp_path), exports=["pyinit"], ) with build_env_ctx as env: # TODO: also test values assert "CC" in env assert "CXX" in env assert "AR" in env assert "PATH" in env assert "PYTHONPATH" in env assert "PYWASMCROSS_ARGS" in env assert "_PYTHON_HOST_PLATFORM" in env assert "_PYTHON_SYSCONFIGDATA_NAME" in env wasmcross_args = env["PYWASMCROSS_ARGS"] assert "cflags" in wasmcross_args assert "cxxflags" in wasmcross_args assert "ldflags" in wasmcross_args assert "exports" in wasmcross_args assert "builddir" in wasmcross_args