mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-12-27 12:31:50 +00:00
chore: add ExtendAndDereference system test
This commit is contained in:
@@ -0,0 +1,4 @@
|
|||||||
|
>game,T6
|
||||||
|
|
||||||
|
techniqueset,trivial_floatz_2992w610
|
||||||
|
material,test
|
||||||
9
test/SystemTests/Game/T6/ExtendAndDereference/README.md
Normal file
9
test/SystemTests/Game/T6/ExtendAndDereference/README.md
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# Extend and dereference system test
|
||||||
|
|
||||||
|
This makes sure that when reusing assets from an existing zone, asset dependencies that are references can be overwritten to be non-references.
|
||||||
|
|
||||||
|
In this case:
|
||||||
|
|
||||||
|
- The zone `ZoneWithTechsetT6` contains the techniqueset `trivial_floatz_2992w610`
|
||||||
|
- The zone `ZoneWithMaterialT6` contains the material `test` and with a reference to its techniqueset `,trivial_floatz_2992w610`
|
||||||
|
- The final zone `CombinedZoneT6` is built while loading both of the other fastfile and is expected to contain both the material `test` with a reference to a (actual asset, not a reference) techniqueset `trivial_floatz_2992w610`
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
>game,T6
|
||||||
|
|
||||||
|
ignore,ZoneWithTechsetT6
|
||||||
|
material,test
|
||||||
Binary file not shown.
@@ -0,0 +1,3 @@
|
|||||||
|
>game,T6
|
||||||
|
|
||||||
|
techniqueset,trivial_floatz_2992w610
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://openassettools.dev/schema/material.v1.json",
|
||||||
|
"_game": "t6",
|
||||||
|
"_type": "material",
|
||||||
|
"_version": 1,
|
||||||
|
"cameraRegion": "none",
|
||||||
|
"constants": [],
|
||||||
|
"contents": 1,
|
||||||
|
"gameFlags": [],
|
||||||
|
"layeredSurfaceTypes": 536870912,
|
||||||
|
"sortKey": 4,
|
||||||
|
"stateBits": [
|
||||||
|
{
|
||||||
|
"alphaTest": "disabled",
|
||||||
|
"blendOpAlpha": "disabled",
|
||||||
|
"blendOpRgb": "disabled",
|
||||||
|
"colorWriteAlpha": true,
|
||||||
|
"colorWriteRgb": true,
|
||||||
|
"cullFace": "back",
|
||||||
|
"depthTest": "disabled",
|
||||||
|
"depthWrite": false,
|
||||||
|
"dstBlendAlpha": "zero",
|
||||||
|
"dstBlendRgb": "zero",
|
||||||
|
"polygonOffset": "offset0",
|
||||||
|
"polymodeLine": false,
|
||||||
|
"srcBlendAlpha": "one",
|
||||||
|
"srcBlendRgb": "one"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateBitsEntry": [
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
0,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
-1
|
||||||
|
],
|
||||||
|
"stateFlags": 0,
|
||||||
|
"surfaceFlags": 0,
|
||||||
|
"surfaceTypeBits": 0,
|
||||||
|
"techniqueSet": "trivial_floatz_2992w610",
|
||||||
|
"textureAtlas": {
|
||||||
|
"columns": 1,
|
||||||
|
"rows": 1
|
||||||
|
},
|
||||||
|
"textures": []
|
||||||
|
}
|
||||||
119
test/SystemTests/Game/T6/ExtendAndDereferenceT6.cpp
Normal file
119
test/SystemTests/Game/T6/ExtendAndDereferenceT6.cpp
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
#include "Game/T6/GameAssetPoolT6.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 BuildZoneWithMaterial(const fs::path& testDir, const fs::path& outputPath)
|
||||||
|
{
|
||||||
|
const auto testDirStr = testDir.string();
|
||||||
|
const auto outputPathStr = outputPath.string();
|
||||||
|
|
||||||
|
const char* argStrings[]{
|
||||||
|
"SystemTests", // bin
|
||||||
|
"--verbose",
|
||||||
|
"--asset-search-path",
|
||||||
|
testDirStr.c_str(),
|
||||||
|
"--source-search-path",
|
||||||
|
testDirStr.c_str(),
|
||||||
|
"--output-folder",
|
||||||
|
outputPathStr.c_str(),
|
||||||
|
"ZoneWithMaterialT6",
|
||||||
|
};
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BuildCombinedZone(const fs::path& testDir, const fs::path& outputPath)
|
||||||
|
{
|
||||||
|
const auto testDirStr = testDir.string();
|
||||||
|
const auto outputPathStr = outputPath.string();
|
||||||
|
|
||||||
|
const auto zoneWithTechsetPathStr = (testDir / "ZoneWithTechsetT6.ff").string();
|
||||||
|
const auto zoneWithMaterialPathStr = (outputPath / "ZoneWithMaterialT6.ff").string();
|
||||||
|
|
||||||
|
const char* argStrings[]{
|
||||||
|
"SystemTests", // bin
|
||||||
|
"--verbose",
|
||||||
|
"--load",
|
||||||
|
zoneWithTechsetPathStr.c_str(),
|
||||||
|
"--load",
|
||||||
|
zoneWithMaterialPathStr.c_str(),
|
||||||
|
"--source-search-path",
|
||||||
|
testDirStr.c_str(),
|
||||||
|
"--output-folder",
|
||||||
|
outputPathStr.c_str(),
|
||||||
|
"CombinedZoneT6",
|
||||||
|
};
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CheckCombinedZoneContent(const fs::path& outputPath)
|
||||||
|
{
|
||||||
|
const auto expectedZonePath = (fs::path(outputPath) / "CombinedZoneT6.ff").string();
|
||||||
|
auto maybeZone = ZoneLoading::LoadZone(expectedZonePath, std::nullopt);
|
||||||
|
REQUIRE(maybeZone);
|
||||||
|
|
||||||
|
auto zone = std::move(*maybeZone);
|
||||||
|
auto pools = dynamic_cast<GameAssetPoolT6*>(zone->m_pools.get());
|
||||||
|
|
||||||
|
REQUIRE(zone->m_game_id == GameId::T6);
|
||||||
|
REQUIRE(zone->m_platform == GamePlatform::PC);
|
||||||
|
REQUIRE(zone->m_name == "CombinedZoneT6");
|
||||||
|
REQUIRE(pools->GetTotalAssetCount() == 2);
|
||||||
|
REQUIRE(pools->m_technique_set->GetAsset("trivial_floatz_2992w610"));
|
||||||
|
|
||||||
|
const auto* material = pools->m_material->GetAsset("test");
|
||||||
|
REQUIRE(material);
|
||||||
|
REQUIRE(material->Asset()->techniqueSet);
|
||||||
|
REQUIRE(material->Asset()->techniqueSet->name == "trivial_floatz_2992w610"s);
|
||||||
|
REQUIRE(material->Asset()->techniqueSet->techniques[T6::TECHNIQUE_UNLIT]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// x64 for now produces invalid zones, don't try to load them yet
|
||||||
|
#ifdef ARCH_x86
|
||||||
|
TEST_CASE("Extend and dereference(T6)", "[t6][system][simple]")
|
||||||
|
{
|
||||||
|
const auto testDir = oat::paths::GetSystemTestsDirectory() / "Game/T6/ExtendAndDereference";
|
||||||
|
const auto outputPath = oat::paths::GetTempDirectory("ExtendAndDereferenceT6");
|
||||||
|
|
||||||
|
BuildZoneWithMaterial(testDir, outputPath);
|
||||||
|
BuildCombinedZone(testDir, outputPath);
|
||||||
|
CheckCombinedZoneContent(outputPath);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
} // namespace
|
||||||
Reference in New Issue
Block a user