diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9bac9ebb..33da5b64 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -253,7 +253,7 @@ set (LOOT_TESTS_HEADERS "${CMAKE_SOURCE_DIR}/src/tests/base_game_test.h"
"${CMAKE_SOURCE_DIR}/src/tests/backend/metadata/plugin_dirty_info_test.h"
"${CMAKE_SOURCE_DIR}/src/tests/backend/metadata/plugin_metadata_test.h"
"${CMAKE_SOURCE_DIR}/src/tests/backend/metadata/tag_test.h"
- "${CMAKE_SOURCE_DIR}/src/tests/backend/plugin/test_plugin.h"
+ "${CMAKE_SOURCE_DIR}/src/tests/backend/plugin/plugin_test.h"
"${CMAKE_SOURCE_DIR}/src/tests/backend/test_metadata_list.h"
"${CMAKE_SOURCE_DIR}/src/tests/backend/test_masterlist.h"
"${CMAKE_SOURCE_DIR}/src/tests/backend/test_plugin_sorter.h"
diff --git a/src/tests/backend/plugin/plugin_test.h b/src/tests/backend/plugin/plugin_test.h
new file mode 100644
index 00000000..f29def82
--- /dev/null
+++ b/src/tests/backend/plugin/plugin_test.h
@@ -0,0 +1,311 @@
+/* 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_BACKEND_PLUGIN
+#define LOOT_TEST_BACKEND_PLUGIN
+
+#include "backend/plugin/plugin.h"
+#include "tests/base_game_test.h"
+
+namespace loot {
+ namespace test {
+ class PluginTest : public BaseGameTest {
+ protected:
+ PluginTest() :
+ emptyFile("EmptyFile.esm"),
+ nonPluginFile("NotAPlugin.esm") {}
+
+ inline void SetUp() {
+ BaseGameTest::SetUp();
+
+ game = Game(GetParam());
+ game.SetGamePath(dataPath.parent_path());
+ game.Init(false, localPath);
+
+ // Write out an empty file.
+ boost::filesystem::ofstream out(dataPath / emptyFile);
+ out.close();
+ ASSERT_TRUE(boost::filesystem::exists(dataPath / emptyFile));
+
+ // Write out an non-empty, non-plugin file.
+ out.open(dataPath / nonPluginFile);
+ out << "This isn't a valid plugin file.";
+ out.close();
+ ASSERT_TRUE(boost::filesystem::exists(dataPath / nonPluginFile));
+
+ if (GetParam() == GameSettings::tes4 || GetParam() == GameSettings::fo4) {
+ // Create a dummy BSA file.
+ out.open(dataPath / getArchiveName());
+ out.close();
+ }
+ }
+
+ inline void TearDown() {
+ BaseGameTest::TearDown();
+
+ boost::filesystem::remove(dataPath / emptyFile);
+ boost::filesystem::remove(dataPath / nonPluginFile);
+
+ if (GetParam() == GameSettings::tes4 || GetParam() == GameSettings::fo4)
+ boost::filesystem::remove(dataPath / getArchiveName());
+ }
+
+ Game game;
+
+ const std::string emptyFile;
+ const std::string nonPluginFile;
+
+ private:
+ inline std::string getArchiveName() {
+ if (GetParam() == GameSettings::fo4)
+ return "Blank.ba2";
+ else
+ return "Blank.bsa";
+ }
+ };
+
+ // 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(,
+ PluginTest,
+ ::testing::Values(
+ GameSettings::tes4,
+ GameSettings::tes5,
+ GameSettings::fo3,
+ GameSettings::fonv,
+ GameSettings::fo4));
+
+ TEST_P(PluginTest, loadingHeaderOnlyShouldReadHeaderData) {
+ Plugin plugin(game, blankEsm, true);
+
+ EXPECT_EQ(blankEsm, plugin.Name());
+ EXPECT_TRUE(plugin.getMasters().empty());
+ EXPECT_TRUE(plugin.isMasterFile());
+ EXPECT_FALSE(plugin.IsEmpty());
+ EXPECT_EQ("v5.0", plugin.getDescription());
+ }
+
+ TEST_P(PluginTest, loadingHeaderOnlyShouldNotReadFieldsOrCalculateCrc) {
+ Plugin plugin(game, blankEsm, true);
+
+ EXPECT_TRUE(plugin.getFormIds().empty());
+ EXPECT_EQ(0, plugin.Crc());
+ }
+
+ TEST_P(PluginTest, loadingWholePluginShouldReadHeaderData) {
+ Plugin plugin(game, blankEsm, true);
+
+ EXPECT_EQ(blankEsm, plugin.Name());
+ EXPECT_TRUE(plugin.getMasters().empty());
+ EXPECT_TRUE(plugin.isMasterFile());
+ EXPECT_FALSE(plugin.IsEmpty());
+ EXPECT_EQ("v5.0", plugin.getDescription());
+ }
+
+ TEST_P(PluginTest, loadingWholePluginShouldReadFields) {
+ Plugin plugin(game, blankMasterDependentEsm, false);
+
+ EXPECT_EQ(4, plugin.NumOverrideFormIDs());
+ }
+
+ TEST_P(PluginTest, loadingWholePluginShouldCalculateCrc) {
+ Plugin plugin(game, blankEsm, false);
+
+ EXPECT_EQ(blankEsmCrc, plugin.Crc());
+ }
+
+ TEST_P(PluginTest, loadingANonMasterPluginShouldReadTheMasterFlagAsFalse) {
+ Plugin plugin(game, blankMasterDependentEsp, true);
+
+ EXPECT_FALSE(plugin.isMasterFile());
+ }
+
+ TEST_P(PluginTest, loadingAPluginWithMastersShouldReadThemCorrectly) {
+ Plugin plugin(game, blankMasterDependentEsp, true);
+
+ EXPECT_EQ(std::vector({
+ blankEsm
+ }), plugin.getMasters());
+ }
+
+ TEST_P(PluginTest, loadsArchiveShouldReturnTrueForAPluginThatLoadsAnArchive) {
+ EXPECT_TRUE(Plugin(game, blankEsp, true).LoadsArchive());
+ }
+
+ TEST_P(PluginTest, loadsArchiveShouldReturnFalseForAPluginThatDoesNotLoadAnArchive) {
+ EXPECT_FALSE(Plugin(game, blankDifferentEsm, true).LoadsArchive());
+ }
+
+ TEST_P(PluginTest, loadsArchiveShouldReturnFalseForAPluginWithARegexFilename) {
+ EXPECT_FALSE(Plugin(game, "Blank\\.esp", true).LoadsArchive());
+ }
+
+ TEST_P(PluginTest, isValidShouldReturnTrueForAValidPlugin) {
+ EXPECT_TRUE(Plugin::IsValid(blankEsm, game));
+ }
+
+ TEST_P(PluginTest, isValidShouldReturnFalseForANonPluginFile) {
+ EXPECT_FALSE(Plugin::IsValid(nonPluginFile, game));
+ }
+
+ TEST_P(PluginTest, isValidShouldReturnFalseForAnEmptyFile) {
+ EXPECT_FALSE(Plugin::IsValid(emptyFile, game));
+ }
+
+ TEST_P(PluginTest, isActiveShouldReturnTrueForAPluginThatIsActive) {
+ EXPECT_TRUE(Plugin(game, blankEsm, true).IsActive());
+ }
+
+ TEST_P(PluginTest, isActiveShouldReturnFalseForAPluginThatIsNotActive) {
+ EXPECT_FALSE(Plugin(game, blankEsp, true).IsActive());
+ }
+
+ TEST_P(PluginTest, lessThanOperatorShouldUseCaseInsensitiveLexicographicalNameComparison) {
+ Plugin plugin1(game, "Blank.esp", true);
+ Plugin plugin2(game, "blank.esp", true);
+
+ EXPECT_FALSE(plugin1 < plugin2);
+ EXPECT_FALSE(plugin2 < plugin1);
+
+ plugin1 = Plugin(game, "blank.esm", true);
+ plugin2 = Plugin(game, "blank.esp", true);
+
+ EXPECT_TRUE(plugin1 < plugin2);
+ EXPECT_FALSE(plugin2 < plugin1);
+ }
+
+ TEST_P(PluginTest, doFormIDsOverlapShouldReturnFalseForTwoPluginsWithOnlyHeadersLoaded) {
+ Plugin plugin1(game, blankEsm, true);
+ Plugin plugin2(game, blankMasterDependentEsm, true);
+
+ EXPECT_FALSE(plugin1.DoFormIDsOverlap(plugin2));
+ EXPECT_FALSE(plugin2.DoFormIDsOverlap(plugin1));
+ }
+
+ TEST_P(PluginTest, doFormIDsOverlapShouldReturnFalseIfThePluginsHaveUnrelatedRecords) {
+ Plugin plugin1(game, blankEsm, false);
+ Plugin plugin2(game, blankEsp, false);
+
+ EXPECT_FALSE(plugin1.DoFormIDsOverlap(plugin2));
+ EXPECT_FALSE(plugin2.DoFormIDsOverlap(plugin1));
+ }
+
+ TEST_P(PluginTest, doFormIDsOverlapShouldReturnTrueIfOnePluginOverridesTheOthersRecords) {
+ Plugin plugin1(game, blankEsm, false);
+ Plugin plugin2(game, blankMasterDependentEsm, false);
+
+ EXPECT_TRUE(plugin1.DoFormIDsOverlap(plugin2));
+ EXPECT_TRUE(plugin2.DoFormIDsOverlap(plugin1));
+ }
+
+ TEST_P(PluginTest, overlapFormIDsShouldReturnAnEmptySetForTwoPluginsWithOnlyHeadersLoaded) {
+ Plugin plugin1(game, blankEsm, true);
+ Plugin plugin2(game, blankMasterDependentEsm, true);
+
+ EXPECT_TRUE(plugin1.OverlapFormIDs(plugin2).empty());
+ EXPECT_TRUE(plugin2.OverlapFormIDs(plugin1).empty());
+ }
+
+ TEST_P(PluginTest, overlapFormIDsShouldReturnAnEmptySetIfThePluginsHaveUnrelatedRecords) {
+ Plugin plugin1(game, blankEsm, false);
+ Plugin plugin2(game, blankEsp, false);
+
+ EXPECT_TRUE(plugin1.OverlapFormIDs(plugin2).empty());
+ EXPECT_TRUE(plugin2.OverlapFormIDs(plugin1).empty());
+ }
+
+ TEST_P(PluginTest, overlapFormIDsShouldReturnTheFormIDsOfRecordsAddedByOnePluginAndOverriddenByTheOther) {
+ Plugin plugin1(game, blankEsm, false);
+ Plugin plugin2(game, blankMasterDependentEsm, false);
+
+ std::set expectedFormIds({
+ libespm::FormId(blankEsm, std::vector(), 0xCF0),
+ libespm::FormId(blankEsm, std::vector(), 0xCF1),
+ libespm::FormId(blankEsm, std::vector(), 0xCF2),
+ libespm::FormId(blankEsm, std::vector(), 0xCF3),
+ });
+ EXPECT_EQ(expectedFormIds, plugin1.OverlapFormIDs(plugin2));
+ EXPECT_EQ(expectedFormIds, plugin2.OverlapFormIDs(plugin1));
+ }
+
+ TEST_P(PluginTest, checkInstallValidityShouldCheckThatRequirementsArePresent) {
+ Plugin plugin(game, blankEsm, false);
+ plugin.Reqs({
+ File(missingEsp),
+ File(blankEsp),
+ });
+
+ EXPECT_FALSE(plugin.CheckInstallValidity(game));
+ EXPECT_EQ(std::list({
+ Message(Message::error, "This plugin requires \"" + missingEsp + "\" to be installed, but it is missing."),
+ }), plugin.Messages());
+ }
+
+ TEST_P(PluginTest, checkInstallValidityShouldCheckThatIncompatibilitiesAreAbsent) {
+ Plugin plugin(game, blankEsm, false);
+ plugin.Incs({
+ File(missingEsp),
+ File(masterFile),
+ });
+
+ EXPECT_FALSE(plugin.CheckInstallValidity(game));
+ EXPECT_EQ(std::list({
+ Message(Message::error, "This plugin is incompatible with \"" + masterFile + "\", but both are present."),
+ }), plugin.Messages());
+ }
+
+ TEST_P(PluginTest, checkInstallValidityShouldGenerateMessagesFromDirtyInfo) {
+ Plugin plugin(game, blankEsm, false);
+ plugin.DirtyInfo({
+ PluginDirtyInfo(blankEsmCrc, 0, 1, 2, "utility1"),
+ PluginDirtyInfo(0xDEADBEEF, 0, 5, 10, "utility2"),
+ });
+
+ EXPECT_TRUE(plugin.CheckInstallValidity(game));
+ EXPECT_EQ(std::list({
+ PluginDirtyInfo(blankEsmCrc, 0, 1, 2, "utility1").AsMessage(),
+ PluginDirtyInfo(0xDEADBEEF, 0, 5, 10, "utility2").AsMessage(),
+ }), plugin.Messages());
+ }
+
+ TEST_P(PluginTest, checkInstallValidityShouldCheckIfAPluginsMastersAreAllPresentAndActiveIfNoFilterTagIsPresent) {
+ Plugin plugin(game, blankDifferentMasterDependentEsp, false);
+
+ EXPECT_FALSE(plugin.CheckInstallValidity(game));
+ EXPECT_EQ(std::list({
+ Message(Message::error, "This plugin requires \"" + blankDifferentEsm + "\" to be active, but it is inactive."),
+ }), plugin.Messages());
+ }
+
+ TEST_P(PluginTest, checkInstallValidityShouldNotCheckIfAPluginsMastersAreAllActiveIfAFilterTagIsPresent) {
+ Plugin plugin(game, blankDifferentMasterDependentEsp, false);
+ plugin.Tags({Tag("Filter")});
+
+ EXPECT_FALSE(plugin.CheckInstallValidity(game));
+ EXPECT_TRUE(plugin.Messages().empty());
+ }
+ }
+}
+
+#endif
diff --git a/src/tests/backend/plugin/test_plugin.h b/src/tests/backend/plugin/test_plugin.h
deleted file mode 100644
index cffefa83..00000000
--- a/src/tests/backend/plugin/test_plugin.h
+++ /dev/null
@@ -1,258 +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_BACKEND_PLUGIN
-#define LOOT_TEST_BACKEND_PLUGIN
-
-#include "backend/plugin/plugin.h"
-#include "tests/fixtures.h"
-
-namespace loot {
- namespace test {
- class PluginTest : public SkyrimTest {
- protected:
- inline virtual void SetUp() {
- SkyrimTest::SetUp();
-
- game = Game(Game::tes5);
- game.SetGamePath(dataPath.parent_path());
- ASSERT_NO_THROW(game.Init(false, localPath));
- }
-
- Game game;
- };
-
- TEST_F(PluginTest, ConstructorsAndDataAccess) {
- Plugin plugin(game, "Blank.esm", true);
- EXPECT_EQ("Blank.esm", plugin.Name());
- EXPECT_TRUE(plugin.getFormIds().empty());
- EXPECT_TRUE(plugin.getMasters().empty());
- EXPECT_TRUE(plugin.isMasterFile());
- EXPECT_FALSE(plugin.IsEmpty());
- EXPECT_EQ("v5.0", plugin.getDescription());
- EXPECT_EQ(0, plugin.Crc());
-
- plugin = Plugin(game, "Blank.esm", false);
- EXPECT_EQ("Blank.esm", plugin.Name());
- EXPECT_EQ(std::set({
- libespm::FormId("Blank.esm", std::vector(), 0xCF0),
- libespm::FormId("Blank.esm", std::vector(), 0xCF1),
- libespm::FormId("Blank.esm", std::vector(), 0xCF2),
- libespm::FormId("Blank.esm", std::vector(), 0xCF3),
- libespm::FormId("Blank.esm", std::vector(), 0xCF4),
- libespm::FormId("Blank.esm", std::vector(), 0xCF5),
- libespm::FormId("Blank.esm", std::vector(), 0xCF6),
- libespm::FormId("Blank.esm", std::vector(), 0xCF7),
- libespm::FormId("Blank.esm", std::vector(), 0xCF8),
- libespm::FormId("Blank.esm", std::vector(), 0xCF9),
- }), plugin.getFormIds());
- EXPECT_TRUE(plugin.getMasters().empty());
- EXPECT_TRUE(plugin.isMasterFile());
- EXPECT_FALSE(plugin.IsEmpty());
- EXPECT_EQ("v5.0", plugin.getDescription());
- EXPECT_EQ(0x187BE342, plugin.Crc());
-
- plugin = Plugin(game, "Blank - Master Dependent.esp", false);
- EXPECT_EQ("Blank - Master Dependent.esp", plugin.Name());
- EXPECT_FALSE(plugin.IsEmpty());
- EXPECT_FALSE(plugin.isMasterFile());
- EXPECT_EQ(std::set({
- libespm::FormId("Blank.esm", std::vector(), 0xCF0),
- libespm::FormId("Blank.esm", std::vector(), 0xCF1),
- libespm::FormId("Blank - Master Dependent.esp", std::vector(), 0xCE9),
- libespm::FormId("Blank - Master Dependent.esp", std::vector(), 0xCEA),
- }), plugin.getFormIds());
- EXPECT_EQ(std::vector({
- "Blank.esm"
- }), plugin.getMasters());
- EXPECT_EQ("", plugin.getDescription());
- EXPECT_EQ(0x832152DC, plugin.Crc());
- }
-
- TEST_F(PluginTest, LoadsArchive) {
- EXPECT_FALSE(Plugin(game, "Blank - Different.esm", true).LoadsArchive());
- EXPECT_FALSE(Plugin(game, "Blank\\.esm", true).LoadsArchive());
- EXPECT_TRUE(Plugin(game, "Blank.esm", true).LoadsArchive());
- }
-
- TEST_F(PluginTest, IsValid) {
- EXPECT_TRUE(Plugin::IsValid("Blank.esm", game));
- EXPECT_FALSE(Plugin::IsValid("NotAPlugin.esm", game));
- EXPECT_FALSE(Plugin::IsValid("EmptyFile.esm", game));
- }
-
- TEST_F(PluginTest, IsActive) {
- Plugin plugin(game, "Blank.esm", true);
- EXPECT_TRUE(plugin.IsActive());
-
- plugin = Plugin(game, "Blank.esp", true);
- EXPECT_FALSE(plugin.IsActive());
- }
-
- TEST_F(PluginTest, EqualityOperator) {
- Plugin plugin1(game, "Blank.esm", true);
- Plugin plugin2(game, "blank.esm", true);
- EXPECT_TRUE(plugin1 == plugin2);
- EXPECT_TRUE(plugin2 == plugin1);
-
- plugin2 = Plugin(game, "Blank.esp", true);
- EXPECT_FALSE(plugin1 == plugin2);
- EXPECT_FALSE(plugin2 == plugin1);
-
- plugin2 = Plugin(game, "Blan.\\.esm", true);
- EXPECT_TRUE(plugin1 == plugin2);
- EXPECT_TRUE(plugin2 == plugin1);
-
- plugin1 = Plugin(game, "Blan.esm", true);
- EXPECT_FALSE(plugin1 == plugin2);
- EXPECT_FALSE(plugin2 == plugin1);
-
- plugin1 = Plugin(game, "Blan.\\.esm", true);
- EXPECT_TRUE(plugin1 == plugin2);
- EXPECT_TRUE(plugin2 == plugin1);
-
- plugin1 = Plugin(game, "Blan(k|p).esm", true);
- EXPECT_FALSE(plugin1 == plugin2);
- EXPECT_FALSE(plugin2 == plugin1);
- }
-
- TEST_F(PluginTest, InequalityOperator) {
- Plugin plugin1(game, "Blank.esm", true);
- Plugin plugin2(game, "blank.esm", true);
- EXPECT_FALSE(plugin1 != plugin2);
- EXPECT_FALSE(plugin2 != plugin1);
-
- plugin2 = Plugin(game, "Blank.esp", true);
- EXPECT_TRUE(plugin1 != plugin2);
- EXPECT_TRUE(plugin2 != plugin1);
-
- plugin2 = Plugin(game, "Blan.\\.esm", true);
- EXPECT_FALSE(plugin1 != plugin2);
- EXPECT_FALSE(plugin2 != plugin1);
-
- plugin1 = Plugin(game, "Blan.esm", true);
- EXPECT_TRUE(plugin1 != plugin2);
- EXPECT_TRUE(plugin2 != plugin1);
-
- plugin1 = Plugin(game, "Blan.\\.esm", true);
- EXPECT_FALSE(plugin1 != plugin2);
- EXPECT_FALSE(plugin2 != plugin1);
-
- plugin1 = Plugin(game, "Blan(k|p).esm", true);
- EXPECT_TRUE(plugin1 != plugin2);
- EXPECT_TRUE(plugin2 != plugin1);
- }
-
- TEST_F(PluginTest, DoFormIDsOverlap) {
- Plugin plugin1(game, "Blank.esm", true);
- Plugin plugin2(game, "blank.esm", true);
- EXPECT_FALSE(plugin1.DoFormIDsOverlap(plugin2));
- EXPECT_FALSE(plugin2.DoFormIDsOverlap(plugin1));
-
- plugin1 = Plugin(game, "Blank.esm", true);
- plugin2 = Plugin(game, "Blank - Master Dependent.esm", true);
- EXPECT_FALSE(plugin1.DoFormIDsOverlap(plugin2));
- EXPECT_FALSE(plugin2.DoFormIDsOverlap(plugin1));
-
- plugin1 = Plugin(game, "Blank.esm", false);
- plugin2 = Plugin(game, "Blank.esp", false);
- EXPECT_FALSE(plugin1.DoFormIDsOverlap(plugin2));
- EXPECT_FALSE(plugin2.DoFormIDsOverlap(plugin1));
-
- plugin1 = Plugin(game, "Blank.esm", false);
- plugin2 = Plugin(game, "Blank - Master Dependent.esm", false);
- EXPECT_TRUE(plugin1.DoFormIDsOverlap(plugin2));
- EXPECT_TRUE(plugin2.DoFormIDsOverlap(plugin1));
- }
-
- TEST_F(PluginTest, OverlapFormIDs) {
- Plugin plugin1(game, "Blank.esm", true);
- Plugin plugin2(game, "blank.esm", true);
- EXPECT_TRUE(plugin1.OverlapFormIDs(plugin2).empty());
- EXPECT_TRUE(plugin2.OverlapFormIDs(plugin1).empty());
-
- plugin1 = Plugin(game, "Blank.esm", true);
- plugin2 = Plugin(game, "Blank - Master Dependent.esm", true);
- EXPECT_TRUE(plugin1.OverlapFormIDs(plugin2).empty());
- EXPECT_TRUE(plugin2.OverlapFormIDs(plugin1).empty());
-
- plugin1 = Plugin(game, "Blank.esm", false);
- plugin2 = Plugin(game, "Blank.esp", false);
- EXPECT_TRUE(plugin1.OverlapFormIDs(plugin2).empty());
- EXPECT_TRUE(plugin2.OverlapFormIDs(plugin1).empty());
-
- plugin1 = Plugin(game, "Blank.esm", false);
- plugin2 = Plugin(game, "Blank - Master Dependent.esm", false);
- EXPECT_EQ(std::set({
- libespm::FormId("Blank.esm", std::vector(), 0xCF0),
- libespm::FormId("Blank.esm", std::vector(), 0xCF1),
- libespm::FormId("Blank.esm", std::vector(), 0xCF2),
- libespm::FormId("Blank.esm", std::vector(), 0xCF3),
- }), plugin1.OverlapFormIDs(plugin2));
- EXPECT_EQ(std::set({
- libespm::FormId("Blank.esm", std::vector(), 0xCF0),
- libespm::FormId("Blank.esm", std::vector(), 0xCF1),
- libespm::FormId("Blank.esm", std::vector(), 0xCF2),
- libespm::FormId("Blank.esm", std::vector(), 0xCF3),
- }), plugin2.OverlapFormIDs(plugin1));
- }
-
- TEST_F(PluginTest, CheckInstallValidity) {
- Plugin plugin(game, "Blank.esm", false);
- plugin.Reqs({
- File("Blank.missing.esm"),
- File("Blank.esp"),
- File("Blank - Master Dependent.esm"),
- });
- plugin.Incs({
- File("Blank - Different.esm"),
- File("Skyrim.esm"),
- });
- plugin.DirtyInfo({
- PluginDirtyInfo(0x187BE342, 0, 1, 2, "utility1"),
- PluginDirtyInfo(0xDEADBEEF, 0, 5, 10, "utility2"),
- });
- EXPECT_TRUE(plugin.CheckInstallValidity(game));
- EXPECT_EQ(std::list({
- Message(Message::error, "This plugin requires \"Blank.missing.esm\" to be installed, but it is missing."),
- Message(Message::error, "This plugin is incompatible with \"Skyrim.esm\", but both are present."),
- PluginDirtyInfo(0x187BE342, 0, 1, 2, "utility1").AsMessage(),
- PluginDirtyInfo(0xDEADBEEF, 0, 5, 10, "utility2").AsMessage(),
- }), plugin.Messages());
-
- plugin = Plugin(game, "Blank - Different Master Dependent.esp", false);
- EXPECT_FALSE(plugin.CheckInstallValidity(game));
- EXPECT_EQ(std::list({
- Message(Message::error, "This plugin requires \"Blank - Different.esm\" to be active, but it is inactive."),
- }), plugin.Messages());
-
- plugin = Plugin(game, "Blank - Different Master Dependent.esp", false);
- plugin.Tags({Tag("Filter")});
- EXPECT_FALSE(plugin.CheckInstallValidity(game));
- EXPECT_TRUE(plugin.Messages().empty());
- }
- }
-}
-
-#endif
diff --git a/src/tests/base_game_test.h b/src/tests/base_game_test.h
index 6d1a1afd..be755b76 100644
--- a/src/tests/base_game_test.h
+++ b/src/tests/base_game_test.h
@@ -145,6 +145,7 @@ namespace loot {
return std::unordered_set({
masterFile,
blankEsm,
+ blankDifferentMasterDependentEsp,
});
}
diff --git a/src/tests/main.cpp b/src/tests/main.cpp
index cd03bf57..079cdea0 100644
--- a/src/tests/main.cpp
+++ b/src/tests/main.cpp
@@ -59,7 +59,7 @@
#include "backend/metadata/plugin_dirty_info_test.h"
#include "backend/metadata/plugin_metadata_test.h"
#include "backend/metadata/tag_test.h"
-#include "backend/plugin/test_plugin.h"
+#include "backend/plugin/plugin_test.h"
#include "backend/test_metadata_list.h"
#include "backend/test_masterlist.h"
#include "backend/test_plugin_sorter.h"