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;
103 return absl::InternalError(
"AutomationSetTile failed");
108 if (actual_tile != new_tile_id) {
109 return absl::InternalError(absl::StrFormat(
110 "Tile mismatch: expected 0x%04X, got 0x%04X", new_tile_id, actual_tile));
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 =
"Overworld_Entity_Manipulation";
148 test_manager.TestRomWithCopy(rom, [&](
Rom* test_rom) -> absl::Status {
160 auto* current_map_data = editor.
overworld().current_map_data();
161 if (!current_map_data) {
162 return absl::InternalError(
"Failed to get current map data");
165 size_t initial_sprite_count = current_map_data->sprites().size();
174 new_sprite.
set_x(100);
175 new_sprite.
set_y(100);
177 current_map_data->mutable_sprites()->push_back(new_sprite);
179 if (current_map_data->sprites().size() != initial_sprite_count + 1) {
180 return absl::InternalError(
"Failed to add sprite to overworld map");
183 return absl::OkStatus();
186 if (test_status.ok()) {
188 result.
error_message =
"Overworld entity manipulation verified";
194 }
catch (
const std::exception& e) {
199 auto end_time = std::chrono::steady_clock::now();
200 result.
duration = std::chrono::duration_cast<std::chrono::milliseconds>(
201 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)