58 lines
1.8 KiB
C++
58 lines
1.8 KiB
C++
// nix-store-gated integration test for resolver::nix_cmake_scan.
|
|
// Realizes nixpkgs#fmt.dev (cheap if already cached) and verifies that
|
|
// nix_cmake_scan picks up its real *-targets.cmake IMPORTED targets.
|
|
|
|
#include <catch2/catch_test_macros.hpp>
|
|
|
|
import cargoxx.resolver;
|
|
import cargoxx.exec;
|
|
import cargoxx.util;
|
|
import std;
|
|
|
|
namespace {
|
|
|
|
auto network_tests_enabled() -> bool {
|
|
auto* env = std::getenv("CARGOXX_NETWORK_TESTS");
|
|
return env != nullptr && std::string_view{env} == "1";
|
|
}
|
|
|
|
auto realize(std::string_view attr) -> std::optional<std::filesystem::path> {
|
|
auto r = cargoxx::exec::run(
|
|
"nix",
|
|
{"--extra-experimental-features", "nix-command flakes",
|
|
"build", std::format("nixpkgs#{}", attr),
|
|
"--no-link", "--print-out-paths"},
|
|
cargoxx::exec::ExecOptions{
|
|
.cwd = {},
|
|
.env_overrides = {},
|
|
.timeout = std::chrono::seconds{180},
|
|
.inherit_stdio = false,
|
|
});
|
|
if (!r || r->exit_code != 0) {
|
|
return std::nullopt;
|
|
}
|
|
auto path = r->stdout_text;
|
|
while (!path.empty() && (path.back() == '\n' || path.back() == ' ')) {
|
|
path.pop_back();
|
|
}
|
|
return std::filesystem::path{path};
|
|
}
|
|
|
|
} // namespace
|
|
|
|
TEST_CASE("nix_cmake_scan finds fmt's IMPORTED targets",
|
|
"[resolver][network]") {
|
|
if (!network_tests_enabled()) {
|
|
SKIP("CARGOXX_NETWORK_TESTS != 1");
|
|
}
|
|
auto p = realize("fmt.dev");
|
|
REQUIRE(p.has_value());
|
|
|
|
auto r = cargoxx::resolver::nix_cmake_scan(*p, "fmt");
|
|
REQUIRE(r.has_value());
|
|
REQUIRE(r->find_package == "fmt CONFIG REQUIRED");
|
|
// fmt-targets.cmake declares fmt::fmt + fmt::fmt-header-only.
|
|
REQUIRE(std::ranges::find(r->targets, std::string{"fmt::fmt"}) !=
|
|
r->targets.end());
|
|
}
|