aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src/vcpkg-test/dependencies.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'toolsrc/src/vcpkg-test/dependencies.cpp')
-rw-r--r--toolsrc/src/vcpkg-test/dependencies.cpp64
1 files changed, 64 insertions, 0 deletions
diff --git a/toolsrc/src/vcpkg-test/dependencies.cpp b/toolsrc/src/vcpkg-test/dependencies.cpp
index 6bd9dfc42..1951a6128 100644
--- a/toolsrc/src/vcpkg-test/dependencies.cpp
+++ b/toolsrc/src/vcpkg-test/dependencies.cpp
@@ -85,3 +85,67 @@ TEST_CASE ("qualified dependency", "[dependencies]")
REQUIRE(plan2.install_actions.size() == 2);
REQUIRE(plan2.install_actions.at(0).feature_list == std::vector<std::string>{"b1", "core"});
}
+
+TEST_CASE ("resolve_deps_as_top_level", "[dependencies]")
+{
+ using namespace Test;
+ PackageSpecMap spec_map;
+ FullPackageSpec spec_a{spec_map.emplace("a", "b, b[b1] (linux)"), {}};
+ FullPackageSpec spec_b{spec_map.emplace("b", "", {{"b1", ""}}), {}};
+ FullPackageSpec spec_c{spec_map.emplace("c", "b", {{"c1", "b[b1]"}, {"c2", "c[c1], a"}}, {"c1"}), {"core"}};
+ FullPackageSpec spec_d{spec_map.emplace("d", "c[core]"), {}};
+
+ PortFileProvider::MapPortFileProvider map_port{spec_map.map};
+ MockCMakeVarProvider var_provider;
+ Triplet t_linux = Triplet::from_canonical_name("x64-linux");
+ var_provider.dep_info_vars[{"a", t_linux}].emplace("VCPKG_CMAKE_SYSTEM_NAME", "Linux");
+ {
+ auto deps = vcpkg::Dependencies::resolve_deps_as_top_level(
+ *spec_map.map.at("a").source_control_file, Triplet::X86_WINDOWS, {}, var_provider);
+ REQUIRE(deps.size() == 1);
+ REQUIRE(deps.at(0) == spec_b);
+ }
+ {
+ auto deps = vcpkg::Dependencies::resolve_deps_as_top_level(
+ *spec_map.map.at("a").source_control_file, t_linux, {}, var_provider);
+ REQUIRE(deps.size() == 1);
+ REQUIRE(deps.at(0) == FullPackageSpec({"b", t_linux}, {"b1"}));
+ }
+ {
+ // without defaults
+ auto deps = vcpkg::Dependencies::resolve_deps_as_top_level(
+ *spec_map.map.at("c").source_control_file, Triplet::X86_WINDOWS, {}, var_provider);
+ REQUIRE(deps.size() == 1);
+ REQUIRE(deps.at(0) == spec_b);
+ }
+ FullPackageSpec spec_b_with_b1{spec_b.package_spec, {"b1"}};
+ {
+ // with defaults of c (c1)
+ auto deps = vcpkg::Dependencies::resolve_deps_as_top_level(
+ *spec_map.map.at("c").source_control_file, Triplet::X86_WINDOWS, {"default"}, var_provider);
+ REQUIRE(deps.size() == 1);
+ REQUIRE(deps.at(0) == spec_b_with_b1);
+ }
+ {
+ // with c1
+ auto deps = vcpkg::Dependencies::resolve_deps_as_top_level(
+ *spec_map.map.at("c").source_control_file, Triplet::X86_WINDOWS, {"c1"}, var_provider);
+ REQUIRE(deps.size() == 1);
+ REQUIRE(deps.at(0) == spec_b_with_b1);
+ }
+ {
+ // with c2 implying c1
+ auto deps = vcpkg::Dependencies::resolve_deps_as_top_level(
+ *spec_map.map.at("c").source_control_file, Triplet::X86_WINDOWS, {"c2"}, var_provider);
+ REQUIRE(deps.size() == 2);
+ REQUIRE(deps.at(0) == spec_a);
+ REQUIRE(deps.at(1) == spec_b_with_b1);
+ }
+ {
+ // d -> c[core]
+ auto deps = vcpkg::Dependencies::resolve_deps_as_top_level(
+ *spec_map.map.at("d").source_control_file, Triplet::X86_WINDOWS, {}, var_provider);
+ REQUIRE(deps.size() == 1);
+ REQUIRE(deps.at(0) == spec_c);
+ }
+}