diff --git a/CMakeLists.txt b/CMakeLists.txt index 25cc7666..90126edd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -250,7 +250,7 @@ set (LOOT_TESTS_HEADERS "${CMAKE_SOURCE_DIR}/src/tests/base_game_test.h" "${CMAKE_SOURCE_DIR}/src/tests/backend/metadata/location_test.h" "${CMAKE_SOURCE_DIR}/src/tests/backend/metadata/message_test.h" "${CMAKE_SOURCE_DIR}/src/tests/backend/metadata/message_content_test.h" - "${CMAKE_SOURCE_DIR}/src/tests/backend/metadata/test_plugin_dirty_info.h" + "${CMAKE_SOURCE_DIR}/src/tests/backend/metadata/plugin_dirty_info_test.h" "${CMAKE_SOURCE_DIR}/src/tests/backend/metadata/test_plugin_metadata.h" "${CMAKE_SOURCE_DIR}/src/tests/backend/metadata/test_tag.h" "${CMAKE_SOURCE_DIR}/src/tests/backend/plugin/test_plugin.h" diff --git a/src/tests/backend/metadata/test_plugin_dirty_info.h b/src/tests/backend/metadata/plugin_dirty_info_test.h similarity index 55% rename from src/tests/backend/metadata/test_plugin_dirty_info.h rename to src/tests/backend/metadata/plugin_dirty_info_test.h index 7dde296d..fca0b811 100644 --- a/src/tests/backend/metadata/test_plugin_dirty_info.h +++ b/src/tests/backend/metadata/plugin_dirty_info_test.h @@ -26,21 +26,30 @@ along with LOOT. If not, see #define LOOT_TEST_BACKEND_METADATA_PLUGIN_DIRTY_INFO #include "backend/metadata/plugin_dirty_info.h" -#include "tests/fixtures.h" +#include "tests/base_game_test.h" namespace loot { namespace test { - class PluginDirtyInfoTest : public SkyrimTest {}; + class PluginDirtyInfoTest : public BaseGameTest {}; - TEST_F(PluginDirtyInfoTest, ConstructorsAndDataAccess) { + // Pass an empty first argument, as it's a prefix for the test instantation, + // but we only have the one so no prefix is necessary. + INSTANTIATE_TEST_CASE_P(, + PluginDirtyInfoTest, + ::testing::Values( + GameSettings::tes4)); + + TEST_P(PluginDirtyInfoTest, defaultConstructorShouldLeaveAllCountsAtZeroAndTheUtilityStringEmpty) { PluginDirtyInfo info; EXPECT_EQ(0, info.CRC()); EXPECT_EQ(0, info.ITMs()); EXPECT_EQ(0, info.DeletedRefs()); EXPECT_EQ(0, info.DeletedNavmeshes()); - EXPECT_EQ("", info.CleaningUtility()); + EXPECT_TRUE(info.CleaningUtility().empty()); + } - info = PluginDirtyInfo(0x12345678, 2, 10, 30, "cleaner"); + TEST_P(PluginDirtyInfoTest, contentConstructorShouldStoreAllGivenData) { + PluginDirtyInfo info(0x12345678, 2, 10, 30, "cleaner"); EXPECT_EQ(0x12345678, info.CRC()); EXPECT_EQ(2, info.ITMs()); EXPECT_EQ(10, info.DeletedRefs()); @@ -48,10 +57,8 @@ namespace loot { EXPECT_EQ("cleaner", info.CleaningUtility()); } - TEST_F(PluginDirtyInfoTest, MessageOutput) { - Message message; - - message = PluginDirtyInfo(0x12345678, 2, 10, 30, "cleaner").AsMessage(); + TEST_P(PluginDirtyInfoTest, asMessageShouldOutputAllNonZeroCounts) { + Message message = PluginDirtyInfo(0x12345678, 2, 10, 30, "cleaner").AsMessage(); EXPECT_EQ(Message::warn, message.Type()); EXPECT_EQ("Contains 2 ITM records, 10 deleted references and 30 deleted navmeshes. Clean with cleaner.", message.ChooseContent(Language::english).Str()); @@ -84,12 +91,9 @@ namespace loot { EXPECT_EQ("Contains 2 ITM records and 10 deleted references. Clean with cleaner.", message.ChooseContent(Language::english).Str()); } - TEST_F(PluginDirtyInfoTest, EqualityOperator) { - PluginDirtyInfo info1, info2; - EXPECT_TRUE(info1 == info2); - - info1 = PluginDirtyInfo(0x12345678, 2, 10, 30, "cleaner1"); - info2 = PluginDirtyInfo(0x12345678, 4, 20, 60, "cleaner2"); + TEST_P(PluginDirtyInfoTest, dirtyInfoShouldBeEqualIfCrcValuesAreEqual) { + PluginDirtyInfo info1(0x12345678, 2, 10, 30, "cleaner1"); + PluginDirtyInfo info2(0x12345678, 4, 20, 60, "cleaner2"); EXPECT_TRUE(info1 == info2); info1 = PluginDirtyInfo(0x12345678, 2, 10, 30, "cleaner"); @@ -97,13 +101,9 @@ namespace loot { EXPECT_FALSE(info1 == info2); } - TEST_F(PluginDirtyInfoTest, LessThanOperator) { - PluginDirtyInfo info1, info2; - EXPECT_FALSE(info1 < info2); - EXPECT_FALSE(info2 < info1); - - info1 = PluginDirtyInfo(0x12345678, 2, 10, 30, "cleaner1"); - info2 = PluginDirtyInfo(0x12345678, 4, 20, 60, "cleaner2"); + TEST_P(PluginDirtyInfoTest, LessThanOperatorShouldCompareCrcValues) { + PluginDirtyInfo info1(0x12345678, 2, 10, 30, "cleaner1"); + PluginDirtyInfo info2(0x12345678, 4, 20, 60, "cleaner2"); EXPECT_FALSE(info1 < info2); EXPECT_FALSE(info2 < info1); @@ -113,81 +113,63 @@ namespace loot { EXPECT_FALSE(info2 < info1); } - TEST_F(PluginDirtyInfoTest, EvalConditionTrue) { - Game game(Game::tes5); + TEST_P(PluginDirtyInfoTest, evalConditionShouldBeTrueIfTheCrcGivenMatchesTheRealPluginCrc) { + Game game(GetParam()); game.SetGamePath(dataPath.parent_path()); - ASSERT_NO_THROW(game.Init(false, localPath)); - PluginDirtyInfo dirtyInfo = PluginDirtyInfo(0x24F0E2A1, 2, 10, 30, "cleaner"); - EXPECT_TRUE(dirtyInfo.EvalCondition(game, "Blank.esp")); + PluginDirtyInfo dirtyInfo(blankEsmCrc, 2, 10, 30, "cleaner"); + EXPECT_TRUE(dirtyInfo.EvalCondition(game, blankEsm)); } - TEST_F(PluginDirtyInfoTest, EvalConditionFalse) { - Game game(Game::tes5); + TEST_P(PluginDirtyInfoTest, evalConditionShouldBeFalseIfTheCrcGivenDoesNotMatchTheRealPluginCrc) { + Game game(GetParam()); + game.SetGamePath(dataPath.parent_path()); + + PluginDirtyInfo dirtyInfo(0xDEADBEEF, 2, 10, 30, "cleaner"); + EXPECT_FALSE(dirtyInfo.EvalCondition(game, blankEsm)); + } + + TEST_P(PluginDirtyInfoTest, evalConditionShouldBeFalseIfAnEmptyPluginFilenameIsGiven) { + Game game(GetParam()); game.SetGamePath(dataPath.parent_path()); - ASSERT_NO_THROW(game.Init(false, localPath)); PluginDirtyInfo dirtyInfo; EXPECT_FALSE(dirtyInfo.EvalCondition(game, "")); - - dirtyInfo = PluginDirtyInfo(0xDEADBEEF, 2, 10, 30, "cleaner"); - EXPECT_FALSE(dirtyInfo.EvalCondition(game, "Blank.esp")); } - TEST_F(PluginDirtyInfoTest, YamlEmitter) { - PluginDirtyInfo info; + TEST_P(PluginDirtyInfoTest, emittingAsYamlShouldOutputAllNonZeroCounts) { + PluginDirtyInfo info(0x12345678, 2, 10, 30, "cleaner"); + YAML::Emitter emitter; + emitter << info; - info = PluginDirtyInfo(0x12345678, 0, 0, 0, "cleaner"); - YAML::Emitter e1; - e1 << info; - EXPECT_STREQ("crc: 0x12345678\nutil: 'cleaner'", e1.c_str()); - - info = PluginDirtyInfo(0x12345678, 2, 0, 0, "cleaner"); - YAML::Emitter e2; - e2 << info; - EXPECT_STREQ("crc: 0x12345678\nutil: 'cleaner'\nitm: 2", e2.c_str()); - - info = PluginDirtyInfo(0x12345678, 2, 10, 0, "cleaner"); - YAML::Emitter e3; - e3 << info; - EXPECT_STREQ("crc: 0x12345678\nutil: 'cleaner'\nitm: 2\nudr: 10", e3.c_str()); - - info = PluginDirtyInfo(0x12345678, 2, 10, 30, "cleaner"); - YAML::Emitter e4; - e4 << info; - EXPECT_STREQ("crc: 0x12345678\nutil: 'cleaner'\nitm: 2\nudr: 10\nnav: 30", e4.c_str()); + EXPECT_STREQ("crc: 0x12345678\nutil: 'cleaner'\nitm: 2\nudr: 10\nnav: 30", emitter.c_str()); } - TEST_F(PluginDirtyInfoTest, YamlEncode) { + TEST_P(PluginDirtyInfoTest, emittingAsYamlShouldOmitAllZeroCounts) { + PluginDirtyInfo info(0x12345678, 0, 0, 0, "cleaner"); + YAML::Emitter emitter; + emitter << info; + + EXPECT_STREQ("crc: 0x12345678\nutil: 'cleaner'", emitter.c_str()); + } + + TEST_P(PluginDirtyInfoTest, encodingAsYamlShouldOmitAllZeroCountFields) { + PluginDirtyInfo info(0x12345678, 0, 0, 0, "cleaner"); YAML::Node node; - PluginDirtyInfo info; - - info = PluginDirtyInfo(0x12345678, 0, 0, 0, "cleaner"); node = info; + EXPECT_EQ(0x12345678, node["crc"].as()); EXPECT_EQ("cleaner", node["util"].as()); EXPECT_FALSE(node["itm"]); EXPECT_FALSE(node["udr"]); EXPECT_FALSE(node["nav"]); + } - info = PluginDirtyInfo(0x12345678, 2, 0, 0, "cleaner"); + TEST_P(PluginDirtyInfoTest, encodingAsYamlShouldOutputAllNonZeroCountFields) { + PluginDirtyInfo info(0x12345678, 2, 10, 30, "cleaner"); + YAML::Node node; node = info; - EXPECT_EQ(0x12345678, node["crc"].as()); - EXPECT_EQ("cleaner", node["util"].as()); - EXPECT_EQ(2, node["itm"].as()); - EXPECT_FALSE(node["udr"]); - EXPECT_FALSE(node["nav"]); - info = PluginDirtyInfo(0x12345678, 2, 10, 0, "cleaner"); - node = info; - EXPECT_EQ(0x12345678, node["crc"].as()); - EXPECT_EQ("cleaner", node["util"].as()); - EXPECT_EQ(2, node["itm"].as()); - EXPECT_EQ(10, node["udr"].as()); - EXPECT_FALSE(node["nav"]); - - info = PluginDirtyInfo(0x12345678, 2, 10, 30, "cleaner"); - node = info; EXPECT_EQ(0x12345678, node["crc"].as()); EXPECT_EQ("cleaner", node["util"].as()); EXPECT_EQ(2, node["itm"].as()); @@ -195,46 +177,37 @@ namespace loot { EXPECT_EQ(30, node["nav"].as()); } - TEST_F(PluginDirtyInfoTest, YamlDecode) { - YAML::Node node; - PluginDirtyInfo info; + TEST_P(PluginDirtyInfoTest, decodingFromYamlShouldLeaveMissingFieldsWithZeroValues) { + YAML::Node node = YAML::Load("{crc: 0x12345678, util: cleaner}"); + PluginDirtyInfo info = node.as(); - node = YAML::Load("{crc: 0x12345678, util: cleaner}"); - info = node.as(); EXPECT_EQ(0x12345678, info.CRC()); EXPECT_EQ(0, info.ITMs()); EXPECT_EQ(0, info.DeletedRefs()); EXPECT_EQ(0, info.DeletedNavmeshes()); EXPECT_EQ("cleaner", info.CleaningUtility()); + } - node = YAML::Load("{crc: 0x12345678, util: cleaner, itm: 2}"); - info = node.as(); - EXPECT_EQ(0x12345678, info.CRC()); - EXPECT_EQ(2, info.ITMs()); - EXPECT_EQ(0, info.DeletedRefs()); - EXPECT_EQ(0, info.DeletedNavmeshes()); - EXPECT_EQ("cleaner", info.CleaningUtility()); + TEST_P(PluginDirtyInfoTest, decodingFromYamlShouldStoreAllNonZeroCounts) { + YAML::Node node = YAML::Load("{crc: 0x12345678, util: cleaner, itm: 2, udr: 10, nav: 30}"); + PluginDirtyInfo info = node.as(); - node = YAML::Load("{crc: 0x12345678, util: cleaner, itm: 2, udr: 10}"); - info = node.as(); - EXPECT_EQ(0x12345678, info.CRC()); - EXPECT_EQ(2, info.ITMs()); - EXPECT_EQ(10, info.DeletedRefs()); - EXPECT_EQ(0, info.DeletedNavmeshes()); - EXPECT_EQ("cleaner", info.CleaningUtility()); - - node = YAML::Load("{crc: 0x12345678, util: cleaner, itm: 2, udr: 10, nav: 30}"); - info = node.as(); EXPECT_EQ(0x12345678, info.CRC()); EXPECT_EQ(2, info.ITMs()); EXPECT_EQ(10, info.DeletedRefs()); EXPECT_EQ(30, info.DeletedNavmeshes()); EXPECT_EQ("cleaner", info.CleaningUtility()); + } + + TEST_P(PluginDirtyInfoTest, decodingFromYamlScalarShouldThrow) { + YAML::Node node = YAML::Load("scalar"); - node = YAML::Load("scalar"); EXPECT_ANY_THROW(node.as()); + } + + TEST_P(PluginDirtyInfoTest, decodingFromYamlListShouldThrow) { + YAML::Node node = YAML::Load("[0, 1, 2]"); - node = YAML::Load("[0, 1, 2]"); EXPECT_ANY_THROW(node.as()); } } diff --git a/src/tests/main.cpp b/src/tests/main.cpp index 390067f7..035ea6cd 100644 --- a/src/tests/main.cpp +++ b/src/tests/main.cpp @@ -56,7 +56,7 @@ #include "backend/metadata/location_test.h" #include "backend/metadata/message_test.h" #include "backend/metadata/message_content_test.h" -#include "backend/metadata/test_plugin_dirty_info.h" +#include "backend/metadata/plugin_dirty_info_test.h" #include "backend/metadata/test_plugin_metadata.h" #include "backend/metadata/test_tag.h" #include "backend/plugin/test_plugin.h"