Skip to content

Commit af5420b

Browse files
committed
add first test for conan dependency provider
1 parent d97e498 commit af5420b

File tree

8 files changed

+48
-85
lines changed

8 files changed

+48
-85
lines changed

src/cpp_dev/conan/__init__.py

Whitespace-only changes.

src/cpp_dev/conan/package.py

Lines changed: 0 additions & 46 deletions
This file was deleted.

src/cpp_dev/dependency/conan/command_wrapper.py

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,17 @@
1919
# Public API ###
2020
###############################################################################
2121

22-
22+
############################
23+
### Conan Config Install ###
24+
############################
2325
def conan_config_install(conan_config_dir: Path) -> None:
2426
"""Run "conan config install"."""
2527
run_command("conan", "config", "install", str(conan_config_dir))
2628

2729

30+
##########################
31+
### Conan Remote Login ###
32+
##########################
2833
def conan_remote_login(remote: str, user: str, password: str) -> None:
2934
"""Run "conan remote login"."""
3035
run_command_assert_success(
@@ -37,8 +42,9 @@ def conan_remote_login(remote: str, user: str, password: str) -> None:
3742
password,
3843
)
3944

40-
class ConanRemoteListResult(RootModel):
41-
root: Mapping[str, Mapping[str, dict]]
45+
### Conan List
46+
class ConanListResult(RootModel):
47+
root: Mapping[str, Mapping[ConanPackageReference, dict]]
4248

4349
def conan_list(remote: str, name: str) -> Mapping[ConanPackageReference, dict]:
4450
stdout, _ = run_command_assert_success(
@@ -48,8 +54,15 @@ def conan_list(remote: str, name: str) -> Mapping[ConanPackageReference, dict]:
4854
f"--remote={remote}",
4955
f"{name}/",
5056
)
51-
return json.loads(stdout)[remote]
57+
print(stdout)
58+
parsed_data = ConanListResult.model_validate_json(stdout)
59+
print(parsed_data)
60+
return parsed_data.root[remote]
61+
5262

63+
###############################
64+
### Conan Graph Build-Order ###
65+
###############################
5366
class ConanPackageInfo(BaseModel):
5467
settings: Mapping[str, str] | None = None
5568

@@ -78,6 +91,9 @@ def conan_graph_buildorder(conanfile_path: Path, profile: str) -> ConanGraphBuil
7891
return ConanGraphBuildOrder.model_validate_json(stdout)
7992

8093

94+
####################
95+
### Conan Create ###
96+
####################
8197
def conan_create(package_dir: Path, profile: str) -> None:
8298
"""Run "conan create"."""
8399
run_command_assert_success(
@@ -87,6 +103,9 @@ def conan_create(package_dir: Path, profile: str) -> None:
87103
"-pr:a", profile,
88104
)
89105

106+
####################
107+
### Conan Upload ###
108+
####################
90109
def conan_upload(ref: ConanPackageReference, remote: str) -> None:
91110
"""Run "conan upload"."""
92111
run_command_assert_success(

src/cpp_dev/dependency/conan/provider.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,10 @@ def fetch_versions(self, repository: str, name: str) -> list[SemanticVersion]:
3434
return available_versions
3535

3636
def collect_dependency_hull(self, deps: list[DependencySpecifier]) -> list[Dependency]:
37-
... # Implementation using Conan package manager
37+
# with conan_env(get_conan_home_dir()):
38+
# with create_tmp_dir() as tmp_dir:
39+
# conanfile_path = create_conanfile(tmp_dir, package_refs)
40+
...
3841

3942
def install_dependencies(self, deps: list[DependencySpecifier]) -> list[DependencySpecifier]:
4043
... # Implementation using Conan package manager

src/cpp_dev/dependency/conan/types.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ def validate_reference(self) -> ConanPackageReference:
3333
self._user = match.group("user")
3434
self._channel = match.group("channel")
3535

36+
return self
37+
3638
@property
3739
def name(self) -> str:
3840
return self._name

src/tests/cpp_dev/conan/_test_package.py

Lines changed: 0 additions & 22 deletions
This file was deleted.

src/tests/cpp_dev/dependency/conan/test_command_wrapper.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
conan_upload)
2020
from cpp_dev.dependency.conan.setup import CONAN_REMOTE
2121
from cpp_dev.dependency.conan.types import ConanPackageReference
22+
from cpp_dev.dependency.conan.utils import conan_env
2223

2324
from .utils.env import ConanTestEnv, create_conan_env
2425
from .utils.server import ConanServer, launch_conan_server
@@ -68,22 +69,22 @@ class ConanTestEnvironment:
6869

6970
@pytest.fixture
7071
def conan_test_environment(tmp_path: Path, unused_http_port: int) -> Generator[ConanTestEnvironment]:
71-
with launch_conan_server(tmp_path / "server", unused_http_port) as conan_server:
72-
with create_conan_env(tmp_path / "conan", conan_server.http_port) as conan_env:
73-
conan_env.create_and_upload_package(ConanPackageReference("dep/1.0.0@official/cppdev"), [])
74-
conan_env.create_and_upload_package(ConanPackageReference("cpd1/1.0.0@official/cppdev"), [])
75-
conan_env.create_and_upload_package(ConanPackageReference("cpd/1.0.0@official/cppdev"), [ConanPackageReference("dep/1.0.0@official/cppdev")])
72+
with launch_conan_server(tmp_path / "server", unused_http_port) as server:
73+
with create_conan_env(tmp_path / "conan", server.http_port) as conan:
74+
conan.create_and_upload_package(ConanPackageReference("dep/1.0.0@official/cppdev"), [])
75+
conan.create_and_upload_package(ConanPackageReference("cpd1/1.0.0@official/cppdev"), [])
76+
conan.create_and_upload_package(ConanPackageReference("cpd/1.0.0@official/cppdev"), [ConanPackageReference("dep/1.0.0@official/cppdev")])
7677
yield ConanTestEnvironment(
77-
server=conan_server,
78-
conan=conan_env
78+
server=server,
79+
conan=conan,
7980
)
8081

8182

8283
@pytest.mark.usefixtures("conan_test_environment")
8384
def test_conan_list() -> None:
8485
result = conan_list(CONAN_REMOTE, "cpd")
8586
assert len(result) == 1
86-
assert "cpd/1.0.0@official/cppdev" in result
87+
assert ConanPackageReference("cpd/1.0.0@official/cppdev") in result
8788

8889

8990
@pytest.mark.usefixtures("conan_test_environment")

src/tests/cpp_dev/dependency/conan/utils/env.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,20 @@
2222
class ConanTestEnv:
2323
"""A Conan environment for testing."""
2424

25-
def __init__(self, base_dir: Path, profile: str) -> None:
26-
self._base_dir = base_dir / ".conan_test_env"
27-
ensure_dir_exists(self._base_dir)
25+
def __init__(self, conan_dir: Path, profile: str) -> None:
26+
self._conan_dir = conan_dir
27+
self._package_dir = conan_dir / ".conan_test_env"
28+
ensure_dir_exists(self._package_dir)
2829
self._profile = profile
2930

3031
def create_and_upload_package(self, ref: ConanPackageReference, dependencies: list[ConanPackageReference]) -> None:
3132
"""Create and upload a Conan package for testing."""
32-
_create_and_upload_conan_package(self._base_dir, ref, dependencies, self._profile)
33+
_create_and_upload_conan_package(self._package_dir, ref, dependencies, self._profile)
34+
35+
@property
36+
def conan_dir(self) -> Path:
37+
"""Return the base directory of the Conan environment."""
38+
return self._conan_dir
3339

3440
@property
3541
def profile(self) -> str:

0 commit comments

Comments
 (0)