diff --git a/src/tests/backend/metadata/test_plugin_metadata.h b/src/tests/backend/metadata/test_plugin_metadata.h index a76a7921..d1353c6d 100644 --- a/src/tests/backend/metadata/test_plugin_metadata.h +++ b/src/tests/backend/metadata/test_plugin_metadata.h @@ -22,83 +22,384 @@ along with LOOT. If not, see . */ -#ifndef LOOT_TEST_BACKEND_METADATA_PLUGIN_METADATA -#define LOOT_TEST_BACKEND_METADATA_PLUGIN_METADATA +#ifndef LOOT_TEST_F_BACKEND_METADATA_PLUGIN_METADATA +#define LOOT_TEST_F_BACKEND_METADATA_PLUGIN_METADATA #include "backend/metadata/plugin_metadata.h" #include "tests/fixtures.h" -using loot::PluginMetadata; +class PluginMetadata : public SkyrimTest {}; -TEST(PluginMetadata, Constructors) { - PluginMetadata pm; +TEST_F(PluginMetadata, Constructors) { + loot::PluginMetadata pm; EXPECT_TRUE(pm.Enabled()); EXPECT_FALSE(pm.IsPriorityExplicit()); EXPECT_EQ(0, pm.Priority()); - pm = PluginMetadata("Blank.esm"); + pm = loot::PluginMetadata("Blank.esm"); EXPECT_EQ("Blank.esm", pm.Name()); EXPECT_TRUE(pm.Enabled()); EXPECT_FALSE(pm.IsPriorityExplicit()); EXPECT_EQ(0, pm.Priority()); } -TEST(PluginMetadata, EqualityOperator) { - PluginMetadata pm1, pm2; +TEST_F(PluginMetadata, EqualityOperator) { + loot::PluginMetadata pm1, pm2; EXPECT_TRUE(pm1 == pm2); - pm1 = PluginMetadata("Blank.esm"); - pm2 = PluginMetadata("blank.esm"); + pm1 = loot::PluginMetadata("Blank.esm"); + pm2 = loot::PluginMetadata("blank.esm"); EXPECT_TRUE(pm1 == pm2); - pm1 = PluginMetadata("Blank.esm"); - pm2 = PluginMetadata("Blan.\\.esm"); + pm1 = loot::PluginMetadata("Blank.esm"); + pm2 = loot::PluginMetadata("Blan.\\.esm"); EXPECT_TRUE(pm1 == pm2); EXPECT_TRUE(pm2 == pm1); } -TEST(PluginMetadata, MergeMetadata) { - FAIL() << "Test is unimplemented"; +TEST_F(PluginMetadata, MergeMetadata) { + loot::PluginMetadata pm1(YAML::Load( + "name: 'Blank.esp'\n" + "enabled: false\n" + "priority: 5\n" + "after:\n" + " - 'Blank.esm'\n" + "req:\n" + " - 'Blank.esm'\n" + "inc:\n" + " - 'Blank.esm'\n" + "msg:\n" + " - type: say\n" + " content: 'content'\n" + "tag:\n" + " - Relev\n" + "dirty:\n" + " - crc: 0x5\n" + " util: 'utility'\n" + " udr: 1\n" + " nav: 2\n" + "url:\n" + " - 'http://www.example.com'" + ).as()); + + loot::PluginMetadata pm2(YAML::Load( + "name: 'Blank - Different.esp'\n" + "after:\n" + " - 'Blank.esm'\n" + " - 'Blank.esp'\n" + "req:\n" + " - 'Blank.esm'\n" + " - 'Blank.esp'\n" + "inc:\n" + " - 'Blank.esm'\n" + " - 'Blank.esp'\n" + "msg:\n" + " - type: say\n" + " content: 'content'\n" + "tag:\n" + " - Relev\n" + " - -Relev\n" + " - Delev\n" + "dirty:\n" + " - crc: 0x5\n" + " util: 'utility'\n" + " udr: 1\n" + " nav: 2\n" + " - crc: 0x9\n" + " util: 'utility'\n" + " udr: 1\n" + " nav: 2\n" + "url:\n" + " - 'http://www.example.com'\n" + " - 'http://www.example2.com'" + ).as()); + + EXPECT_NO_THROW(pm1.MergeMetadata(pm2)); + EXPECT_EQ("Blank.esp", pm1.Name()); + EXPECT_TRUE(pm1.Enabled()); + EXPECT_EQ(5, pm1.Priority()); + EXPECT_TRUE(pm1.IsPriorityExplicit()); + EXPECT_EQ(std::set({ + loot::File("Blank.esm"), + loot::File("Blank.esp"), + }), pm1.LoadAfter()); + EXPECT_EQ(std::set({ + loot::File("Blank.esm"), + loot::File("Blank.esp"), + }), pm1.Reqs()); + EXPECT_EQ(std::set({ + loot::File("Blank.esm"), + loot::File("Blank.esp"), + }), pm1.Incs()); + EXPECT_EQ(std::list({ + loot::Message(loot::Message::say, "content"), + loot::Message(loot::Message::say, "content"), + }), pm1.Messages()); + EXPECT_EQ(std::set({ + loot::Tag("Relev"), + loot::Tag("Relev", false), + loot::Tag("Delev"), + }), pm1.Tags()); + EXPECT_EQ(std::set({ + loot::PluginDirtyInfo(5, 0, 1, 2, "utility"), + loot::PluginDirtyInfo(9, 0, 1, 2, "utility"), + }), pm1.DirtyInfo()); + EXPECT_EQ(std::set({ + loot::Location("http://www.example.com"), + loot::Location("http://www.example2.com"), + }), pm1.Locations()); + + pm2.SetPriorityExplicit(true); + EXPECT_NO_THROW(pm1.MergeMetadata(pm2)); + EXPECT_EQ(0, pm1.Priority()); + EXPECT_TRUE(pm1.IsPriorityExplicit()); } -TEST(PluginMetadata, DiffMetadata) { - FAIL() << "Test is unimplemented"; +TEST_F(PluginMetadata, DiffMetadata) { + loot::PluginMetadata pm1(YAML::Load( + "name: 'Blank.esp'\n" + "enabled: false\n" + "after:\n" + " - 'Blank.esm'\n" + " - 'Blank - Different.esm'\n" + "req:\n" + " - 'Blank.esm'\n" + " - 'Blank - Different.esm'\n" + "inc:\n" + " - 'Blank.esm'\n" + " - 'Blank - Different.esm'\n" + "msg:\n" + " - type: say\n" + " content: 'content'\n" + " - type: say\n" + " content: 'content2'\n" + "tag:\n" + " - Relev\n" + " - NoMerge\n" + "dirty:\n" + " - crc: 0x5\n" + " util: 'utility'\n" + " udr: 1\n" + " nav: 2\n" + " - crc: 0x1\n" + " util: 'utility'\n" + " udr: 1\n" + " nav: 2\n" + "url:\n" + " - 'http://www.example.com'\n" + " - 'http://www.other-example.com'" + ).as()); + + loot::PluginMetadata pm2(YAML::Load( + "name: 'Blank - Different.esp'\n" + "after:\n" + " - 'Blank.esm'\n" + " - 'Blank.esp'\n" + "req:\n" + " - 'Blank.esm'\n" + " - 'Blank.esp'\n" + "inc:\n" + " - 'Blank.esm'\n" + " - 'Blank.esp'\n" + "msg:\n" + " - type: say\n" + " content: 'content'\n" + " - type: say\n" + " content: 'content3'\n" + "tag:\n" + " - Relev\n" + " - -Relev\n" + " - Delev\n" + "dirty:\n" + " - crc: 0x5\n" + " util: 'utility'\n" + " udr: 1\n" + " nav: 2\n" + " - crc: 0x9\n" + " util: 'utility'\n" + " udr: 1\n" + " nav: 2\n" + "url:\n" + " - 'http://www.example.com'\n" + " - 'http://www.example2.com'" + ).as()); + + loot::PluginMetadata result = pm1.DiffMetadata(pm2); + EXPECT_EQ("Blank.esp", result.Name()); + EXPECT_FALSE(result.Enabled()); + EXPECT_EQ(0, result.Priority()); + EXPECT_FALSE(result.IsPriorityExplicit()); + EXPECT_EQ(std::set({ + loot::File("Blank.esp"), + loot::File("Blank - Different.esm"), + }), result.LoadAfter()); + EXPECT_EQ(std::set({ + loot::File("Blank.esp"), + loot::File("Blank - Different.esm"), + }), result.Reqs()); + EXPECT_EQ(std::set({ + loot::File("Blank.esp"), + loot::File("Blank - Different.esm"), + }), result.Incs()); + EXPECT_EQ(std::list({ + loot::Message(loot::Message::say, "content2"), + loot::Message(loot::Message::say, "content3"), + }), result.Messages()); + EXPECT_EQ(std::set({ + loot::Tag("Relev", false), + loot::Tag("Delev"), + loot::Tag("NoMerge"), + }), result.Tags()); + EXPECT_EQ(std::set({ + loot::PluginDirtyInfo(9, 0, 1, 2, "utility"), + loot::PluginDirtyInfo(1, 0, 1, 2, "utility"), + }), result.DirtyInfo()); + EXPECT_EQ(std::set({ + loot::Location("http://www.example2.com"), + loot::Location("http://www.other-example.com"), + }), result.Locations()); + + pm1.Priority(5); + result = pm1.DiffMetadata(pm2); + + EXPECT_EQ(5, result.Priority()); + EXPECT_TRUE(result.IsPriorityExplicit()); } -TEST(PluginMetadata, NewMetadata) { - FAIL() << "Test is unimplemented"; +TEST_F(PluginMetadata, NewMetadata) { + loot::PluginMetadata pm1(YAML::Load( + "name: 'Blank.esp'\n" + "enabled: false\n" + "after:\n" + " - 'Blank.esm'\n" + " - 'Blank - Different.esm'\n" + "req:\n" + " - 'Blank.esm'\n" + " - 'Blank - Different.esm'\n" + "inc:\n" + " - 'Blank.esm'\n" + " - 'Blank - Different.esm'\n" + "msg:\n" + " - type: say\n" + " content: 'content'\n" + " - type: say\n" + " content: 'content2'\n" + "tag:\n" + " - Relev\n" + " - NoMerge\n" + "dirty:\n" + " - crc: 0x5\n" + " util: 'utility'\n" + " udr: 1\n" + " nav: 2\n" + " - crc: 0x1\n" + " util: 'utility'\n" + " udr: 1\n" + " nav: 2\n" + "url:\n" + " - 'http://www.example.com'\n" + " - 'http://www.other-example.com'" + ).as()); + + loot::PluginMetadata pm2(YAML::Load( + "name: 'Blank - Different.esp'\n" + "after:\n" + " - 'Blank.esm'\n" + " - 'Blank.esp'\n" + "req:\n" + " - 'Blank.esm'\n" + " - 'Blank.esp'\n" + "inc:\n" + " - 'Blank.esm'\n" + " - 'Blank.esp'\n" + "msg:\n" + " - type: say\n" + " content: 'content'\n" + " - type: say\n" + " content: 'content3'\n" + "tag:\n" + " - Relev\n" + " - -Relev\n" + " - Delev\n" + "dirty:\n" + " - crc: 0x5\n" + " util: 'utility'\n" + " udr: 1\n" + " nav: 2\n" + " - crc: 0x9\n" + " util: 'utility'\n" + " udr: 1\n" + " nav: 2\n" + "url:\n" + " - 'http://www.example.com'\n" + " - 'http://www.example2.com'" + ).as()); + + loot::PluginMetadata result = pm2.NewMetadata(pm1); + EXPECT_EQ("Blank - Different.esp", result.Name()); + EXPECT_TRUE(result.Enabled()); + EXPECT_EQ(0, result.Priority()); + EXPECT_FALSE(result.IsPriorityExplicit()); + EXPECT_EQ(std::set({ + loot::File("Blank.esp") + }), result.LoadAfter()); + EXPECT_EQ(std::set({ + loot::File("Blank.esp") + }), result.Reqs()); + EXPECT_EQ(std::set({ + loot::File("Blank.esp") + }), result.Incs()); + EXPECT_EQ(std::list({ + loot::Message(loot::Message::say, "content3"), + }), result.Messages()); + EXPECT_EQ(std::set({ + loot::Tag("Relev", false), + loot::Tag("Delev"), + }), result.Tags()); + EXPECT_EQ(std::set({ + loot::PluginDirtyInfo(9, 0, 1, 2, "utility") + }), result.DirtyInfo()); + EXPECT_EQ(std::set({ + loot::Location("http://www.example2.com") + }), result.Locations()); + + pm1.Priority(5); + result = pm2.NewMetadata(pm1); + + EXPECT_EQ(0, result.Priority()); + EXPECT_FALSE(result.IsPriorityExplicit()); } -TEST(PluginMetadata, Name) { - PluginMetadata pm; +TEST_F(PluginMetadata, Name) { + loot::PluginMetadata pm; ASSERT_NE("Blank.esm", pm.Name()); pm.Name("Blank.esm"); EXPECT_EQ("Blank.esm", pm.Name()); } -TEST(PluginMetadata, Enabled) { - PluginMetadata pm; +TEST_F(PluginMetadata, Enabled) { + loot::PluginMetadata pm; ASSERT_TRUE(pm.Enabled()); pm.Enabled(false); EXPECT_FALSE(pm.Enabled()); } -TEST(PluginMetadata, SetPriorityExplicit) { - PluginMetadata pm; +TEST_F(PluginMetadata, SetPriorityExplicit) { + loot::PluginMetadata pm; ASSERT_FALSE(pm.IsPriorityExplicit()); pm.SetPriorityExplicit(true); EXPECT_TRUE(pm.IsPriorityExplicit()); } -TEST(PluginMetadata, Priority) { - PluginMetadata pm; +TEST_F(PluginMetadata, Priority) { + loot::PluginMetadata pm; ASSERT_NE(10, pm.Priority()); pm.Priority(10); EXPECT_EQ(10, pm.Priority()); } -TEST(PluginMetadata, LoadAfter) { - PluginMetadata pm; +TEST_F(PluginMetadata, LoadAfter) { + loot::PluginMetadata pm; ASSERT_TRUE(pm.LoadAfter().empty()); pm.LoadAfter({ loot::File("Blank.esm") @@ -108,8 +409,8 @@ TEST(PluginMetadata, LoadAfter) { }), pm.LoadAfter()); } -TEST(PluginMetadata, Reqs) { - PluginMetadata pm; +TEST_F(PluginMetadata, Reqs) { + loot::PluginMetadata pm; ASSERT_TRUE(pm.Reqs().empty()); pm.Reqs({ loot::File("Blank.esm") @@ -119,8 +420,8 @@ TEST(PluginMetadata, Reqs) { }), pm.Reqs()); } -TEST(PluginMetadata, Incs) { - PluginMetadata pm; +TEST_F(PluginMetadata, Incs) { + loot::PluginMetadata pm; ASSERT_TRUE(pm.Incs().empty()); pm.Incs({ loot::File("Blank.esm") @@ -130,8 +431,8 @@ TEST(PluginMetadata, Incs) { }), pm.Incs()); } -TEST(PluginMetadata, Messages) { - PluginMetadata pm; +TEST_F(PluginMetadata, Messages) { + loot::PluginMetadata pm; ASSERT_TRUE(pm.Messages().empty()); pm.Messages({ loot::Message(loot::Message::say, "content") @@ -141,8 +442,8 @@ TEST(PluginMetadata, Messages) { }), pm.Messages()); } -TEST(PluginMetadata, Tags) { - PluginMetadata pm; +TEST_F(PluginMetadata, Tags) { + loot::PluginMetadata pm; ASSERT_TRUE(pm.Tags().empty()); pm.Tags({ loot::Tag("Relev") @@ -152,8 +453,8 @@ TEST(PluginMetadata, Tags) { }), pm.Tags()); } -TEST(PluginMetadata, DirtyInfo) { - PluginMetadata pm; +TEST_F(PluginMetadata, DirtyInfo) { + loot::PluginMetadata pm; ASSERT_TRUE(pm.DirtyInfo().empty()); pm.DirtyInfo({ loot::PluginDirtyInfo(5, 0, 1, 2, "utility") @@ -163,8 +464,8 @@ TEST(PluginMetadata, DirtyInfo) { }), pm.DirtyInfo()); } -TEST(PluginMetadata, Locations) { - PluginMetadata pm; +TEST_F(PluginMetadata, Locations) { + loot::PluginMetadata pm; ASSERT_TRUE(pm.Locations().empty()); pm.Locations({ loot::Location("http://www.example.com") @@ -174,60 +475,133 @@ TEST(PluginMetadata, Locations) { }), pm.Locations()); } -TEST(PluginMetadata, EvalAllConditions) { - FAIL() << "Test is unimplemented"; +TEST_F(PluginMetadata, EvalAllConditions) { + loot::Game game(loot::Game::tes5); + game.SetGamePath(dataPath.parent_path()); + ASSERT_NO_THROW(game.Init(false, localPath)); + + loot::PluginMetadata pm(YAML::Load( + "name: 'Blank.esp'\n" + "after:\n" + " - name: 'Blank.esm'\n" + " condition: 'file(\"Blank.esm\")'\n" + "req:\n" + " - name: 'Blank.esm'\n" + " condition: 'file(\"Blank.missing.esm\")'\n" + "inc:\n" + " - name: 'Blank.esm'\n" + " condition: 'file(\"Blank.esm\")'\n" + "msg:\n" + " - type: say\n" + " content: 'content'\n" + " condition: 'condition'\n" + "tag:\n" + " - name: Relev\n" + " condition: 'file(\"Blank.missing.esm\")'\n" + "dirty:\n" + " - crc: 0x0B5B7B90\n" + " util: 'utility'\n" + " udr: 1\n" + " nav: 2\n" + " - crc: 0xDEADBEEF\n" + " util: 'utility'\n" + " udr: 1\n" + " nav: 2" + ).as()); + + EXPECT_ANY_THROW(pm.EvalAllConditions(game, loot::Language::english)); + + pm.Messages({loot::Message(loot::Message::say, "content")}); + EXPECT_NO_THROW(pm.EvalAllConditions(game, loot::Language::english)); + EXPECT_EQ(std::set({ + loot::File("Blank.esm", "", "file(\"Blank.esm\")") + }), pm.LoadAfter()); + EXPECT_TRUE(pm.Reqs().empty()); + EXPECT_EQ(std::set({ + loot::File("Blank.esm", "", "file(\"Blank.esm\")") + }), pm.Incs()); + EXPECT_EQ(std::list({ + loot::Message(loot::Message::say, "content") + }), pm.Messages()); + EXPECT_TRUE(pm.Tags().empty()); + EXPECT_EQ(std::set({ + loot::PluginDirtyInfo(0x0B5B7B90, 0, 1, 2, "utility") + }), pm.DirtyInfo()); } -TEST(PluginMetadata, ParseAllConditions) { - FAIL() << "Test is unimplemented"; +TEST_F(PluginMetadata, ParseAllConditions) { + loot::PluginMetadata pm(YAML::Load( + "name: 'Blank.esp'\n" + "after:\n" + " - name: 'Blank.esm'\n" + " condition: 'file(\"Blank.esm\")'\n" + "req:\n" + " - name: 'Blank.esm'\n" + " condition: 'file(\"Blank.missing.esm\")'\n" + "inc:\n" + " - name: 'Blank.esm'\n" + " condition: 'file(\"Blank.esm\")'\n" + "msg:\n" + " - type: say\n" + " content: 'content'\n" + " condition: 'condition'\n" + "tag:\n" + " - name: Relev\n" + " condition: 'file(\"Blank.missing.esm\")'" + ).as()); + + EXPECT_ANY_THROW(pm.ParseAllConditions()); + + pm.Messages({loot::Message(loot::Message::say, "content")}); + EXPECT_NO_THROW(pm.ParseAllConditions()); } -TEST(PluginMetadata, HasNameOnly) { - PluginMetadata pm; +TEST_F(PluginMetadata, HasNameOnly) { + loot::PluginMetadata pm; EXPECT_TRUE(pm.HasNameOnly()); - pm = PluginMetadata("Blank.esp"); + pm = loot::PluginMetadata("Blank.esp"); EXPECT_TRUE(pm.HasNameOnly()); - pm = PluginMetadata("Blank.esp"); + pm = loot::PluginMetadata("Blank.esp"); pm.Enabled(false); EXPECT_TRUE(pm.HasNameOnly()); - pm = PluginMetadata("Blank.esp"); + pm = loot::PluginMetadata("Blank.esp"); pm.SetPriorityExplicit(true); EXPECT_FALSE(pm.HasNameOnly()); - pm = PluginMetadata("Blank.esp"); + pm = loot::PluginMetadata("Blank.esp"); pm.LoadAfter({loot::File("Blank.esm")}); EXPECT_FALSE(pm.HasNameOnly()); - pm = PluginMetadata("Blank.esp"); + pm = loot::PluginMetadata("Blank.esp"); pm.Reqs({loot::File("Blank.esm")}); EXPECT_FALSE(pm.HasNameOnly()); - pm = PluginMetadata("Blank.esp"); + pm = loot::PluginMetadata("Blank.esp"); pm.Incs({loot::File("Blank.esm")}); EXPECT_FALSE(pm.HasNameOnly()); - pm = PluginMetadata("Blank.esp"); + pm = loot::PluginMetadata("Blank.esp"); pm.Messages({loot::Message(loot::Message::say, "content")}); EXPECT_FALSE(pm.HasNameOnly()); - pm = PluginMetadata("Blank.esp"); + pm = loot::PluginMetadata("Blank.esp"); pm.Tags({loot::Tag("Relev")}); EXPECT_FALSE(pm.HasNameOnly()); - pm = PluginMetadata("Blank.esp"); + pm = loot::PluginMetadata("Blank.esp"); pm.DirtyInfo({loot::PluginDirtyInfo(5, 0, 1, 2, "utility")}); EXPECT_FALSE(pm.HasNameOnly()); - pm = PluginMetadata("Blank.esp"); + pm = loot::PluginMetadata("Blank.esp"); pm.Locations({loot::Location("http://www.example.com")}); EXPECT_FALSE(pm.HasNameOnly()); } -TEST(PluginMetadata, IsRegexPlugin) { - PluginMetadata pm; +TEST_F(PluginMetadata, IsRegexPlugin) { + loot::PluginMetadata pm; EXPECT_FALSE(pm.IsRegexPlugin()); pm.Name("Blank.esm"); @@ -249,8 +623,8 @@ TEST(PluginMetadata, IsRegexPlugin) { EXPECT_FALSE(pm.IsRegexPlugin()); } -TEST(PluginMetadata, YamlEmitter) { - PluginMetadata pm("Blank.esp"); +TEST_F(PluginMetadata, YamlEmitter) { + loot::PluginMetadata pm("Blank.esp"); YAML::Emitter e1; e1 << pm; EXPECT_STREQ("", e1.c_str()); @@ -384,10 +758,10 @@ TEST(PluginMetadata, YamlEmitter) { " - 'http://www.example.com'", e10.c_str()); } -TEST(PluginMetadata, YamlEncode) { +TEST_F(PluginMetadata, YamlEncode) { YAML::Node node; - PluginMetadata pm("Blank.esp"); + loot::PluginMetadata pm("Blank.esp"); node = pm; EXPECT_EQ("Blank.esp", node["name"].as()); EXPECT_FALSE(node["enabled"]); @@ -437,16 +811,18 @@ TEST(PluginMetadata, YamlEncode) { EXPECT_EQ(pm.Locations(), node["url"].as>()); } -TEST(PluginMetadata, YamlDecode) { +TEST_F(PluginMetadata, YamlDecode) { YAML::Node node; - PluginMetadata pm; + loot::PluginMetadata pm; node = YAML::Load("Blank.esp"); - EXPECT_ANY_THROW(node.as()); + EXPECT_ANY_THROW(node.as()); node = YAML::Load("name: Blank.esp"); pm = node.as(); EXPECT_EQ("Blank.esp", pm.Name()); + EXPECT_EQ(0, pm.Priority()); + EXPECT_FALSE(pm.IsPriorityExplicit()); node = YAML::Load("name: 'Blank.esp'\n" "priority: 5\n" @@ -497,10 +873,10 @@ TEST(PluginMetadata, YamlDecode) { }), pm.Locations()); node = YAML::Load("scalar"); - EXPECT_ANY_THROW(node.as()); + EXPECT_ANY_THROW(node.as()); node = YAML::Load("[0, 1, 2]"); - EXPECT_ANY_THROW(node.as()); + EXPECT_ANY_THROW(node.as()); } #endif