fix bug where splitter filters were not taken over to blueprint

This commit is contained in:
2026-06-23 21:08:46 +02:00
parent d271d65678
commit 577927ef70
6 changed files with 123 additions and 2 deletions

View File

@@ -10,6 +10,7 @@
#include "Blueprint.h"
#include "BlueprintSerializer.h"
#include "BuildingType.h"
#include "ItemType.h"
#include "Rotation.h"
#include "ShipLayout.h"
@@ -263,3 +264,42 @@ TEST_CASE("BlueprintSerializer: shipyard with empty modules list round-trips", "
REQUIRE(loaded[0].buildings[0].shipLayout.has_value());
REQUIRE(loaded[0].buildings[0].shipLayout->placedModules.empty());
}
// ---------------------------------------------------------------------------
// Splitter output filters round-trip through TOML serialization
// (REQ-UI-BLUEPRINT-STORAGE).
// ---------------------------------------------------------------------------
TEST_CASE("BlueprintSerializer: splitter output filters round-trip", "[serializer]")
{
BlueprintBuilding splitter =
makeBuilding(BuildingType::Splitter, Rotation::East, QPoint(0, 0));
splitter.splitterFilterA = { ItemType{"iron_ore"}, ItemType{"copper_ore"} };
splitter.splitterFilterB = { ItemType{"scrap"} };
const Blueprint original = makeBlueprintWith({ splitter }, "Sorter");
const std::string toml = BlueprintSerializer::serialize({ original });
const std::vector<Blueprint> loaded = BlueprintSerializer::deserialize(toml);
REQUIRE(loaded.size() == 1);
REQUIRE(loaded[0].buildings.size() == 1);
const BlueprintBuilding& b = loaded[0].buildings[0];
REQUIRE(b.splitterFilterA
== std::vector<ItemType>{ ItemType{"iron_ore"}, ItemType{"copper_ore"} });
REQUIRE(b.splitterFilterB == std::vector<ItemType>{ ItemType{"scrap"} });
}
TEST_CASE("BlueprintSerializer: splitter with no filters round-trips empty", "[serializer]")
{
const Blueprint original = makeBlueprintWith(
{ makeBuilding(BuildingType::Splitter, Rotation::East, QPoint(0, 0)) }, "Open");
const std::string toml = BlueprintSerializer::serialize({ original });
const std::vector<Blueprint> loaded = BlueprintSerializer::deserialize(toml);
REQUIRE(loaded.size() == 1);
REQUIRE(loaded[0].buildings.size() == 1);
REQUIRE(loaded[0].buildings[0].splitterFilterA.empty());
REQUIRE(loaded[0].buildings[0].splitterFilterB.empty());
}