2020-07-08 06:08:56 +00:00
|
|
|
import shutil
|
|
|
|
import subprocess
|
|
|
|
|
|
|
|
from pathlib import Path
|
|
|
|
|
2021-01-08 16:30:39 +00:00
|
|
|
import pytest
|
|
|
|
|
2021-01-11 07:59:22 +00:00
|
|
|
from pyodide_build import buildpkg
|
|
|
|
from pyodide_build.io import parse_package_config
|
2020-07-08 06:08:56 +00:00
|
|
|
|
|
|
|
|
2021-09-08 03:29:49 +00:00
|
|
|
def test_subprocess_with_shared_env():
|
|
|
|
p = buildpkg.BashRunnerWithSharedEnvironment()
|
|
|
|
p.env.pop("A", None)
|
|
|
|
|
|
|
|
res = p.run("A=6; echo $A", stdout=subprocess.PIPE)
|
|
|
|
assert res.stdout == b"6\n"
|
|
|
|
assert p.env.get("A", None) is None
|
|
|
|
|
|
|
|
p.run("export A=2")
|
|
|
|
assert p.env["A"] == "2"
|
|
|
|
|
|
|
|
res = p.run("echo $A", stdout=subprocess.PIPE)
|
|
|
|
assert res.stdout == b"2\n"
|
|
|
|
|
|
|
|
res = p.run("A=6; echo $A", stdout=subprocess.PIPE)
|
|
|
|
assert res.stdout == b"6\n"
|
|
|
|
assert p.env.get("A", None) == "6"
|
|
|
|
|
|
|
|
p.env["A"] = "7"
|
|
|
|
res = p.run("echo $A", stdout=subprocess.PIPE)
|
|
|
|
assert res.stdout == b"7\n"
|
|
|
|
assert p.env["A"] == "7"
|
|
|
|
|
|
|
|
|
2020-07-08 06:08:56 +00:00
|
|
|
def test_download_and_extract(monkeypatch):
|
|
|
|
monkeypatch.setattr(subprocess, "run", lambda *args, **kwargs: True)
|
|
|
|
monkeypatch.setattr(buildpkg, "check_checksum", lambda *args, **kwargs: True)
|
|
|
|
monkeypatch.setattr(shutil, "unpack_archive", lambda *args, **kwargs: True)
|
|
|
|
|
|
|
|
test_pkgs = []
|
|
|
|
|
|
|
|
# tarballname == version
|
2021-01-11 07:59:22 +00:00
|
|
|
test_pkgs.append(parse_package_config("./packages/scipy/meta.yaml"))
|
|
|
|
test_pkgs.append(parse_package_config("./packages/numpy/meta.yaml"))
|
2020-07-08 06:08:56 +00:00
|
|
|
|
|
|
|
# tarballname != version
|
|
|
|
test_pkgs.append(
|
|
|
|
{
|
|
|
|
"package": {"name": "pyyaml", "version": "5.3.1"},
|
|
|
|
"source": {
|
|
|
|
"url": "https://files.pythonhosted.org/packages/64/c2/b80047c7ac2478f9501676c988a5411ed5572f35d1beff9cae07d321512c/PyYAML-5.3.1.tar.gz"
|
|
|
|
},
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
for pkg in test_pkgs:
|
|
|
|
packagedir = pkg["package"]["name"] + "-" + pkg["package"]["version"]
|
|
|
|
buildpath = Path(pkg["package"]["name"]) / "build"
|
|
|
|
srcpath = buildpkg.download_and_extract(buildpath, packagedir, pkg, args=None)
|
|
|
|
|
|
|
|
assert srcpath.name.lower().endswith(packagedir.lower())
|
2021-01-08 16:30:39 +00:00
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.parametrize("is_library", [True, False])
|
|
|
|
def test_run_script(is_library, tmpdir):
|
|
|
|
build_dir = Path(tmpdir.mkdir("build"))
|
|
|
|
src_dir = Path(tmpdir.mkdir("build/package_name"))
|
|
|
|
script = "touch out.txt"
|
|
|
|
pkg = {"build": {"script": script, "library": is_library}}
|
2021-09-08 03:29:49 +00:00
|
|
|
shared_env = buildpkg.BashRunnerWithSharedEnvironment()
|
|
|
|
buildpkg.run_script(build_dir, src_dir, pkg, shared_env)
|
2021-01-08 16:30:39 +00:00
|
|
|
assert (src_dir / "out.txt").exists()
|
|
|
|
if is_library:
|
|
|
|
assert (build_dir / ".packaged").exists()
|
|
|
|
else:
|
|
|
|
assert not (build_dir / ".packaged").exists()
|
2021-09-08 03:29:49 +00:00
|
|
|
|
|
|
|
|
|
|
|
def test_run_script_environment(tmpdir):
|
|
|
|
build_dir = Path(tmpdir.mkdir("build"))
|
|
|
|
src_dir = Path(tmpdir.mkdir("build/package_name"))
|
|
|
|
script = "export A=2"
|
|
|
|
pkg = {"build": {"script": script, "library": False}}
|
|
|
|
shared_env = buildpkg.BashRunnerWithSharedEnvironment()
|
|
|
|
shared_env.env.pop("A", None)
|
|
|
|
buildpkg.run_script(build_dir, src_dir, pkg, shared_env)
|
|
|
|
assert shared_env.env["A"] == "2"
|