From 40127b702e17a9e6cde6c205917ec7f99d5494ae Mon Sep 17 00:00:00 2001 From: scawful Date: Sun, 28 Sep 2025 16:32:02 -0400 Subject: [PATCH] Refactor message tests to improve ROM loading checks and class naming - Renamed `MessageTest` to `MessageRomTest` for clarity in context. - Added checks to skip tests if the ROM file is not available or if tests are disabled via environment variable, enhancing test robustness. - Updated all test cases to use the new class name, ensuring consistency across the test suite. --- test/unit/zelda3/message_test.cc | 59 ++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 25 deletions(-) diff --git a/test/unit/zelda3/message_test.cc b/test/unit/zelda3/message_test.cc index 0c9b8d05..37b655e1 100644 --- a/test/unit/zelda3/message_test.cc +++ b/test/unit/zelda3/message_test.cc @@ -1,4 +1,5 @@ #include +#include #include "app/editor/message/message_data.h" #include "app/editor/message/message_editor.h" @@ -7,13 +8,21 @@ namespace yaze { namespace test { -class MessageTest : public ::testing::Test { +class MessageRomTest : public ::testing::Test { protected: void SetUp() override { -#if defined(__linux__) - GTEST_SKIP(); -#endif - EXPECT_OK(rom_.LoadFromFile("zelda3.sfc")); + // Skip tests if ROM is not available + if (getenv("YAZE_SKIP_ROM_TESTS")) { + GTEST_SKIP() << "ROM tests disabled"; + } + + // Check if ROM file exists + std::string rom_path = "zelda3.sfc"; + if (!std::filesystem::exists(rom_path)) { + GTEST_SKIP() << "Test ROM not found: " << rom_path; + } + + EXPECT_OK(rom_.LoadFromFile(rom_path)); dictionary_ = editor::BuildDictionaryEntries(&rom_); } void TearDown() override {} @@ -23,7 +32,7 @@ class MessageTest : public ::testing::Test { std::vector dictionary_; }; -TEST_F(MessageTest, ParseSingleMessage_CommandParsing) { +TEST_F(MessageRomTest, ParseSingleMessage_CommandParsing) { std::vector mock_data = {0x6A, 0x7F, 0x00}; int pos = 0; @@ -36,7 +45,7 @@ TEST_F(MessageTest, ParseSingleMessage_CommandParsing) { EXPECT_EQ(pos, 2); } -TEST_F(MessageTest, ParseSingleMessage_BasicAscii) { +TEST_F(MessageRomTest, ParseSingleMessage_BasicAscii) { // A, B, C, terminator std::vector mock_data = {0x00, 0x01, 0x02, 0x7F, 0x00}; int pos = 0; @@ -52,36 +61,36 @@ TEST_F(MessageTest, ParseSingleMessage_BasicAscii) { EXPECT_THAT(parsed, ::testing::ElementsAre("ABC")); } -TEST_F(MessageTest, FindMatchingCharacter_Success) { +TEST_F(MessageRomTest, FindMatchingCharacter_Success) { EXPECT_EQ(editor::FindMatchingCharacter('A'), 0x00); EXPECT_EQ(editor::FindMatchingCharacter('Z'), 0x19); EXPECT_EQ(editor::FindMatchingCharacter('a'), 0x1A); EXPECT_EQ(editor::FindMatchingCharacter('z'), 0x33); } -TEST_F(MessageTest, FindMatchingCharacter_Failure) { +TEST_F(MessageRomTest, FindMatchingCharacter_Failure) { EXPECT_EQ(editor::FindMatchingCharacter('@'), 0xFF); EXPECT_EQ(editor::FindMatchingCharacter('#'), 0xFF); } -TEST_F(MessageTest, FindDictionaryEntry_Success) { +TEST_F(MessageRomTest, FindDictionaryEntry_Success) { EXPECT_EQ(editor::FindDictionaryEntry(0x88), 0x00); EXPECT_EQ(editor::FindDictionaryEntry(0x90), 0x08); } -TEST_F(MessageTest, FindDictionaryEntry_Failure) { +TEST_F(MessageRomTest, FindDictionaryEntry_Failure) { EXPECT_EQ(editor::FindDictionaryEntry(0x00), -1); EXPECT_EQ(editor::FindDictionaryEntry(0xFF), -1); } -TEST_F(MessageTest, ParseMessageToData_Basic) { +TEST_F(MessageRomTest, ParseMessageToData_Basic) { std::string input = "[L][C:01]ABC"; auto result = editor::ParseMessageToData(input); std::vector expected = {0x6A, 0x77, 0x01, 0x00, 0x01, 0x02}; EXPECT_EQ(result, expected); } -TEST_F(MessageTest, ReplaceAllDictionaryWords_Success) { +TEST_F(MessageRomTest, ReplaceAllDictionaryWords_Success) { std::vector mock_dict = { editor::DictionaryEntry(0x00, "test"), editor::DictionaryEntry(0x01, "message")}; @@ -90,7 +99,7 @@ TEST_F(MessageTest, ReplaceAllDictionaryWords_Success) { EXPECT_EQ(result, "This is a [D:00] [D:01]."); } -TEST_F(MessageTest, ReplaceAllDictionaryWords_NoMatch) { +TEST_F(MessageRomTest, ReplaceAllDictionaryWords_NoMatch) { std::vector mock_dict = { editor::DictionaryEntry(0x00, "hello")}; std::string input = "No matching words."; @@ -98,17 +107,17 @@ TEST_F(MessageTest, ReplaceAllDictionaryWords_NoMatch) { EXPECT_EQ(result, "No matching words."); } -TEST_F(MessageTest, ParseTextDataByte_Success) { +TEST_F(MessageRomTest, ParseTextDataByte_Success) { EXPECT_EQ(editor::ParseTextDataByte(0x00), "A"); EXPECT_EQ(editor::ParseTextDataByte(0x74), "[1]"); EXPECT_EQ(editor::ParseTextDataByte(0x88), "[D:00]"); } -TEST_F(MessageTest, ParseTextDataByte_Failure) { +TEST_F(MessageRomTest, ParseTextDataByte_Failure) { EXPECT_EQ(editor::ParseTextDataByte(0xFF), ""); } -TEST_F(MessageTest, ParseSingleMessage_SpecialCharacters) { +TEST_F(MessageRomTest, ParseSingleMessage_SpecialCharacters) { std::vector mock_data = {0x4D, 0x4E, 0x4F, 0x50, 0x7F}; int pos = 0; @@ -120,7 +129,7 @@ TEST_F(MessageTest, ParseSingleMessage_SpecialCharacters) { EXPECT_EQ(pos, 5); } -TEST_F(MessageTest, ParseSingleMessage_DictionaryReference) { +TEST_F(MessageRomTest, ParseSingleMessage_DictionaryReference) { std::vector mock_data = {0x88, 0x89, 0x7F}; int pos = 0; @@ -132,7 +141,7 @@ TEST_F(MessageTest, ParseSingleMessage_DictionaryReference) { EXPECT_EQ(pos, 3); } -TEST_F(MessageTest, ParseSingleMessage_InvalidTerminator) { +TEST_F(MessageRomTest, ParseSingleMessage_InvalidTerminator) { std::vector mock_data = {0x00, 0x01, 0x02}; // No terminator int pos = 0; @@ -140,7 +149,7 @@ TEST_F(MessageTest, ParseSingleMessage_InvalidTerminator) { EXPECT_FALSE(result.ok()); } -TEST_F(MessageTest, ParseSingleMessage_EmptyData) { +TEST_F(MessageRomTest, ParseSingleMessage_EmptyData) { std::vector mock_data = {0x7F}; int pos = 0; @@ -152,7 +161,7 @@ TEST_F(MessageTest, ParseSingleMessage_EmptyData) { EXPECT_EQ(pos, 1); } -TEST_F(MessageTest, OptimizeMessageForDictionary_Basic) { +TEST_F(MessageRomTest, OptimizeMessageForDictionary_Basic) { std::vector mock_dict = { editor::DictionaryEntry(0x00, "Link"), editor::DictionaryEntry(0x01, "Zelda")}; @@ -165,7 +174,7 @@ TEST_F(MessageTest, OptimizeMessageForDictionary_Basic) { EXPECT_EQ(optimized, "[L] rescued [D:01] from danger."); } -TEST_F(MessageTest, SetMessage_Success) { +TEST_F(MessageRomTest, SetMessage_Success) { std::vector mock_dict = { editor::DictionaryEntry(0x00, "item")}; editor::MessageData message_data; @@ -177,7 +186,7 @@ TEST_F(MessageTest, SetMessage_Success) { EXPECT_EQ(message_data.ContentsParsed, "You got an [D:00]!"); } -TEST_F(MessageTest, FindMatchingElement_CommandWithArgument) { +TEST_F(MessageRomTest, FindMatchingElement_CommandWithArgument) { std::string input = "[W:02]"; editor::ParsedElement result = editor::FindMatchingElement(input); @@ -186,14 +195,14 @@ TEST_F(MessageTest, FindMatchingElement_CommandWithArgument) { EXPECT_EQ(result.Value, 0x02); } -TEST_F(MessageTest, FindMatchingElement_InvalidCommand) { +TEST_F(MessageRomTest, FindMatchingElement_InvalidCommand) { std::string input = "[INVALID]"; editor::ParsedElement result = editor::FindMatchingElement(input); EXPECT_FALSE(result.Active); } -TEST_F(MessageTest, BuildDictionaryEntries_CorrectSize) { +TEST_F(MessageRomTest, BuildDictionaryEntries_CorrectSize) { auto result = editor::BuildDictionaryEntries(&rom_); EXPECT_EQ(result.size(), editor::kNumDictionaryEntries); EXPECT_FALSE(result.empty());