diff --git a/CMakeLists.txt b/CMakeLists.txt
index 90126edd..30a8d67a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -251,7 +251,7 @@ set (LOOT_TESTS_HEADERS "${CMAKE_SOURCE_DIR}/src/tests/base_game_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/plugin_dirty_info_test.h"
- "${CMAKE_SOURCE_DIR}/src/tests/backend/metadata/test_plugin_metadata.h"
+ "${CMAKE_SOURCE_DIR}/src/tests/backend/metadata/plugin_metadata_test.h"
"${CMAKE_SOURCE_DIR}/src/tests/backend/metadata/test_tag.h"
"${CMAKE_SOURCE_DIR}/src/tests/backend/plugin/test_plugin.h"
"${CMAKE_SOURCE_DIR}/src/tests/backend/test_metadata_list.h"
diff --git a/src/tests/backend/metadata/plugin_metadata_test.h b/src/tests/backend/metadata/plugin_metadata_test.h
new file mode 100644
index 00000000..4c7e1d69
--- /dev/null
+++ b/src/tests/backend/metadata/plugin_metadata_test.h
@@ -0,0 +1,1084 @@
+/* LOOT
+
+A load order optimisation tool for Oblivion, Skyrim, Fallout 3 and
+Fallout: New Vegas.
+
+Copyright (C) 2014-2016 WrinklyNinja
+
+This file is part of LOOT.
+
+LOOT is free software: you can redistribute
+it and/or modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation, either version 3 of
+the License, or (at your option) any later version.
+
+LOOT is distributed in the hope that it will
+be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with LOOT. If not, see
+.
+*/
+
+#ifndef LOOT_TEST_F_BACKEND_METADATA_PLUGIN_METADATA
+#define LOOT_TEST_F_BACKEND_METADATA_PLUGIN_METADATA
+
+#include "backend/metadata/plugin_metadata.h"
+#include "tests/base_game_test.h"
+
+namespace loot {
+ namespace test {
+ class PluginMetadataTest : public BaseGameTest {};
+
+ // 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(,
+ PluginMetadataTest,
+ ::testing::Values(
+ GameSettings::tes5));
+
+ TEST_P(PluginMetadataTest, defaultConstructorShouldLeaveNameEmptyAndEnableMetadataAndLeaveAllOtherFieldsAtTheirDefaults) {
+ PluginMetadata plugin;
+
+ EXPECT_TRUE(plugin.Name().empty());
+ EXPECT_TRUE(plugin.Enabled());
+ EXPECT_FALSE(plugin.IsPriorityExplicit());
+ EXPECT_FALSE(plugin.IsPriorityGlobal());
+ EXPECT_EQ(0, plugin.Priority());
+ }
+
+ TEST_P(PluginMetadataTest, stringConstructorShouldSetNameToGivenStringAndEnableMetadataAndLeaveAllOtherFieldsAtTheirDefaults) {
+ PluginMetadata plugin(blankEsm);
+
+ EXPECT_EQ(blankEsm, plugin.Name());
+ EXPECT_TRUE(plugin.Enabled());
+ EXPECT_FALSE(plugin.IsPriorityExplicit());
+ EXPECT_FALSE(plugin.IsPriorityGlobal());
+ EXPECT_EQ(0, plugin.Priority());
+ }
+
+ TEST_P(PluginMetadataTest, equalityOperatorShouldUseCaseInsensitiveNameComparisonForNonRegexNames) {
+ PluginMetadata plugin1(blankEsm);
+ PluginMetadata plugin2(boost::to_lower_copy(blankEsm));
+ EXPECT_TRUE(plugin1 == plugin2);
+
+ plugin1 = PluginMetadata(blankEsm);
+ plugin2 = PluginMetadata(blankDifferentEsm);
+ EXPECT_FALSE(plugin1 == plugin2);
+ }
+
+ TEST_P(PluginMetadataTest, equalityOperatorShouldUseCaseInsensitiveNameComparisonForTwoRegexNames) {
+ PluginMetadata plugin1("Blan.\\.esm");
+ PluginMetadata plugin2("blan.\\.esm");
+ EXPECT_TRUE(plugin1 == plugin2);
+ EXPECT_TRUE(plugin2 == plugin1);
+
+ plugin1 = PluginMetadata("Blan(k|p).esm");
+ plugin2 = PluginMetadata("Blan.\\.esm");
+ EXPECT_FALSE(plugin1 == plugin2);
+ EXPECT_FALSE(plugin2 == plugin1);
+ }
+
+ TEST_P(PluginMetadataTest, equalityOperatorShouldUseRegexMatchingForARegexNameAndANonRegexName) {
+ PluginMetadata plugin1("Blank.esm");
+ PluginMetadata plugin2("Blan.\\.esm");
+ EXPECT_TRUE(plugin1 == plugin2);
+ EXPECT_TRUE(plugin2 == plugin1);
+
+ plugin1 = PluginMetadata("Blan.esm");
+ plugin2 = PluginMetadata("Blan.\\.esm");
+ EXPECT_FALSE(plugin1 == plugin2);
+ EXPECT_FALSE(plugin2 == plugin1);
+ }
+
+ TEST_P(PluginMetadataTest, mergeMetadataShouldNotChangeName) {
+ PluginMetadata plugin1(blankEsm);
+ PluginMetadata plugin2(blankDifferentEsm);
+
+ plugin1.MergeMetadata(plugin2);
+
+ EXPECT_EQ(blankEsm, plugin1.Name());
+ }
+
+ TEST_P(PluginMetadataTest, mergeMetadataShouldNotUseMergedEnabledStateIfMergedMetadataIsEmpty) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+
+ plugin2.Enabled(false);
+ ASSERT_TRUE(plugin2.HasNameOnly());
+ plugin1.MergeMetadata(plugin2);
+
+ EXPECT_TRUE(plugin1.Enabled());
+ }
+
+ TEST_P(PluginMetadataTest, mergeMetadataShouldUseMergedEnabledStateIfMergedMetadataIsNotEmpty) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+
+ plugin2.Enabled(false);
+ plugin2.SetPriorityExplicit(true);
+ ASSERT_FALSE(plugin2.HasNameOnly());
+ plugin1.MergeMetadata(plugin2);
+
+ EXPECT_FALSE(plugin1.Enabled());
+ }
+
+ TEST_P(PluginMetadataTest, mergeMetadataShouldUseMergedNonZeroPriorityValue) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+
+ plugin1.Priority(5);
+ plugin2.Priority(3);
+ plugin1.MergeMetadata(plugin2);
+
+ EXPECT_EQ(3, plugin1.Priority());
+ }
+
+ TEST_P(PluginMetadataTest, mergeMetadataShouldMergeAnExplicitPriorityValueOfZero) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+
+ plugin1.Priority(5);
+ plugin2.SetPriorityExplicit(true);
+ plugin1.MergeMetadata(plugin2);
+
+ EXPECT_EQ(0, plugin1.Priority());
+ }
+
+ TEST_P(PluginMetadataTest, mergeMetadataShouldNotMergeNonExplicitGlobalPriorityState) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+
+ plugin2.SetPriorityGlobal(true);
+ plugin1.MergeMetadata(plugin2);
+
+ EXPECT_FALSE(plugin1.IsPriorityGlobal());
+ }
+
+ TEST_P(PluginMetadataTest, mergeMetadataShouldMergeExplicitGlobalPriorityState) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+
+ plugin2.SetPriorityExplicit(true);
+ plugin2.SetPriorityGlobal(true);
+ plugin1.MergeMetadata(plugin2);
+
+ EXPECT_TRUE(plugin1.IsPriorityGlobal());
+ }
+
+ TEST_P(PluginMetadataTest, mergeMetadataShouldMergeTrueExplicitPriorityState) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+
+ plugin2.SetPriorityExplicit(true);
+ plugin1.MergeMetadata(plugin2);
+
+ EXPECT_TRUE(plugin1.IsPriorityExplicit());
+ }
+
+ TEST_P(PluginMetadataTest, mergeMetadataShouldNotMergeFalseExplicitPriorityState) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+
+ plugin1.SetPriorityExplicit(true);
+ plugin1.MergeMetadata(plugin2);
+
+ EXPECT_TRUE(plugin1.IsPriorityExplicit());
+ }
+
+ TEST_P(PluginMetadataTest, mergeMetadataShouldMergeLoadAfterData) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+ File file1(blankEsm);
+ File file2(blankDifferentEsm);
+
+ plugin1.LoadAfter({file1});
+ plugin2.LoadAfter({file1, file2});
+ plugin1.MergeMetadata(plugin2);
+
+ EXPECT_EQ(std::set({file1, file2}), plugin1.LoadAfter());
+ }
+
+ TEST_P(PluginMetadataTest, mergeMetadataShouldMergeRequirementData) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+ File file1(blankEsm);
+ File file2(blankDifferentEsm);
+
+ plugin1.Reqs({file1});
+ plugin2.Reqs({file1, file2});
+ plugin1.MergeMetadata(plugin2);
+
+ EXPECT_EQ(std::set({file1, file2}), plugin1.Reqs());
+ }
+
+ TEST_P(PluginMetadataTest, mergeMetadataShouldMergeIncompatibilityData) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+ File file1(blankEsm);
+ File file2(blankDifferentEsm);
+
+ plugin1.Incs({file1});
+ plugin2.Incs({file1, file2});
+ plugin1.MergeMetadata(plugin2);
+
+ EXPECT_EQ(std::set({file1, file2}), plugin1.Incs());
+ }
+
+ TEST_P(PluginMetadataTest, mergeMetadataShouldMergeMessages) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+ Message message(Message::say, "content");
+
+ plugin1.Messages({message});
+ plugin2.Messages({message});
+ plugin1.MergeMetadata(plugin2);
+
+ EXPECT_EQ(std::list({message, message}), plugin1.Messages());
+ }
+
+ TEST_P(PluginMetadataTest, mergeMetadataShouldMergeTags) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+ Tag tag1("Relev");
+ Tag tag2("Relev", false);
+ Tag tag3("Delev");
+
+ plugin1.Tags({tag1});
+ plugin2.Tags({tag1, tag2, tag3});
+ plugin1.MergeMetadata(plugin2);
+
+ EXPECT_EQ(std::set({tag1, tag2, tag3}), plugin1.Tags());
+ }
+
+ TEST_P(PluginMetadataTest, mergeMetadataShouldMergeDirtyInfoData) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+ PluginDirtyInfo info1(0x5, 1, 2, 3, "utility");
+ PluginDirtyInfo info2(0xA, 1, 2, 3, "utility");
+
+ plugin1.DirtyInfo({info1});
+ plugin2.DirtyInfo({info1, info2});
+ plugin1.MergeMetadata(plugin2);
+
+ EXPECT_EQ(std::set({info1, info2}), plugin1.DirtyInfo());
+ }
+
+ TEST_P(PluginMetadataTest, mergeMetadataShouldMergeLocationData) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+ Location location1("http://www.example.com/1");
+ Location location2("http://www.example.com/2");
+
+ plugin1.Locations({location1});
+ plugin2.Locations({location1, location2});
+ plugin1.MergeMetadata(plugin2);
+
+ EXPECT_EQ(std::set({location1, location2}), plugin1.Locations());
+ }
+
+ TEST_P(PluginMetadataTest, diffMetadataShouldUseSourcePluginName) {
+ PluginMetadata plugin1(blankEsm);
+ PluginMetadata plugin2(blankDifferentEsm);
+
+ PluginMetadata diff = plugin1.DiffMetadata(plugin2);
+
+ EXPECT_EQ(blankEsm, diff.Name());
+ }
+
+ TEST_P(PluginMetadataTest, diffMetadataShouldUseSourcePluginEnabledState) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+
+ plugin2.Enabled(false);
+ PluginMetadata diff = plugin1.DiffMetadata(plugin2);
+
+ EXPECT_TRUE(diff.Enabled());
+
+ plugin1.Enabled(false);
+ diff = plugin1.DiffMetadata(plugin2);
+
+ EXPECT_FALSE(diff.Enabled());
+ }
+
+ TEST_P(PluginMetadataTest, diffMetadataShouldUseSourcePluginPriorityDataIfItDiffersFromTheTargetPluginPriorityData) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+
+ plugin1.SetPriorityGlobal(true);
+ PluginMetadata diff = plugin1.DiffMetadata(plugin2);
+
+ EXPECT_EQ(0, diff.Priority());
+ EXPECT_FALSE(diff.IsPriorityExplicit());
+ EXPECT_TRUE(diff.IsPriorityGlobal());
+
+ plugin1.Priority(5);
+ plugin1.SetPriorityGlobal(false);
+ diff = plugin1.DiffMetadata(plugin2);
+
+ EXPECT_EQ(5, diff.Priority());
+ EXPECT_TRUE(diff.IsPriorityExplicit());
+ EXPECT_FALSE(diff.IsPriorityGlobal());
+ }
+
+ TEST_P(PluginMetadataTest, diffMetadataShouldOutputDefaultPriorityDataIfTheSourceAndTargetPluginPriorityDataMatch) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+
+ plugin1.Priority(5);
+ plugin1.SetPriorityGlobal(true);
+ plugin2.Priority(5);
+ plugin2.SetPriorityGlobal(true);
+ PluginMetadata diff = plugin1.DiffMetadata(plugin2);
+
+ EXPECT_EQ(0, diff.Priority());
+ EXPECT_FALSE(diff.IsPriorityExplicit());
+ EXPECT_FALSE(diff.IsPriorityGlobal());
+ }
+
+ TEST_P(PluginMetadataTest, diffMetadataShouldOutputLoadAfterDataThatAreNotCommonToBothInputPlugins) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+ File file1(blankEsm);
+ File file2(blankDifferentEsm);
+ File file3(blankEsp);
+
+ plugin1.LoadAfter({file1, file2});
+ plugin2.LoadAfter({file1, file3});
+ PluginMetadata diff = plugin1.DiffMetadata(plugin2);
+
+ EXPECT_EQ(std::set({file2, file3}), diff.LoadAfter());
+ }
+
+ TEST_P(PluginMetadataTest, diffMetadataShouldOutputRequirementsDataThatAreNotCommonToBothInputPlugins) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+ File file1(blankEsm);
+ File file2(blankDifferentEsm);
+ File file3(blankEsp);
+
+ plugin1.Reqs({file1, file2});
+ plugin2.Reqs({file1, file3});
+ PluginMetadata diff = plugin1.DiffMetadata(plugin2);
+
+ EXPECT_EQ(std::set({file2, file3}), diff.Reqs());
+ }
+
+ TEST_P(PluginMetadataTest, diffMetadataShouldOutputIncompatibilityDataThatAreNotCommonToBothInputPlugins) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+ File file1(blankEsm);
+ File file2(blankDifferentEsm);
+ File file3(blankEsp);
+
+ plugin1.Incs({file1, file2});
+ plugin2.Incs({file1, file3});
+ PluginMetadata diff = plugin1.DiffMetadata(plugin2);
+
+ EXPECT_EQ(std::set({file2, file3}), diff.Incs());
+ }
+
+ TEST_P(PluginMetadataTest, diffMetadataShouldOutputMessagesThatAreNotCommonToBothInputPlugins) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+ Message message1(Message::say, "content1");
+ Message message2(Message::say, "content2");
+ Message message3(Message::say, "content3");
+
+ plugin1.Messages({message1, message2});
+ plugin2.Messages({message1, message3});
+ PluginMetadata diff = plugin1.DiffMetadata(plugin2);
+
+ EXPECT_EQ(std::list({message2, message3}), diff.Messages());
+ }
+
+ TEST_P(PluginMetadataTest, diffMetadataShouldOutputTagsThatAreNotCommonToBothInputPlugins) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+ Tag tag1("Relev");
+ Tag tag2("Relev", false);
+ Tag tag3("Delev");
+
+ plugin1.Tags({tag1, tag2});
+ plugin2.Tags({tag1, tag3});
+ PluginMetadata diff = plugin1.DiffMetadata(plugin2);
+
+ EXPECT_EQ(std::set({tag2, tag3}), diff.Tags());
+ }
+
+ TEST_P(PluginMetadataTest, diffMetadataShouldOutputDirtyInfoObjectsThatAreNotCommonToBothInputPlugins) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+ PluginDirtyInfo info1(0x5, 1, 2, 3, "utility");
+ PluginDirtyInfo info2(0xA, 1, 2, 3, "utility");
+ PluginDirtyInfo info3(0x1, 1, 2, 3, "utility");
+
+ plugin1.DirtyInfo({info1, info2});
+ plugin2.DirtyInfo({info1, info3});
+ PluginMetadata diff = plugin1.DiffMetadata(plugin2);
+
+ EXPECT_EQ(std::set({info2, info3}), diff.DirtyInfo());
+ }
+
+ TEST_P(PluginMetadataTest, diffMetadataShouldOutputLocationsThatAreNotCommonToBothInputPlugins) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+ Location location1("http://www.example.com/1");
+ Location location2("http://www.example.com/2");
+ Location location3("http://www.example.com/3");
+
+ plugin1.Locations({location1, location2});
+ plugin2.Locations({location1, location3});
+ PluginMetadata diff = plugin1.DiffMetadata(plugin2);
+
+ EXPECT_EQ(std::set({location2, location3}), diff.Locations());
+ }
+
+ TEST_P(PluginMetadataTest, newMetadataShouldUseSourcePluginName) {
+ PluginMetadata plugin1(blankEsm);
+ PluginMetadata plugin2(blankDifferentEsm);
+
+ PluginMetadata newMetadata = plugin1.NewMetadata(plugin2);
+
+ EXPECT_EQ(blankEsm, newMetadata.Name());
+ }
+
+ TEST_P(PluginMetadataTest, newMetadataShouldUseSourcePluginEnabledState) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+
+ plugin2.Enabled(false);
+ PluginMetadata newMetadata = plugin1.NewMetadata(plugin2);
+
+ EXPECT_TRUE(newMetadata.Enabled());
+
+ plugin1.Enabled(false);
+ newMetadata = plugin1.NewMetadata(plugin2);
+
+ EXPECT_FALSE(newMetadata.Enabled());
+ }
+
+ TEST_P(PluginMetadataTest, newMetadataShouldUseSourcePluginPriorityData) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+
+ plugin1.Priority(5);
+ plugin1.SetPriorityGlobal(true);
+ PluginMetadata newMetadata = plugin1.NewMetadata(plugin2);
+
+ EXPECT_EQ(5, newMetadata.Priority());
+ EXPECT_TRUE(newMetadata.IsPriorityExplicit());
+ EXPECT_TRUE(newMetadata.IsPriorityGlobal());
+ }
+
+ TEST_P(PluginMetadataTest, newMetadataShouldOutputLoadAfterDataThatAreNotCommonToBothInputPlugins) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+ File file1(blankEsm);
+ File file2(blankDifferentEsm);
+ File file3(blankEsp);
+
+ plugin1.LoadAfter({file1, file2});
+ plugin2.LoadAfter({file1, file3});
+ PluginMetadata newMetadata = plugin1.NewMetadata(plugin2);
+
+ EXPECT_EQ(std::set({file2}), newMetadata.LoadAfter());
+ }
+
+ TEST_P(PluginMetadataTest, newMetadataShouldOutputRequirementsDataThatAreNotCommonToBothInputPlugins) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+ File file1(blankEsm);
+ File file2(blankDifferentEsm);
+ File file3(blankEsp);
+
+ plugin1.Reqs({file1, file2});
+ plugin2.Reqs({file1, file3});
+ PluginMetadata newMetadata = plugin1.NewMetadata(plugin2);
+
+ EXPECT_EQ(std::set({file2}), newMetadata.Reqs());
+ }
+
+ TEST_P(PluginMetadataTest, newMetadataShouldOutputIncompatibilityDataThatAreNotCommonToBothInputPlugins) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+ File file1(blankEsm);
+ File file2(blankDifferentEsm);
+ File file3(blankEsp);
+
+ plugin1.Incs({file1, file2});
+ plugin2.Incs({file1, file3});
+ PluginMetadata newMetadata = plugin1.NewMetadata(plugin2);
+
+ EXPECT_EQ(std::set({file2}), newMetadata.Incs());
+ }
+
+ TEST_P(PluginMetadataTest, newMetadataShouldOutputMessagesThatAreNotCommonToBothInputPlugins) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+ Message message1(Message::say, "content1");
+ Message message2(Message::say, "content2");
+ Message message3(Message::say, "content3");
+
+ plugin1.Messages({message1, message2});
+ plugin2.Messages({message1, message3});
+ PluginMetadata newMetadata = plugin1.NewMetadata(plugin2);
+
+ EXPECT_EQ(std::list({message2}), newMetadata.Messages());
+ }
+
+ TEST_P(PluginMetadataTest, newMetadataShouldOutputTagsThatAreNotCommonToBothInputPlugins) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+ Tag tag1("Relev");
+ Tag tag2("Relev", false);
+ Tag tag3("Delev");
+
+ plugin1.Tags({tag1, tag2});
+ plugin2.Tags({tag1, tag3});
+ PluginMetadata newMetadata = plugin1.NewMetadata(plugin2);
+
+ EXPECT_EQ(std::set({tag2}), newMetadata.Tags());
+ }
+
+ TEST_P(PluginMetadataTest, newMetadataShouldOutputDirtyInfoObjectsThatAreNotCommonToBothInputPlugins) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+ PluginDirtyInfo info1(0x5, 1, 2, 3, "utility");
+ PluginDirtyInfo info2(0xA, 1, 2, 3, "utility");
+ PluginDirtyInfo info3(0x1, 1, 2, 3, "utility");
+
+ plugin1.DirtyInfo({info1, info2});
+ plugin2.DirtyInfo({info1, info3});
+ PluginMetadata newMetadata = plugin1.NewMetadata(plugin2);
+
+ EXPECT_EQ(std::set({info2}), newMetadata.DirtyInfo());
+ }
+
+ TEST_P(PluginMetadataTest, newMetadataShouldOutputLocationsThatAreNotCommonToBothInputPlugins) {
+ PluginMetadata plugin1;
+ PluginMetadata plugin2;
+ Location location1("http://www.example.com/1");
+ Location location2("http://www.example.com/2");
+ Location location3("http://www.example.com/3");
+
+ plugin1.Locations({location1, location2});
+ plugin2.Locations({location1, location3});
+ PluginMetadata newMetadata = plugin1.NewMetadata(plugin2);
+
+ EXPECT_EQ(std::set({location2}), newMetadata.Locations());
+ }
+
+ TEST_P(PluginMetadataTest, settingPriorityWithAbsoluteValueGreaterOrEqualToGlobalPriorityDivisorShouldThrow) {
+ PluginMetadata plugin;
+ EXPECT_ANY_THROW(plugin.Priority(yamlGlobalPriorityDivisor));
+ EXPECT_ANY_THROW(plugin.Priority(yamlGlobalPriorityDivisor + 1));
+ EXPECT_ANY_THROW(plugin.Priority(-yamlGlobalPriorityDivisor));
+ EXPECT_ANY_THROW(plugin.Priority(-yamlGlobalPriorityDivisor - 1));
+ }
+
+ TEST_P(PluginMetadataTest, settingPriorityAsGlobalShouldSucceed) {
+ PluginMetadata plugin;
+ ASSERT_FALSE(plugin.IsPriorityGlobal());
+ plugin.SetPriorityGlobal(true);
+ EXPECT_TRUE(plugin.IsPriorityGlobal());
+ }
+
+ TEST_P(PluginMetadataTest, settingPriorityAsNotGlobalShouldSucceed) {
+ PluginMetadata plugin;
+ plugin.SetPriorityGlobal(true);
+ ASSERT_TRUE(plugin.IsPriorityGlobal());
+ plugin.SetPriorityGlobal(false);
+ EXPECT_FALSE(plugin.IsPriorityGlobal());
+ }
+
+ TEST_P(PluginMetadataTest, gettingYamlPriorityValueForAGlobalPriorityShouldReturnValueWithGlobalFlagSet) {
+ PluginMetadata plugin;
+ plugin.Priority(10);
+ plugin.SetPriorityGlobal(true);
+ EXPECT_EQ(1000010, plugin.GetYamlPriorityValue());
+
+ plugin.Priority(-20);
+ EXPECT_EQ(-1000020, plugin.GetYamlPriorityValue());
+ }
+
+ TEST_P(PluginMetadataTest, gettingYamlPriorityValueForANonGlobalPriorityShouldReturnValueWithGlobalFlagNotSet) {
+ PluginMetadata plugin;
+ plugin.Priority(10);
+ EXPECT_EQ(10, plugin.GetYamlPriorityValue());
+
+ plugin.Priority(-20);
+ EXPECT_EQ(-20, plugin.GetYamlPriorityValue());
+ }
+
+ TEST_P(PluginMetadataTest, evalAllConditionsShouldEvaluateAllMetadataConditions) {
+ Game game(GetParam());
+ game.SetGamePath(dataPath.parent_path());
+
+ PluginMetadata plugin(blankEsm);
+
+ File file1(blankEsp);
+ File file2(blankDifferentEsm, "", "file(\"" + missingEsp + "\")");
+ plugin.LoadAfter({file1, file2});
+ plugin.Reqs({file1, file2});
+ plugin.Incs({file1, file2});
+
+ Message message1(Message::say, "content");
+ Message message2(Message::say, "content", "file(\"" + missingEsp + "\")");
+ plugin.Messages({message1, message2});
+
+ Tag tag1("Relev");
+ Tag tag2("Relev", true, "file(\"" + missingEsp + "\")");
+ plugin.Tags({tag1, tag2});
+
+ PluginDirtyInfo info1(blankEsmCrc, 1, 2, 3, "utility");
+ PluginDirtyInfo info2(0xDEADBEEF, 1, 2, 3, "utility");
+ plugin.DirtyInfo({info1, info2});
+
+ EXPECT_NO_THROW(plugin.EvalAllConditions(game, Language::english));
+
+ std::set expectedFiles({file1});
+ EXPECT_EQ(expectedFiles, plugin.LoadAfter());
+ EXPECT_EQ(expectedFiles, plugin.Reqs());
+ EXPECT_EQ(expectedFiles, plugin.Incs());
+ EXPECT_EQ(std::list({message1}), plugin.Messages());
+ EXPECT_EQ(std::set({tag1}), plugin.Tags());
+ EXPECT_EQ(std::set({info1}), plugin.DirtyInfo());
+ }
+
+ TEST_P(PluginMetadataTest, hasNameOnlyShouldBeTrueForADefaultConstructedPluginMetadataObject) {
+ PluginMetadata plugin;
+
+ EXPECT_TRUE(plugin.HasNameOnly());
+ }
+
+ TEST_P(PluginMetadataTest, hasNameOnlyShouldBeTrueForAPluginMetadataObjectConstructedWithAName) {
+ PluginMetadata plugin(blankEsp);
+
+ EXPECT_TRUE(plugin.HasNameOnly());
+ }
+
+ TEST_P(PluginMetadataTest, hasNameOnlyShouldBeTrueIfThePluginMetadataIsDisabled) {
+ PluginMetadata plugin(blankEsp);
+ plugin.Enabled(false);
+
+ EXPECT_TRUE(plugin.HasNameOnly());
+ }
+
+ TEST_P(PluginMetadataTest, hasNameOnlyShouldBeFalseIfThePriorityValueIsExplicit) {
+ PluginMetadata plugin(blankEsp);
+ plugin.SetPriorityExplicit(true);
+
+ EXPECT_FALSE(plugin.HasNameOnly());
+ }
+
+ TEST_P(PluginMetadataTest, hasNameOnlyShouldBeFalseIfLoadAfterMetadataExists) {
+ PluginMetadata plugin(blankEsp);
+ plugin.LoadAfter({File(blankEsm)});
+
+ EXPECT_FALSE(plugin.HasNameOnly());
+ }
+
+ TEST_P(PluginMetadataTest, hasNameOnlyShouldBeFalseIfRequirementMetadataExists) {
+ PluginMetadata plugin(blankEsp);
+ plugin.Reqs({File(blankEsm)});
+
+ EXPECT_FALSE(plugin.HasNameOnly());
+ }
+
+ TEST_P(PluginMetadataTest, hasNameOnlyShouldBeFalseIfIncompatibilityMetadataExists) {
+ PluginMetadata plugin(blankEsp);
+ plugin.Incs({File(blankEsm)});
+
+ EXPECT_FALSE(plugin.HasNameOnly());
+ }
+
+ TEST_P(PluginMetadataTest, hasNameOnlyShouldBeFalseIfMessagesExist) {
+ PluginMetadata plugin(blankEsp);
+ plugin.Messages({Message(Message::say, "content")});
+
+ EXPECT_FALSE(plugin.HasNameOnly());
+ }
+
+ TEST_P(PluginMetadataTest, hasNameOnlyShouldBeFalseIfTagsExist) {
+ PluginMetadata plugin(blankEsp);
+ plugin.Tags({Tag("Relev")});
+
+ EXPECT_FALSE(plugin.HasNameOnly());
+ }
+
+ TEST_P(PluginMetadataTest, hasNameOnlyShouldBeFalseIfDirtyInfoExists) {
+ PluginMetadata plugin(blankEsp);
+ plugin.DirtyInfo({PluginDirtyInfo(5, 0, 1, 2, "utility")});
+
+ EXPECT_FALSE(plugin.HasNameOnly());
+ }
+
+ TEST_P(PluginMetadataTest, hasNameOnlyShouldBeFalseIfLocationsExist) {
+ PluginMetadata plugin(blankEsp);
+ plugin.Locations({Location("http://www.example.com")});
+
+ EXPECT_FALSE(plugin.HasNameOnly());
+ }
+
+ TEST_P(PluginMetadataTest, isRegexPluginShouldBeFalseForAnEmptyPluginName) {
+ PluginMetadata plugin;
+
+ EXPECT_FALSE(plugin.IsRegexPlugin());
+ }
+
+ TEST_P(PluginMetadataTest, isRegexPluginShouldBeFalseForAnExactPluginFilename) {
+ PluginMetadata plugin(blankEsm);
+
+ EXPECT_FALSE(plugin.IsRegexPlugin());
+ }
+
+ TEST_P(PluginMetadataTest, isRegexPluginShouldBeTrueIfThePluginNameContainsAColon) {
+ PluginMetadata plugin("Blank:.esm");
+
+ EXPECT_TRUE(plugin.IsRegexPlugin());
+ }
+
+ TEST_P(PluginMetadataTest, isRegexPluginShouldBeTrueIfThePluginNameContainsABackslash) {
+ PluginMetadata plugin("Blank\\.esm");
+
+ EXPECT_TRUE(plugin.IsRegexPlugin());
+ }
+
+ TEST_P(PluginMetadataTest, isRegexPluginShouldBeTrueIfThePluginNameContainsAnAsterisk) {
+ PluginMetadata plugin("Blank*.esm");
+
+ EXPECT_TRUE(plugin.IsRegexPlugin());
+ }
+
+ TEST_P(PluginMetadataTest, isRegexPluginShouldBeTrueIfThePluginNameContainsAQuestionMark) {
+ PluginMetadata plugin("Blank?.esm");
+
+ EXPECT_TRUE(plugin.IsRegexPlugin());
+ }
+
+ TEST_P(PluginMetadataTest, isRegexPluginShouldBeTrueIfThePluginNameContainsAVerticalBar) {
+ PluginMetadata plugin("Blank|.esm");
+
+ EXPECT_TRUE(plugin.IsRegexPlugin());
+ }
+
+ TEST_P(PluginMetadataTest, emittingAsYamlShouldOutputAPluginWithNoMetadataAsABlankString) {
+ PluginMetadata plugin(blankEsm);
+ YAML::Emitter emitter;
+ emitter << plugin;
+
+ EXPECT_STREQ("", emitter.c_str());
+ }
+
+ TEST_P(PluginMetadataTest, emittingAsYamlShouldOutputAPluginWithAnExplicitPriorityCorrectly) {
+ PluginMetadata plugin(blankEsm);
+ plugin.SetPriorityExplicit(true);
+
+ YAML::Emitter emitter;
+ emitter << plugin;
+
+ EXPECT_STREQ("name: 'Blank.esm'\n"
+ "priority: 0", emitter.c_str());
+ }
+
+ TEST_P(PluginMetadataTest, emittingAsYamlShouldOutputAPluginWithAnExplicitPriorityThatIsDisabledCorrectly) {
+ PluginMetadata plugin(blankEsm);
+ plugin.SetPriorityExplicit(true);
+ plugin.Enabled(false);
+
+ YAML::Emitter emitter;
+ emitter << plugin;
+
+ EXPECT_STREQ("name: 'Blank.esm'\n"
+ "priority: 0\n"
+ "enabled: false", emitter.c_str());
+ }
+
+ TEST_P(PluginMetadataTest, emittingAsYamlShouldOutputAPluginWithLoadAfterMetadataCorrectly) {
+ PluginMetadata plugin(blankEsp);
+ plugin.LoadAfter({File(blankEsm)});
+
+ YAML::Emitter emitter;
+ emitter << plugin;
+
+ EXPECT_STREQ("name: 'Blank.esp'\n"
+ "after:\n"
+ " - 'Blank.esm'", emitter.c_str());
+ }
+
+ TEST_P(PluginMetadataTest, emittingAsYamlShouldOutputAPluginWithRequirementsCorrectly) {
+ PluginMetadata plugin(blankEsp);
+ plugin.Reqs({File(blankEsm)});
+
+ YAML::Emitter emitter;
+ emitter << plugin;
+
+ EXPECT_STREQ("name: 'Blank.esp'\n"
+ "req:\n"
+ " - 'Blank.esm'", emitter.c_str());
+ }
+
+ TEST_P(PluginMetadataTest, emittingAsYamlShouldOutputAPluginWithIncompatibilitiesCorrectly) {
+ PluginMetadata plugin(blankEsp);
+ plugin.Incs({File(blankEsm)});
+
+ YAML::Emitter emitter;
+ emitter << plugin;
+
+ EXPECT_STREQ("name: 'Blank.esp'\n"
+ "inc:\n"
+ " - 'Blank.esm'", emitter.c_str());
+ }
+
+ TEST_P(PluginMetadataTest, emittingAsYamlShouldOutputAPluginWithMessagesCorrectly) {
+ PluginMetadata plugin(blankEsp);
+ plugin.Messages({Message(Message::say, "content")});
+
+ YAML::Emitter emitter;
+ emitter << plugin;
+
+ EXPECT_STREQ("name: 'Blank.esp'\n"
+ "msg:\n"
+ " - type: say\n"
+ " content: 'content'", emitter.c_str());
+ }
+
+ TEST_P(PluginMetadataTest, emittingAsYamlShouldOutputAPluginWithTagsCorrectly) {
+ PluginMetadata plugin(blankEsp);
+ plugin.Tags({Tag("Relev")});
+
+ YAML::Emitter emitter;
+ emitter << plugin;
+
+ EXPECT_STREQ("name: 'Blank.esp'\n"
+ "tag:\n"
+ " - Relev", emitter.c_str());
+ }
+
+ TEST_P(PluginMetadataTest, emittingAsYamlShouldOutputAPluginWithDirtyInfoCorrectly) {
+ PluginMetadata plugin(blankEsp);
+ plugin.DirtyInfo({PluginDirtyInfo(5, 0, 1, 2, "utility")});
+
+ YAML::Emitter emitter;
+ emitter << plugin;
+
+ EXPECT_STREQ("name: 'Blank.esp'\n"
+ "dirty:\n"
+ " - crc: 0x5\n"
+ " util: 'utility'\n"
+ " udr: 1\n"
+ " nav: 2", emitter.c_str());
+ }
+
+ TEST_P(PluginMetadataTest, emittingAsYamlShouldOutputAPluginWithLocationsCorrectly) {
+ PluginMetadata plugin(blankEsp);
+ plugin.Locations({Location("http://www.example.com")});
+
+ YAML::Emitter emitter;
+ emitter << plugin;
+
+ EXPECT_STREQ("name: 'Blank.esp'\n"
+ "url:\n"
+ " - 'http://www.example.com'", emitter.c_str());
+ }
+
+ TEST_P(PluginMetadataTest, encodingAsYamlShouldOmitAllUnsetFields) {
+ PluginMetadata plugin(blankEsp);
+ YAML::Node node;
+ node = plugin;
+
+ EXPECT_EQ(plugin.Name(), node["name"].as());
+ EXPECT_FALSE(node["enabled"]);
+ EXPECT_FALSE(node["priority"]);
+ EXPECT_FALSE(node["after"]);
+ EXPECT_FALSE(node["req"]);
+ EXPECT_FALSE(node["inc"]);
+ EXPECT_FALSE(node["msg"]);
+ EXPECT_FALSE(node["tag"]);
+ EXPECT_FALSE(node["dirty"]);
+ EXPECT_FALSE(node["url"]);
+ }
+
+ TEST_P(PluginMetadataTest, encodingAsYamlShouldSetPriorityFieldIfPriorityIsExplicit) {
+ PluginMetadata plugin(blankEsp);
+ plugin.SetPriorityExplicit(true);
+ YAML::Node node;
+ node = plugin;
+
+ EXPECT_EQ(0, node["priority"].as());
+ }
+
+ TEST_P(PluginMetadataTest, encodingAsYamlShouldSetEnabledFieldIfItIsFalse) {
+ PluginMetadata plugin(blankEsp);
+ plugin.Enabled(false);
+ YAML::Node node;
+ node = plugin;
+
+ EXPECT_FALSE(node["enabled"].as());
+ }
+
+ TEST_P(PluginMetadataTest, encodingAsYamlShouldSetAfterFieldIfLoadAfterMetadataExists) {
+ PluginMetadata plugin(blankEsp);
+ plugin.LoadAfter({File(blankEsm)});
+ YAML::Node node;
+ node = plugin;
+
+ EXPECT_EQ(plugin.LoadAfter(), node["after"].as>());
+ }
+
+ TEST_P(PluginMetadataTest, encodingAsYamlShouldSetReqFieldIfRequirementsExist) {
+ PluginMetadata plugin(blankEsp);
+ plugin.Reqs({File(blankEsm)});
+ YAML::Node node;
+ node = plugin;
+
+ EXPECT_EQ(plugin.Reqs(), node["req"].as>());
+ }
+
+ TEST_P(PluginMetadataTest, encodingAsYamlShouldSetIncFieldIfIncompatibilitiesExist) {
+ PluginMetadata plugin(blankEsp);
+ plugin.Incs({File(blankEsm)});
+ YAML::Node node;
+ node = plugin;
+
+ EXPECT_EQ(plugin.Incs(), node["inc"].as>());
+ }
+
+ TEST_P(PluginMetadataTest, encodingAsYamlShouldSetMsgFieldIfMessagesExist) {
+ PluginMetadata plugin(blankEsp);
+ plugin.Messages({Message(Message::say, "content")});
+ YAML::Node node;
+ node = plugin;
+
+ EXPECT_EQ(plugin.Messages(), node["msg"].as>());
+ }
+
+ TEST_P(PluginMetadataTest, encodingAsYamlShouldSetTagFieldIfTagsExist) {
+ PluginMetadata plugin(blankEsp);
+ plugin.Tags({Tag("Relev")});
+ YAML::Node node;
+ node = plugin;
+
+ EXPECT_EQ(plugin.Tags(), node["tag"].as>());
+ }
+
+ TEST_P(PluginMetadataTest, encodingAsYamlShouldSetDirtyFieldIfDirtyInfoExists) {
+ PluginMetadata plugin(blankEsp);
+ plugin.DirtyInfo({PluginDirtyInfo(5, 0, 1, 2, "utility")});
+ YAML::Node node;
+ node = plugin;
+
+ EXPECT_EQ(plugin.DirtyInfo(), node["dirty"].as>());
+ }
+
+ TEST_P(PluginMetadataTest, encodingAsYamlShouldSetUrlFieldIfLocationsExist) {
+ PluginMetadata plugin(blankEsp);
+ plugin.Locations({Location("http://www.example.com")});
+ YAML::Node node;
+ node = plugin;
+
+ EXPECT_EQ(plugin.Locations(), node["url"].as>());
+ }
+
+ TEST_P(PluginMetadataTest, decodingFromYamlShouldSetDefaultPriorityValuesIfNoneAreSpecified) {
+ YAML::Node node = YAML::Load("name: " + blankEsp);
+ PluginMetadata plugin = node.as();
+
+ EXPECT_EQ(blankEsp, plugin.Name());
+ EXPECT_EQ(0, plugin.Priority());
+ EXPECT_FALSE(plugin.IsPriorityExplicit());
+ EXPECT_FALSE(plugin.IsPriorityGlobal());
+ }
+
+ TEST_P(PluginMetadataTest, decodingFromYamlShouldStoreAllGivenData) {
+ YAML::Node node = YAML::Load("name: 'Blank.esp'\n"
+ "priority: 5\n"
+ "enabled: false\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'");
+ PluginMetadata plugin = node.as();
+
+ EXPECT_EQ("Blank.esp", plugin.Name());
+ EXPECT_EQ(5, plugin.Priority());
+ EXPECT_TRUE(plugin.IsPriorityExplicit());
+ EXPECT_FALSE(plugin.IsPriorityGlobal());
+ EXPECT_FALSE(plugin.Enabled());
+ EXPECT_EQ(std::set({
+ File("Blank.esm")
+ }), plugin.LoadAfter());
+ EXPECT_EQ(std::set({
+ File("Blank.esm")
+ }), plugin.Reqs());
+ EXPECT_EQ(std::set({
+ File("Blank.esm")
+ }), plugin.Incs());
+ EXPECT_EQ(std::list({
+ Message(Message::say, "content")
+ }), plugin.Messages());
+ EXPECT_EQ(std::set({
+ Tag("Relev")
+ }), plugin.Tags());
+ EXPECT_EQ(std::set({
+ PluginDirtyInfo(5, 0, 1, 2, "utility")
+ }), plugin.DirtyInfo());
+ EXPECT_EQ(std::set({
+ Location("http://www.example.com")
+ }), plugin.Locations());
+ }
+
+ TEST_P(PluginMetadataTest, decodingFromYamlWithDirtyInfoInARegexPluginMetadataObjectShouldThrow) {
+ YAML::Node node = YAML::Load("name: 'Blank\\.esp'\n"
+ "dirty:\n"
+ " - crc: 0x5\n"
+ " util: 'utility'\n"
+ " udr: 1\n"
+ " nav: 2");
+
+ EXPECT_THROW(node.as(), YAML::RepresentationException);
+ }
+
+ TEST_P(PluginMetadataTest, decodingFromYamlWithAnInvalidRegexNameShouldThrow) {
+ YAML::Node node = YAML::Load("name: 'RagnvaldBook(Farengar(+Ragnvald)?)?\\.esp'\n"
+ "dirty:\n"
+ " - crc: 0x5\n"
+ " util: 'utility'\n"
+ " udr: 1\n"
+ " nav: 2");
+
+ EXPECT_THROW(node.as(), YAML::RepresentationException);
+ }
+
+ TEST_P(PluginMetadataTest, decodingFromAYamlScalarShouldThrow) {
+ YAML::Node node = YAML::Load("scalar");
+
+ EXPECT_THROW(node.as(), YAML::RepresentationException);
+ }
+
+ TEST_P(PluginMetadataTest, decodingFromAYamlListShouldThrow) {
+ YAML::Node node = YAML::Load("[0, 1, 2]");
+
+ EXPECT_THROW(node.as(), YAML::RepresentationException);
+ }
+ }
+}
+
+#endif
diff --git a/src/tests/backend/metadata/test_plugin_metadata.h b/src/tests/backend/metadata/test_plugin_metadata.h
deleted file mode 100644
index d1d8f323..00000000
--- a/src/tests/backend/metadata/test_plugin_metadata.h
+++ /dev/null
@@ -1,953 +0,0 @@
-/* LOOT
-
-A load order optimisation tool for Oblivion, Skyrim, Fallout 3 and
-Fallout: New Vegas.
-
-Copyright (C) 2014-2016 WrinklyNinja
-
-This file is part of LOOT.
-
-LOOT is free software: you can redistribute
-it and/or modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation, either version 3 of
-the License, or (at your option) any later version.
-
-LOOT is distributed in the hope that it will
-be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with LOOT. If not, see
-.
-*/
-
-#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"
-
-namespace loot {
- namespace test {
- class PluginMetadataTest : public SkyrimTest {};
-
- TEST_F(PluginMetadataTest, Constructors) {
- PluginMetadata pm;
- EXPECT_TRUE(pm.Enabled());
- EXPECT_FALSE(pm.IsPriorityExplicit());
- EXPECT_FALSE(pm.IsPriorityGlobal());
- EXPECT_EQ(0, pm.Priority());
-
- pm = PluginMetadata("Blank.esm");
- EXPECT_EQ("Blank.esm", pm.Name());
- EXPECT_TRUE(pm.Enabled());
- EXPECT_FALSE(pm.IsPriorityExplicit());
- EXPECT_FALSE(pm.IsPriorityGlobal());
- EXPECT_EQ(0, pm.Priority());
- }
-
- TEST_F(PluginMetadataTest, EqualityOperator) {
- PluginMetadata pm1, pm2;
- EXPECT_TRUE(pm1 == pm2);
-
- pm1 = PluginMetadata("Blank.esm");
- pm2 = PluginMetadata("blank.esm");
- EXPECT_TRUE(pm1 == pm2);
-
- pm1 = PluginMetadata("Blank.esm");
- pm2 = PluginMetadata("Blan.\\.esm");
- EXPECT_TRUE(pm1 == pm2);
- EXPECT_TRUE(pm2 == pm1);
-
- pm1 = PluginMetadata("Blan.esm");
- pm2 = PluginMetadata("Blan.\\.esm");
- EXPECT_FALSE(pm1 == pm2);
- EXPECT_FALSE(pm2 == pm1);
-
- pm1 = PluginMetadata("Blan.\\.esm");
- pm2 = PluginMetadata("Blan.\\.esm");
- EXPECT_TRUE(pm1 == pm2);
- EXPECT_TRUE(pm2 == pm1);
-
- pm1 = PluginMetadata("Blan(k|p).esm");
- pm2 = PluginMetadata("Blan.\\.esm");
- EXPECT_FALSE(pm1 == pm2);
- EXPECT_FALSE(pm2 == pm1);
- }
-
- TEST_F(PluginMetadataTest, MergeMetadata) {
- 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());
-
- 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_FALSE(pm1.IsPriorityGlobal());
- EXPECT_EQ(std::set({
- File("Blank.esm"),
- File("Blank.esp"),
- }), pm1.LoadAfter());
- EXPECT_EQ(std::set({
- File("Blank.esm"),
- File("Blank.esp"),
- }), pm1.Reqs());
- EXPECT_EQ(std::set({
- File("Blank.esm"),
- File("Blank.esp"),
- }), pm1.Incs());
- EXPECT_EQ(std::list({
- Message(Message::say, "content"),
- Message(Message::say, "content"),
- }), pm1.Messages());
- EXPECT_EQ(std::set({
- Tag("Relev"),
- Tag("Relev", false),
- Tag("Delev"),
- }), pm1.Tags());
- EXPECT_EQ(std::set({
- PluginDirtyInfo(5, 0, 1, 2, "utility"),
- PluginDirtyInfo(9, 0, 1, 2, "utility"),
- }), pm1.DirtyInfo());
- EXPECT_EQ(std::set({
- Location("http://www.example.com"),
- 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());
- EXPECT_FALSE(pm1.IsPriorityGlobal());
- }
-
- TEST_F(PluginMetadataTest, DiffMetadata) {
- 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());
-
- 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());
-
- 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_FALSE(result.IsPriorityGlobal());
- EXPECT_EQ(std::set({
- File("Blank.esp"),
- File("Blank - Different.esm"),
- }), result.LoadAfter());
- EXPECT_EQ(std::set({
- File("Blank.esp"),
- File("Blank - Different.esm"),
- }), result.Reqs());
- EXPECT_EQ(std::set({
- File("Blank.esp"),
- File("Blank - Different.esm"),
- }), result.Incs());
- EXPECT_EQ(std::list({
- Message(Message::say, "content2"),
- Message(Message::say, "content3"),
- }), result.Messages());
- EXPECT_EQ(std::set({
- Tag("Relev", false),
- Tag("Delev"),
- Tag("NoMerge"),
- }), result.Tags());
- EXPECT_EQ(std::set({
- PluginDirtyInfo(9, 0, 1, 2, "utility"),
- PluginDirtyInfo(1, 0, 1, 2, "utility"),
- }), result.DirtyInfo());
- EXPECT_EQ(std::set({
- Location("http://www.example2.com"),
- Location("http://www.other-example.com"),
- }), result.Locations());
-
- pm1.Priority(5);
- result = pm1.DiffMetadata(pm2);
-
- EXPECT_EQ(5, result.Priority());
- EXPECT_TRUE(result.IsPriorityExplicit());
- EXPECT_FALSE(result.IsPriorityGlobal());
- }
-
- TEST_F(PluginMetadataTest, NewMetadata) {
- 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());
-
- 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());
-
- 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_FALSE(result.IsPriorityGlobal());
- EXPECT_EQ(std::set({
- File("Blank.esp")
- }), result.LoadAfter());
- EXPECT_EQ(std::set({
- File("Blank.esp")
- }), result.Reqs());
- EXPECT_EQ(std::set({
- File("Blank.esp")
- }), result.Incs());
- EXPECT_EQ(std::list({
- Message(Message::say, "content3"),
- }), result.Messages());
- EXPECT_EQ(std::set({
- Tag("Relev", false),
- Tag("Delev"),
- }), result.Tags());
- EXPECT_EQ(std::set({
- PluginDirtyInfo(9, 0, 1, 2, "utility")
- }), result.DirtyInfo());
- EXPECT_EQ(std::set({
- Location("http://www.example2.com")
- }), result.Locations());
-
- pm1.Priority(5);
- result = pm2.NewMetadata(pm1);
-
- EXPECT_EQ(0, result.Priority());
- EXPECT_FALSE(result.IsPriorityExplicit());
- EXPECT_FALSE(result.IsPriorityGlobal());
- }
-
- TEST_F(PluginMetadataTest, Enabled) {
- PluginMetadata pm;
- ASSERT_TRUE(pm.Enabled());
- pm.Enabled(false);
- EXPECT_FALSE(pm.Enabled());
- }
-
- TEST_F(PluginMetadataTest, SetPriorityExplicit) {
- PluginMetadata pm;
- ASSERT_FALSE(pm.IsPriorityExplicit());
- pm.SetPriorityExplicit(true);
- EXPECT_TRUE(pm.IsPriorityExplicit());
- }
-
- TEST_F(PluginMetadataTest, Priority) {
- PluginMetadata pm;
- ASSERT_NE(10, pm.Priority());
- pm.Priority(10);
- EXPECT_EQ(10, pm.Priority());
- }
-
- TEST_F(PluginMetadataTest, settingPriorityWithAbsoluteValueGreaterOrEqualToGlobalPriorityDivisorShouldThrow) {
- PluginMetadata pm;
- EXPECT_ANY_THROW(pm.Priority(yamlGlobalPriorityDivisor));
- EXPECT_ANY_THROW(pm.Priority(yamlGlobalPriorityDivisor + 1));
- EXPECT_ANY_THROW(pm.Priority(-yamlGlobalPriorityDivisor));
- EXPECT_ANY_THROW(pm.Priority(-yamlGlobalPriorityDivisor - 1));
- }
-
- TEST_F(PluginMetadataTest, settingPriorityAsGlobalShouldSucceed) {
- PluginMetadata pm;
- ASSERT_FALSE(pm.IsPriorityGlobal());
- pm.SetPriorityGlobal(true);
- EXPECT_TRUE(pm.IsPriorityGlobal());
- }
-
- TEST_F(PluginMetadataTest, settingPriorityAsNotGlobalShouldSucceed) {
- PluginMetadata pm;
- pm.SetPriorityGlobal(true);
- ASSERT_TRUE(pm.IsPriorityGlobal());
- pm.SetPriorityGlobal(false);
- EXPECT_FALSE(pm.IsPriorityGlobal());
- }
-
- TEST_F(PluginMetadataTest, gettingYamlPriorityValueForAGlobalPriorityShouldReturnValueWithGlobalFlagSet) {
- PluginMetadata pm;
- pm.Priority(10);
- pm.SetPriorityGlobal(true);
- EXPECT_EQ(1000010, pm.GetYamlPriorityValue());
-
- pm.Priority(-20);
- EXPECT_EQ(-1000020, pm.GetYamlPriorityValue());
- }
-
- TEST_F(PluginMetadataTest, gettingYamlPriorityValueForANonGlobalPriorityShouldReturnValueWithGlobalFlagNotSet) {
- PluginMetadata pm;
- pm.Priority(10);
- EXPECT_EQ(10, pm.GetYamlPriorityValue());
-
- pm.Priority(-20);
- EXPECT_EQ(-20, pm.GetYamlPriorityValue());
- }
-
- TEST_F(PluginMetadataTest, LoadAfter) {
- PluginMetadata pm;
- ASSERT_TRUE(pm.LoadAfter().empty());
- pm.LoadAfter({
- File("Blank.esm")
- });
- EXPECT_EQ(std::set({
- File("Blank.esm")
- }), pm.LoadAfter());
- }
-
- TEST_F(PluginMetadataTest, Reqs) {
- PluginMetadata pm;
- ASSERT_TRUE(pm.Reqs().empty());
- pm.Reqs({
- File("Blank.esm")
- });
- EXPECT_EQ(std::set({
- File("Blank.esm")
- }), pm.Reqs());
- }
-
- TEST_F(PluginMetadataTest, Incs) {
- PluginMetadata pm;
- ASSERT_TRUE(pm.Incs().empty());
- pm.Incs({
- File("Blank.esm")
- });
- EXPECT_EQ(std::set({
- File("Blank.esm")
- }), pm.Incs());
- }
-
- TEST_F(PluginMetadataTest, Messages) {
- PluginMetadata pm;
- ASSERT_TRUE(pm.Messages().empty());
- pm.Messages({
- Message(Message::say, "content")
- });
- EXPECT_EQ(std::list({
- Message(Message::say, "content")
- }), pm.Messages());
- }
-
- TEST_F(PluginMetadataTest, Tags) {
- PluginMetadata pm;
- ASSERT_TRUE(pm.Tags().empty());
- pm.Tags({
- Tag("Relev")
- });
- EXPECT_EQ(std::set({
- Tag("Relev")
- }), pm.Tags());
- }
-
- TEST_F(PluginMetadataTest, DirtyInfo) {
- PluginMetadata pm;
- ASSERT_TRUE(pm.DirtyInfo().empty());
- pm.DirtyInfo({
- PluginDirtyInfo(5, 0, 1, 2, "utility")
- });
- EXPECT_EQ(std::set({
- PluginDirtyInfo(5, 0, 1, 2, "utility")
- }), pm.DirtyInfo());
- }
-
- TEST_F(PluginMetadataTest, Locations) {
- PluginMetadata pm;
- ASSERT_TRUE(pm.Locations().empty());
- pm.Locations({
- Location("http://www.example.com")
- });
- EXPECT_EQ(std::set({
- Location("http://www.example.com")
- }), pm.Locations());
- }
-
- TEST_F(PluginMetadataTest, EvalAllConditions) {
- Game game(Game::tes5);
- game.SetGamePath(dataPath.parent_path());
- ASSERT_NO_THROW(game.Init(false, localPath));
-
- 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"
- "tag:\n"
- " - name: Relev\n"
- " condition: 'file(\"Blank.missing.esm\")'\n"
- "dirty:\n"
- " - crc: 0x24F0E2A1\n"
- " util: 'utility'\n"
- " udr: 1\n"
- " nav: 2\n"
- " - crc: 0xDEADBEEF\n"
- " util: 'utility'\n"
- " udr: 1\n"
- " nav: 2"
- ).as());
-
- pm.Messages({Message(Message::say, "content")});
- EXPECT_NO_THROW(pm.EvalAllConditions(game, Language::english));
- EXPECT_EQ(std::set({
- File("Blank.esm", "", "file(\"Blank.esm\")")
- }), pm.LoadAfter());
- EXPECT_TRUE(pm.Reqs().empty());
- EXPECT_EQ(std::set({
- File("Blank.esm", "", "file(\"Blank.esm\")")
- }), pm.Incs());
- EXPECT_EQ(std::list({
- Message(Message::say, "content")
- }), pm.Messages());
- EXPECT_TRUE(pm.Tags().empty());
- EXPECT_EQ(std::set({
- PluginDirtyInfo(0x24F0E2A1, 0, 1, 2, "utility")
- }), pm.DirtyInfo());
- }
-
- TEST_F(PluginMetadataTest, HasNameOnly) {
- PluginMetadata pm;
- EXPECT_TRUE(pm.HasNameOnly());
-
- pm = PluginMetadata("Blank.esp");
- EXPECT_TRUE(pm.HasNameOnly());
-
- pm = PluginMetadata("Blank.esp");
- pm.Enabled(false);
- EXPECT_TRUE(pm.HasNameOnly());
-
- pm = PluginMetadata("Blank.esp");
- pm.SetPriorityExplicit(true);
- EXPECT_FALSE(pm.HasNameOnly());
-
- pm = PluginMetadata("Blank.esp");
- pm.LoadAfter({File("Blank.esm")});
- EXPECT_FALSE(pm.HasNameOnly());
-
- pm = PluginMetadata("Blank.esp");
- pm.Reqs({File("Blank.esm")});
- EXPECT_FALSE(pm.HasNameOnly());
-
- pm = PluginMetadata("Blank.esp");
- pm.Incs({File("Blank.esm")});
- EXPECT_FALSE(pm.HasNameOnly());
-
- pm = PluginMetadata("Blank.esp");
- pm.Messages({Message(Message::say, "content")});
- EXPECT_FALSE(pm.HasNameOnly());
-
- pm = PluginMetadata("Blank.esp");
- pm.Tags({Tag("Relev")});
- EXPECT_FALSE(pm.HasNameOnly());
-
- pm = PluginMetadata("Blank.esp");
- pm.DirtyInfo({PluginDirtyInfo(5, 0, 1, 2, "utility")});
- EXPECT_FALSE(pm.HasNameOnly());
-
- pm = PluginMetadata("Blank.esp");
- pm.Locations({Location("http://www.example.com")});
- EXPECT_FALSE(pm.HasNameOnly());
- }
-
- TEST_F(PluginMetadataTest, IsRegexPlugin) {
- PluginMetadata pm;
- EXPECT_FALSE(pm.IsRegexPlugin());
-
- pm = PluginMetadata("Blank.esm");
- EXPECT_FALSE(pm.IsRegexPlugin());
-
- pm = PluginMetadata("Blank[[:blank:]]- Different.esm");
- EXPECT_TRUE(pm.IsRegexPlugin());
-
- pm = PluginMetadata("Blank\\.esm");
- EXPECT_TRUE(pm.IsRegexPlugin());
-
- pm = PluginMetadata("Blank - (Different )*Master Dependent.esm");
- EXPECT_TRUE(pm.IsRegexPlugin());
-
- pm = PluginMetadata("Blank - (Different )?Master Dependent.esm");
- EXPECT_TRUE(pm.IsRegexPlugin());
-
- pm = PluginMetadata("Blank.es(p|m)");
- EXPECT_TRUE(pm.IsRegexPlugin());
- }
-
- TEST_F(PluginMetadataTest, YamlEmitter) {
- PluginMetadata pm("Blank.esp");
- YAML::Emitter e1;
- e1 << pm;
- EXPECT_STREQ("", e1.c_str());
-
- pm.SetPriorityExplicit(true);
- YAML::Emitter e2;
- e2 << pm;
- EXPECT_STREQ("name: 'Blank.esp'\n"
- "priority: 0", e2.c_str());
-
- pm.Enabled(false);
- YAML::Emitter e3;
- e3 << pm;
- EXPECT_STREQ("name: 'Blank.esp'\n"
- "priority: 0\n"
- "enabled: false", e3.c_str());
-
- pm.LoadAfter({File("Blank.esm")});
- YAML::Emitter e4;
- e4 << pm;
- EXPECT_STREQ("name: 'Blank.esp'\n"
- "priority: 0\n"
- "enabled: false\n"
- "after:\n"
- " - 'Blank.esm'", e4.c_str());
-
- pm.Reqs({File("Blank.esm")});
- YAML::Emitter e5;
- e5 << pm;
- EXPECT_STREQ("name: 'Blank.esp'\n"
- "priority: 0\n"
- "enabled: false\n"
- "after:\n"
- " - 'Blank.esm'\n"
- "req:\n"
- " - 'Blank.esm'", e5.c_str());
-
- pm.Incs({File("Blank.esm")});
- YAML::Emitter e6;
- e6 << pm;
- EXPECT_STREQ("name: 'Blank.esp'\n"
- "priority: 0\n"
- "enabled: false\n"
- "after:\n"
- " - 'Blank.esm'\n"
- "req:\n"
- " - 'Blank.esm'\n"
- "inc:\n"
- " - 'Blank.esm'", e6.c_str());
-
- pm.Messages({Message(Message::say, "content")});
- YAML::Emitter e7;
- e7 << pm;
- EXPECT_STREQ("name: 'Blank.esp'\n"
- "priority: 0\n"
- "enabled: false\n"
- "after:\n"
- " - 'Blank.esm'\n"
- "req:\n"
- " - 'Blank.esm'\n"
- "inc:\n"
- " - 'Blank.esm'\n"
- "msg:\n"
- " - type: say\n"
- " content: 'content'", e7.c_str());
-
- pm.Tags({Tag("Relev")});
- YAML::Emitter e8;
- e8 << pm;
- EXPECT_STREQ("name: 'Blank.esp'\n"
- "priority: 0\n"
- "enabled: false\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", e8.c_str());
-
- pm.DirtyInfo({PluginDirtyInfo(5, 0, 1, 2, "utility")});
- YAML::Emitter e9;
- e9 << pm;
- EXPECT_STREQ("name: 'Blank.esp'\n"
- "priority: 0\n"
- "enabled: false\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", e9.c_str());
-
- pm.Locations({Location("http://www.example.com")});
- YAML::Emitter e10;
- e10 << pm;
- EXPECT_STREQ("name: 'Blank.esp'\n"
- "priority: 0\n"
- "enabled: false\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'", e10.c_str());
- }
-
- TEST_F(PluginMetadataTest, YamlEncode) {
- YAML::Node node;
-
- PluginMetadata pm("Blank.esp");
- node = pm;
- EXPECT_EQ("Blank.esp", node["name"].as());
- EXPECT_FALSE(node["enabled"]);
- EXPECT_FALSE(node["priority"]);
- EXPECT_FALSE(node["after"]);
- EXPECT_FALSE(node["req"]);
- EXPECT_FALSE(node["inc"]);
- EXPECT_FALSE(node["msg"]);
- EXPECT_FALSE(node["tag"]);
- EXPECT_FALSE(node["dirty"]);
- EXPECT_FALSE(node["url"]);
-
- pm.SetPriorityExplicit(true);
- node = pm;
- EXPECT_EQ(0, node["priority"].as());
-
- pm.Enabled(false);
- node = pm;
- EXPECT_FALSE(node["enabled"].as());
-
- pm.LoadAfter({File("Blank.esm")});
- node = pm;
- EXPECT_EQ(pm.LoadAfter(), node["after"].as>());
-
- pm.Reqs({File("Blank.esm")});
- node = pm;
- EXPECT_EQ(pm.Reqs(), node["req"].as>());
-
- pm.Incs({File("Blank.esm")});
- node = pm;
- EXPECT_EQ(pm.Incs(), node["inc"].as>());
-
- pm.Messages({Message(Message::say, "content")});
- node = pm;
- EXPECT_EQ(pm.Messages(), node["msg"].as>());
-
- pm.Tags({Tag("Relev")});
- node = pm;
- EXPECT_EQ(pm.Tags(), node["tag"].as>());
-
- pm.DirtyInfo({PluginDirtyInfo(5, 0, 1, 2, "utility")});
- node = pm;
- EXPECT_EQ(pm.DirtyInfo(), node["dirty"].as>());
-
- pm.Locations({Location("http://www.example.com")});
- node = pm;
- EXPECT_EQ(pm.Locations(), node["url"].as>());
- }
-
- TEST_F(PluginMetadataTest, YamlDecode) {
- YAML::Node node;
- PluginMetadata pm;
-
- node = YAML::Load("name: Blank.esp");
- pm = node.as();
- EXPECT_EQ("Blank.esp", pm.Name());
- EXPECT_EQ(0, pm.Priority());
- EXPECT_FALSE(pm.IsPriorityExplicit());
- EXPECT_FALSE(pm.IsPriorityGlobal());
-
- node = YAML::Load("name: 'Blank.esp'\n"
- "priority: 5\n"
- "enabled: false\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'");
- pm = node.as();
- EXPECT_EQ("Blank.esp", pm.Name());
- EXPECT_EQ(5, pm.Priority());
- EXPECT_TRUE(pm.IsPriorityExplicit());
- EXPECT_FALSE(pm.IsPriorityGlobal());
- EXPECT_FALSE(pm.Enabled());
- EXPECT_EQ(std::set({
- File("Blank.esm")
- }), pm.LoadAfter());
- EXPECT_EQ(std::set({
- File("Blank.esm")
- }), pm.Reqs());
- EXPECT_EQ(std::set({
- File("Blank.esm")
- }), pm.Incs());
- EXPECT_EQ(std::list({
- Message(Message::say, "content")
- }), pm.Messages());
- EXPECT_EQ(std::set({
- Tag("Relev")
- }), pm.Tags());
- EXPECT_EQ(std::set({
- PluginDirtyInfo(5, 0, 1, 2, "utility")
- }), pm.DirtyInfo());
- EXPECT_EQ(std::set({
- Location("http://www.example.com")
- }), pm.Locations());
-
- // Don't allow dirty metadata in regex entries.
- node = YAML::Load("name: 'Blank\\.esp'\n"
- "dirty:\n"
- " - crc: 0x5\n"
- " util: 'utility'\n"
- " udr: 1\n"
- " nav: 2");
- EXPECT_THROW(node.as(), YAML::RepresentationException);
-
- // Don't allow invalid regex.
- node = YAML::Load("name: 'RagnvaldBook(Farengar(+Ragnvald)?)?\\.esp'\n"
- "dirty:\n"
- " - crc: 0x5\n"
- " util: 'utility'\n"
- " udr: 1\n"
- " nav: 2");
- EXPECT_THROW(node.as(), YAML::RepresentationException);
-
- // Catch condition syntax errors.
- node = 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\")'"
- );
- EXPECT_THROW(node.as(), YAML::RepresentationException);
-
- node = YAML::Load("scalar");
- EXPECT_THROW(node.as(), YAML::RepresentationException);
-
- node = YAML::Load("[0, 1, 2]");
- EXPECT_THROW(node.as(), YAML::RepresentationException);
- }
- }
-}
-
-#endif
diff --git a/src/tests/main.cpp b/src/tests/main.cpp
index 035ea6cd..3b681725 100644
--- a/src/tests/main.cpp
+++ b/src/tests/main.cpp
@@ -57,7 +57,7 @@
#include "backend/metadata/message_test.h"
#include "backend/metadata/message_content_test.h"
#include "backend/metadata/plugin_dirty_info_test.h"
-#include "backend/metadata/test_plugin_metadata.h"
+#include "backend/metadata/plugin_metadata_test.h"
#include "backend/metadata/test_tag.h"
#include "backend/plugin/test_plugin.h"
#include "backend/test_metadata_list.h"