1#include <gtest/gtest.h>
15 if (getenv(
"YAZE_SKIP_ROM_TESTS")) {
16 GTEST_SKIP() <<
"ROM tests disabled";
20 std::string rom_path =
"zelda3.sfc";
21 if (!std::filesystem::exists(rom_path)) {
22 GTEST_SKIP() <<
"Test ROM not found: " << rom_path;
36 std::vector<uint8_t> mock_data = {0x6A, 0x7F, 0x00};
40 EXPECT_TRUE(result.ok());
41 const auto message_data = result.value();
44 EXPECT_EQ(message_data.ContentsParsed,
"[L]");
50 std::vector<uint8_t> mock_data = {0x00, 0x01, 0x02, 0x7F, 0x00};
54 ASSERT_TRUE(result.ok());
55 const auto message_data = result.value();
58 std::vector<editor::MessageData> message_data_vector = {message_data};
61 EXPECT_THAT(parsed, ::testing::ElementsAre(
"ABC"));
87 std::string input =
"[L][C:01]ABC";
89 std::vector<uint8_t> expected = {0x6A, 0x77, 0x01, 0x00, 0x01, 0x02};
90 EXPECT_EQ(result, expected);
94 std::vector<editor::DictionaryEntry> mock_dict = {
97 std::string input =
"This is a test message.";
99 EXPECT_EQ(result,
"This is a [D:00] [D:01].");
103 std::vector<editor::DictionaryEntry> mock_dict = {
105 std::string input =
"No matching words.";
107 EXPECT_EQ(result,
"No matching words.");
121 std::vector<uint8_t> mock_data = {0x4D, 0x4E, 0x4F, 0x50, 0x7F};
125 ASSERT_TRUE(result.ok());
126 const auto message_data = result.value();
128 EXPECT_EQ(message_data.ContentsParsed,
"[UP][DOWN][LEFT][RIGHT]");
133 std::vector<uint8_t> mock_data = {0x88, 0x89, 0x7F};
137 ASSERT_TRUE(result.ok());
138 const auto message_data = result.value();
140 EXPECT_EQ(message_data.ContentsParsed,
"[D:00][D:01]");
145 std::vector<uint8_t> mock_data = {0x00, 0x01, 0x02};
149 EXPECT_FALSE(result.ok());
153 std::vector<uint8_t> mock_data = {0x7F};
157 ASSERT_TRUE(result.ok());
158 const auto message_data = result.value();
160 EXPECT_EQ(message_data.ContentsParsed,
"");
165 std::vector<editor::DictionaryEntry> mock_dict = {
168 std::string input =
"[L] rescued Zelda from danger.";
171 std::string optimized =
174 EXPECT_EQ(optimized,
"[L] rescued [D:01] from danger.");
178 std::vector<editor::DictionaryEntry> mock_dict = {
181 std::string input =
"You got an item!";
185 EXPECT_EQ(message_data.
RawString,
"You got an item!");
190 std::string input =
"[W:02]";
193 EXPECT_TRUE(result.
Active);
195 EXPECT_EQ(result.
Value, 0x02);
199 std::string input =
"[INVALID]";
202 EXPECT_FALSE(result.
Active);
208 EXPECT_FALSE(result.empty());
218 std::vector<uint8_t> data = {0x6B, 0x01, 0x00, 0x01, 0x02};
225 std::vector<editor::MessageData> message_data_vector = {message};
229 EXPECT_EQ(parsed[0],
"[W:01]ABC");
232 EXPECT_EQ(parsed[0].find(
"BABC"), std::string::npos);
233 EXPECT_EQ(parsed[0].find(
"AABC"), std::string::npos);
239 std::vector<uint8_t> data = {
249 std::vector<editor::MessageData> message_data_vector = {message};
252 EXPECT_EQ(parsed[0],
"[W:01][C:02]AB");
255 EXPECT_EQ(parsed[0].find(
"BAB"), std::string::npos);
256 EXPECT_EQ(parsed[0].find(
"CAB"), std::string::npos);
262 std::vector<uint8_t> data = {
271 std::vector<editor::MessageData> message_data_vector = {message};
274 EXPECT_EQ(parsed[0],
"[K]ABC");
280 std::vector<uint8_t> data = {
293 std::vector<editor::MessageData> message_data_vector = {message};
296 EXPECT_EQ(parsed[0],
"[W:01]A[K]B[C:02]C");
The Rom class is used to load, save, and modify Rom data.
absl::Status LoadFromFile(const std::string &filename, bool z3_load=true)
editor::MessageEditor message_editor_
std::vector< editor::DictionaryEntry > dictionary_
uint8_t FindMatchingCharacter(char value)
std::string ParseTextDataByte(uint8_t value)
std::string ReplaceAllDictionaryWords(std::string str, const std::vector< DictionaryEntry > &dictionary)
constexpr int kNumDictionaryEntries
absl::StatusOr< MessageData > ParseSingleMessage(const std::vector< uint8_t > &rom_data, int *current_pos)
std::vector< std::string > ParseMessageData(std::vector< MessageData > &message_data, const std::vector< DictionaryEntry > &dictionary_entries)
std::vector< DictionaryEntry > BuildDictionaryEntries(Rom *rom)
std::vector< uint8_t > ParseMessageToData(std::string str)
ParsedElement FindMatchingElement(const std::string &str)
int8_t FindDictionaryEntry(uint8_t value)
TEST_F(DungeonObjectRenderingE2ETests, RunAllTests)
Main namespace for the application.
std::vector< uint8_t > Data
std::string ContentsParsed
std::string OptimizeMessageForDictionary(std::string_view message_string, const std::vector< DictionaryEntry > &dictionary)
void SetMessage(const std::string &message, const std::vector< DictionaryEntry > &dictionary)