mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2026-10-24 04:28:10 +00:00
73 lines
2.3 KiB
C++
73 lines
2.3 KiB
C++
|
|
#include "Game/IW5/IW5.h"
|
|
#include "Linker.h"
|
|
#include "OatTestPaths.h"
|
|
#include "SystemTestsPaths.h"
|
|
#include "ZoneLoading.h"
|
|
|
|
#include <catch2/catch_test_macros.hpp>
|
|
#include <filesystem>
|
|
#include <format>
|
|
#include <memory>
|
|
#include <string>
|
|
|
|
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<decltype(argStrings)>, 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<IW5::AssetRawFile>("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
|