From 73c6b8123a8292667361167907a8bd1127672305 Mon Sep 17 00:00:00 2001 From: Fabio Valentini Date: Feb 09 2023 19:21:04 +0000 Subject: add tests for the naive workspace detection --- diff --git a/cargo2rpm/metadata.py b/cargo2rpm/metadata.py index 73a2dad..238ffd2 100644 --- a/cargo2rpm/metadata.py +++ b/cargo2rpm/metadata.py @@ -272,7 +272,7 @@ class Metadata: return Metadata(json.loads(data)) @staticmethod - def from_cargo(cargo: str, path: str) -> "Metadata": + def from_cargo(cargo: str, path: str) -> "Metadata": # pragma nocover ret = subprocess.run( [ cargo, @@ -306,6 +306,9 @@ class Metadata: def target_directory(self) -> str: return self._data["target_directory"] + def is_workspace(self) -> bool: + return len(self.packages()) >= 2 + def is_bin(self) -> bool: for package in self.packages(): if package.is_bin(): diff --git a/cargo2rpm/rpm.py b/cargo2rpm/rpm.py index db4bdf2..ec3d03c 100644 --- a/cargo2rpm/rpm.py +++ b/cargo2rpm/rpm.py @@ -229,7 +229,7 @@ def _requires_feature(package: Package, feature: str) -> Set[str]: for depf in dep.features(): deps.add(dep.to_rpm(depf)) - if not found: + if not found: # pragma nocover raise ValueError(f"No optional dependency found with name {name!r}.") elif "/" in fdep and "?/" not in fdep: @@ -259,7 +259,7 @@ def _requires_feature(package: Package, feature: str) -> Set[str]: else: # dependency on a feature of the current crate - if fdep not in package.features().keys(): + if fdep not in package.features().keys(): # pragma nocover raise ValueError(f"Invalid feature dependency (not a feature name): {fdep!r}") deps.add(package.to_rpm_dependency(fdep)) @@ -267,7 +267,7 @@ def _requires_feature(package: Package, feature: str) -> Set[str]: return deps -def requires(package: Package, feature: Optional[str]) -> Set[str]: +def requires(package: Package, feature: Optional[str]) -> Set[str]: # pragma nocover if feature is None: return _requires_crate(package) else: @@ -284,7 +284,7 @@ def _provides_feature(package: Package, feature: str) -> str: return f"crate({package.name()}/{feature}) = {rpm_version}" -def provides(package: Package, feature: Optional[str]) -> str: +def provides(package: Package, feature: Optional[str]) -> str: # pragma nocover if feature is None: return _provides_crate(package) else: diff --git a/cargo2rpm/tests/test_metadata.py b/cargo2rpm/tests/test_metadata.py index fef6eb2..d694fc0 100644 --- a/cargo2rpm/tests/test_metadata.py +++ b/cargo2rpm/tests/test_metadata.py @@ -130,6 +130,46 @@ def test_metadata_is_lib(filename: str, expected: bool): @pytest.mark.parametrize( "filename,expected", [ + ("ahash-0.8.3.json", False), + ("assert_cmd-2.0.8.json", False), + ("assert_fs-1.0.10.json", False), + ("autocfg-1.1.0.json", False), + ("bstr-1.2.0.json", False), + ("cfg-if-1.0.0.json", False), + ("clap-4.1.4.json", False), + ("fapolicy-analyzer-0.6.8.json", True), + ("gstreamer-0.19.7.json", False), + ("human-panic-1.1.0.json", False), + ("hyperfine-1.15.0.json", False), + ("libblkio-1.2.2.json", True), + ("libc-0.2.139.json", False), + ("predicates-2.1.5.json", False), + ("proc-macro2-1.0.50.json", False), + ("quote-1.0.23.json", False), + ("rand-0.8.5.json", False), + ("rand_core-0.6.4.json", False), + ("rpm-sequoia-1.2.0.json", False), + ("rust_decimal-1.28.0.json", False), + ("rustix-0.36.8.json", False), + ("serde-1.0.152.json", False), + ("syn-1.0.107.json", False), + ("time-0.3.17.json", False), + ("tokio-1.25.0.json", False), + ("unicode-xid-0.2.4.json", False), + ("zbus-3.8.0.json", False), + ("zola-0.16.1.json", True), + ("zoxide-0.9.0.json", False), + ], + ids=short_repr, +) +def test_metadata_is_workspace(filename: str, expected: bool): + metadata = load_metadata_from_resource(filename) + assert metadata.is_workspace() == expected + + +@pytest.mark.parametrize( + "filename,expected", + [ ("ahash-0.8.3.json", set()), ("assert_cmd-2.0.8.json", {"bin_fixture"}), ("assert_fs-1.0.10.json", set()),