"""
Test format classes.
(Some of their code is unreachable through api.py)
"""
import os
from pathlib import Path
import pytest
from conda_package_handling.conda_fmt import CondaFormat_v2
from conda_package_handling.tarball import CondaTarBZ2
from .test_api import data_dir, test_package_name
TEST_CONDA = Path(data_dir, test_package_name + ".conda")
TEST_TARBZ = Path(data_dir, test_package_name + ".tar.bz2")
def test_extract_create(tmpdir):
for format, infile, outfile in (
(CondaFormat_v2, TEST_CONDA, "newmock.conda"),
(CondaTarBZ2, TEST_TARBZ, "newmock.tar.bz2"),
):
both_path = Path(tmpdir, f"mkdirs-{outfile.split('.', 1)[-1]}")
# these old APIs don't guarantee Path-like's
format.extract(infile, str(both_path))
assert sorted(os.listdir(both_path)) == sorted(["lib", "info"])
if format == CondaFormat_v2:
info_path = Path(tmpdir, "info-only")
format.extract_info(TEST_CONDA, str(info_path)) # type: ignore
assert os.listdir(info_path) == ["info"]
filelist = [str(p.relative_to(both_path)) for p in both_path.rglob("*")]
format.create(
both_path,
filelist,
tmpdir / outfile,
# compression_tuple is for libarchive compatibility. Instead, pass
# compressor=(compressor factory function)
compression_tuple=(".tar.zst", "zstd", "zstd:compression-level=1"),
)
assert (tmpdir / outfile).exists()
with pytest.raises(ValueError):
CondaFormat_v2.create(
"", [], "", compressor=True, compression_tuple=("1", "2", "3") # type: ignore
)