1#ifndef YAZE_APP_TEST_DUNGEON_EDITOR_TEST_SUITE_H
2#define YAZE_APP_TEST_DUNGEON_EDITOR_TEST_SUITE_H
7#include "absl/strings/str_format.h"
22 std::string
GetName()
const override {
return "Dungeon Editor Tests"; }
30 if (!current_rom || !current_rom->
is_loaded()) {
32 return absl::OkStatus();
43 return absl::OkStatus();
47 ImGui::Text(
"%s Dungeon Editor Test Configuration",
ICON_MD_BUILD);
55 const std::string& reason) {
57 result.
name = test_name;
62 result.
duration = std::chrono::milliseconds{0};
63 result.
timestamp = std::chrono::steady_clock::now();
68 auto start_time = std::chrono::steady_clock::now();
71 result.
name =
"Dungeon_Object_Manipulation";
80 test_manager.TestRomWithCopy(rom, [&](
Rom* test_rom) -> absl::Status {
95 auto& rooms = editor.
rooms();
96 auto& room = rooms[room_id];
98 size_t initial_count = room.objects().size();
107 room.mutable_objects()->push_back(new_obj);
109 if (room.objects().size() != initial_count + 1) {
110 return absl::InternalError(
"Failed to add object to room list");
113 return absl::OkStatus();
116 if (test_status.ok()) {
124 }
catch (
const std::exception& e) {
129 auto end_time = std::chrono::steady_clock::now();
130 result.
duration = std::chrono::duration_cast<std::chrono::milliseconds>(
131 end_time - start_time);
137 auto start_time = std::chrono::steady_clock::now();
140 result.
name =
"Dungeon_Room_Save";
149 test_manager.TestRomWithCopy(rom, [&](
Rom* test_rom) -> absl::Status {
161 auto& room = editor.
rooms()[room_id];
162 if (room.objects().empty()) {
168 room.mutable_objects()->push_back(new_obj);
171 auto* obj = room.mutable_object(0);
172 obj->set_x(obj->x() + 1);
186 loaded_room.
SetRom(test_rom);
197 if (test_rom->
size() == 0) {
198 return absl::InternalError(
"ROM corrupted (size 0) after save");
201 return absl::OkStatus();
204 if (test_status.ok()) {
212 }
catch (
const std::exception& e) {
217 auto end_time = std::chrono::steady_clock::now();
218 result.
duration = std::chrono::duration_cast<std::chrono::milliseconds>(
219 end_time - start_time);
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
DungeonEditorV2 - Simplified dungeon editor using component delegation.
absl::Status SaveRoom(int room_id)
void add_room(int room_id)
void Initialize() override
void SetGameData(zelda3::GameData *game_data) override
std::array< zelda3::Room, 0x128 > & rooms()
Manages loading and saving of dungeon room data.
void SetGameData(zelda3::GameData *game_data)
TestCategory GetCategory() const override
absl::Status RunTests(TestResults &results) override
void RunRoomSaveTest(TestResults &results, Rom *rom)
void DrawConfiguration() override
std::string GetName() const override
~DungeonEditorTestSuite() override=default
DungeonEditorTestSuite()=default
void RunObjectManipulationTest(TestResults &results, Rom *rom)
void AddSkippedTest(TestResults &results, const std::string &test_name, const std::string &reason)
bool test_object_manipulation_
Rom * GetCurrentRom() const
static TestManager & Get()
void SetGameData(GameData *data)
absl::Status LoadGameData(Rom &rom, GameData &data, const LoadOptions &options)
Loads all Zelda3-specific game data from a generic ROM.
#define RETURN_IF_ERROR(expr)
std::chrono::milliseconds duration
std::string error_message
std::chrono::time_point< std::chrono::steady_clock > timestamp
void AddResult(const TestResult &result)