#include "Game/IW5/IW5.h" #include "Linker.h" #include "OatTestPaths.h" #include "SystemTestsPaths.h" #include "ZoneLoading.h" #include #include #include #include #include namespace fs = std::filesystem; using namespace std::literals; namespace { void PerformTest(const std::string& zoneFileName, GameVariantId expectedGameVariantId) { const auto assetSearchPath = (oat::paths::GetSystemTestsDirectory() / "Game/IW5/Simple").string(); const auto sourceSearchPath = (oat::paths::GetSystemTestsDirectory() / "Game/IW5/Simple").string(); const auto outputPath = oat::paths::GetTempDirectory("SimpleZoneIW5").string(); const char* argStrings[]{ "SystemTests", // bin "--verbose", "--asset-search-path", assetSearchPath.c_str(), "--source-search-path", sourceSearchPath.c_str(), "--output-folder", outputPath.c_str(), zoneFileName.c_str(), }; LinkerArgs args; bool shouldContinue = true; const auto couldParseArgs = args.ParseArgs(std::extent_v, argStrings, shouldContinue); REQUIRE(couldParseArgs); REQUIRE(shouldContinue); const auto linker = Linker::Create(std::move(args)); const auto linkerResult = linker->Start(); REQUIRE(linkerResult); const auto expectedZonePath = (fs::path(outputPath) / "SimpleZoneIW5.ff").string(); auto maybeZone = ZoneLoading::LoadZone(expectedZonePath, std::nullopt); REQUIRE(maybeZone); auto zone = std::move(*maybeZone); REQUIRE(zone->m_game_id == GameId::IW5); REQUIRE(zone->m_variant_id == expectedGameVariantId); REQUIRE(zone->m_name == "SimpleZoneIW5"); REQUIRE(zone->m_pools.GetTotalAssetCount() == 1); REQUIRE(zone->m_pools.GetAsset("SimpleZone.txt")); } TEST_CASE("Simple Zone(IW5|pc32)", "[iw5][pc32][system][simple]") { PerformTest("SimpleZoneIW5_32", GameVariantId::IW5_PC32); } TEST_CASE("Simple Zone(IW5|pc64)", "[iw5][pc64][system][simple]") { PerformTest("SimpleZoneIW5_64", GameVariantId::IW5_PC64); } } // namespace