yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
room_manipulation_test.cc
Go to the documentation of this file.
1// Tests for Room object manipulation methods (Phase 3)
2
3#include <gtest/gtest.h>
4#include "app/rom.h"
7
8namespace yaze {
9namespace zelda3 {
10namespace test {
11
12class RoomManipulationTest : public ::testing::Test {
13 protected:
14 void SetUp() override {
15 rom_ = std::make_unique<Rom>();
16 // Create a minimal ROM for testing
17 std::vector<uint8_t> dummy_data(0x200000, 0);
18 rom_->LoadFromData(dummy_data, false);
19
20 room_ = std::make_unique<Room>(0, rom_.get());
21 }
22
23 std::unique_ptr<Rom> rom_;
24 std::unique_ptr<Room> room_;
25};
26
28 RoomObject obj(0x10, 10, 20, 3, 0);
29
30 auto status = room_->AddObject(obj);
31 ASSERT_TRUE(status.ok());
32
33 auto objects = room_->GetTileObjects();
34 EXPECT_EQ(objects.size(), 1);
35 EXPECT_EQ(objects[0].id_, 0x10);
36 EXPECT_EQ(objects[0].x(), 10);
37 EXPECT_EQ(objects[0].y(), 20);
38}
39
40TEST_F(RoomManipulationTest, AddInvalidObject) {
41 // Invalid X position (> 63)
42 RoomObject obj(0x10, 100, 20, 3, 0);
43
44 auto status = room_->AddObject(obj);
45 EXPECT_FALSE(status.ok());
46 EXPECT_EQ(room_->GetTileObjects().size(), 0);
47}
48
50 RoomObject obj1(0x10, 10, 20, 3, 0);
51 RoomObject obj2(0x20, 15, 25, 2, 1);
52
53 room_->AddObject(obj1);
54 room_->AddObject(obj2);
55
56 EXPECT_EQ(room_->GetTileObjects().size(), 2);
57
58 auto status = room_->RemoveObject(0);
59 ASSERT_TRUE(status.ok());
60
61 auto objects = room_->GetTileObjects();
62 EXPECT_EQ(objects.size(), 1);
63 EXPECT_EQ(objects[0].id_, 0x20);
64}
65
66TEST_F(RoomManipulationTest, RemoveInvalidIndex) {
67 auto status = room_->RemoveObject(0);
68 EXPECT_FALSE(status.ok());
69}
70
72 RoomObject obj(0x10, 10, 20, 3, 0);
73 room_->AddObject(obj);
74
75 RoomObject updated(0x20, 15, 25, 5, 1);
76 auto status = room_->UpdateObject(0, updated);
77 ASSERT_TRUE(status.ok());
78
79 auto objects = room_->GetTileObjects();
80 EXPECT_EQ(objects[0].id_, 0x20);
81 EXPECT_EQ(objects[0].x(), 15);
82 EXPECT_EQ(objects[0].y(), 25);
83}
84
86 RoomObject obj1(0x10, 10, 20, 3, 0);
87 RoomObject obj2(0x20, 15, 25, 2, 1);
88
89 room_->AddObject(obj1);
90 room_->AddObject(obj2);
91
92 auto result = room_->FindObjectAt(15, 25, 1);
93 ASSERT_TRUE(result.ok());
94 EXPECT_EQ(result.value(), 1);
95
96 auto not_found = room_->FindObjectAt(99, 99, 0);
97 EXPECT_FALSE(not_found.ok());
98}
99
100TEST_F(RoomManipulationTest, ValidateObject) {
101 // Valid Type 1 object
102 RoomObject valid1(0x10, 10, 20, 3, 0);
103 EXPECT_TRUE(room_->ValidateObject(valid1));
104
105 // Valid Type 2 object
106 RoomObject valid2(0x110, 30, 40, 0, 1);
107 EXPECT_TRUE(room_->ValidateObject(valid2));
108
109 // Invalid X (> 63)
110 RoomObject invalid_x(0x10, 100, 20, 3, 0);
111 EXPECT_FALSE(room_->ValidateObject(invalid_x));
112
113 // Invalid layer (> 2)
114 RoomObject invalid_layer(0x10, 10, 20, 3, 5);
115 EXPECT_FALSE(room_->ValidateObject(invalid_layer));
116
117 // Invalid size for Type 1 (> 15)
118 RoomObject invalid_size(0x10, 10, 20, 20, 0);
119 EXPECT_FALSE(room_->ValidateObject(invalid_size));
120}
121
122TEST_F(RoomManipulationTest, MultipleOperations) {
123 // Add several objects
124 for (int i = 0; i < 5; i++) {
125 RoomObject obj(0x10 + i, i * 5, i * 6, i, 0);
126 ASSERT_TRUE(room_->AddObject(obj).ok());
127 }
128
129 EXPECT_EQ(room_->GetTileObjects().size(), 5);
130
131 // Update middle object
132 RoomObject updated(0x99, 30, 35, 7, 1);
133 ASSERT_TRUE(room_->UpdateObject(2, updated).ok());
134
135 // Verify update
136 auto objects = room_->GetTileObjects();
137 EXPECT_EQ(objects[2].id_, 0x99);
138
139 // Remove first object
140 ASSERT_TRUE(room_->RemoveObject(0).ok());
141 EXPECT_EQ(room_->GetTileObjects().size(), 4);
142
143 // Verify first object is now what was second
144 EXPECT_EQ(room_->GetTileObjects()[0].id_, 0x11);
145}
146
147TEST_F(RoomManipulationTest, LayerOrganization) {
148 // Add objects to different layers
149 RoomObject layer0_obj(0x10, 10, 10, 2, 0);
150 RoomObject layer1_obj(0x20, 20, 20, 3, 1);
151 RoomObject layer2_obj(0x30, 30, 30, 4, 2);
152
153 room_->AddObject(layer0_obj);
154 room_->AddObject(layer1_obj);
155 room_->AddObject(layer2_obj);
156
157 // Verify can find by layer
158 EXPECT_TRUE(room_->FindObjectAt(10, 10, 0).ok());
159 EXPECT_TRUE(room_->FindObjectAt(20, 20, 1).ok());
160 EXPECT_TRUE(room_->FindObjectAt(30, 30, 2).ok());
161
162 // Wrong layer should not find
163 EXPECT_FALSE(room_->FindObjectAt(10, 10, 1).ok());
164}
165
166} // namespace test
167} // namespace zelda3
168} // namespace yaze
169
TEST_F(RoomIntegrationTest, BasicLoadSaveRoundTrip)
Main namespace for the application.