1#ifndef YAZE_APP_TEST_OVERWORLD_EDITOR_TEST_SUITE_H
2#define YAZE_APP_TEST_OVERWORLD_EDITOR_TEST_SUITE_H
7#include "absl/strings/str_format.h"
22 std::string
GetName()
const override {
return "Overworld Editor Tests"; }
30 if (!current_rom || !current_rom->
is_loaded()) {
31 AddSkippedTest(results,
"Overworld_Editor_Check",
"No ROM loaded");
32 return absl::OkStatus();
43 return absl::OkStatus();
47 ImGui::Text(
"%s Overworld Editor Test Configuration",
ICON_MD_MAP);
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 =
"Overworld_Tile_Placement";
79 test_manager.TestRomWithCopy(rom, [&](
Rom* test_rom) -> absl::Status {
97 int new_tile_id = 0x0123;
104 return absl::InternalError(
"AutomationSetTile failed");
110 if (actual_tile != new_tile_id) {
111 return absl::InternalError(
112 absl::StrFormat(
"Tile mismatch: expected 0x%04X, got 0x%04X",
113 new_tile_id, actual_tile));
116 return absl::OkStatus();
119 if (test_status.ok()) {
127 }
catch (
const std::exception& e) {
132 auto end_time = std::chrono::steady_clock::now();
133 result.
duration = std::chrono::duration_cast<std::chrono::milliseconds>(
134 end_time - start_time);
140 auto start_time = std::chrono::steady_clock::now();
143 result.
name =
"Overworld_Entity_Manipulation";
151 test_manager.TestRomWithCopy(rom, [&](
Rom* test_rom) -> absl::Status {
163 auto* current_map_data = editor.
overworld().current_map_data();
164 if (!current_map_data) {
165 return absl::InternalError(
"Failed to get current map data");
168 size_t initial_sprite_count = current_map_data->sprites().size();
177 new_sprite.
set_x(100);
178 new_sprite.
set_y(100);
180 current_map_data->mutable_sprites()->push_back(new_sprite);
182 if (current_map_data->sprites().size() !=
183 initial_sprite_count + 1) {
184 return absl::InternalError(
185 "Failed to add sprite to overworld map");
188 return absl::OkStatus();
191 if (test_status.ok()) {
193 result.
error_message =
"Overworld entity manipulation verified";
199 }
catch (
const std::exception& e) {
204 auto end_time = std::chrono::steady_clock::now();
205 result.
duration = std::chrono::duration_cast<std::chrono::milliseconds>(
206 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...
Main UI class for editing overworld maps in A Link to the Past.
void SetGameData(zelda3::GameData *game_data) override
void set_current_map(int map_id)
Set the current map for editing (also updates world)
void Initialize() override
bool AutomationSetTile(int x, int y, int tile_id)
zelda3::Overworld & overworld()
Access the underlying Overworld data.
absl::Status Load() override
int AutomationGetTile(int x, int y)
absl::Status RunTests(TestResults &results) override
void RunEntityManipulationTest(TestResults &results, Rom *rom)
OverworldEditorTestSuite()=default
std::string GetName() const override
TestCategory GetCategory() const override
void RunTilePlacementTest(TestResults &results, Rom *rom)
void DrawConfiguration() override
bool test_entity_manipulation_
bool test_tile_placement_
~OverworldEditorTestSuite() override=default
void AddSkippedTest(TestResults &results, const std::string &test_name, const std::string &reason)
Rom * GetCurrentRom() const
static TestManager & Get()
A class for managing sprites in the overworld and underworld.
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)