Make SortPlugins take a vector of plugins to sort

This commit is contained in:
Oliver Hamlet
2016-08-24 08:08:21 +01:00
parent 1bec0e652f
commit 4028f1cebb
13 changed files with 111 additions and 73 deletions
+5 -2
View File
@@ -84,9 +84,12 @@ public:
* loaded, and reads the contents of each plugin. No changes are
* applied to the load order used by the game. This function does
* not load or evaluate the masterlist or userlist.
* @returns A vector of plugin filenames in their sorted load order.
* @param plugins
* A vector of filenames of the plugins to sort.
* @returns A vector of the given plugin filenames in their sorted load
* order.
*/
virtual std::vector<std::string> SortPlugins() = 0;
virtual std::vector<std::string> SortPlugins(const std::vector<std::string>& plugins) = 0;
/**
* @}
+8 -8
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: LOOT 0.9.2\n"
"Report-Msgid-Bugs-To: https://github.com/loot/loot/issues\n"
"POT-Creation-Date: 2016-08-13 07:20+0100\n"
"POT-Creation-Date: 2016-08-17 18:15+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -671,19 +671,19 @@ msgstr ""
msgid "Error: Game-specific settings could not be initialised. %1%"
msgstr ""
#: src/backend/app/loot_state.cpp:272
#: src/backend/app/loot_state.cpp:274
msgid "None of the supported games were detected."
msgstr ""
#: src/backend/game/game.cpp:62
#: src/backend/game/game.cpp:60
msgid "Invalid game ID supplied."
msgstr ""
#: src/backend/game/game.cpp:69
#: src/backend/game/game.cpp:67
msgid "Game path could not be detected."
msgstr ""
#: src/backend/game/game.cpp:79
#: src/backend/game/game.cpp:77
msgid "Could not create LOOT folder for game. Details:"
msgstr ""
@@ -819,15 +819,15 @@ msgstr ""
msgid "Cannot read \"%1%\". Details: %2%"
msgstr ""
#: src/backend/plugin/plugin.cpp:213 src/backend/plugin/plugin.cpp:224
#: src/backend/plugin/plugin.cpp:221 src/backend/plugin/plugin.cpp:232
msgid "This plugin requires \"%1%\" to be installed, but it is missing."
msgstr ""
#: src/backend/plugin/plugin.cpp:216
#: src/backend/plugin/plugin.cpp:224
msgid "This plugin requires \"%1%\" to be active, but it is inactive."
msgstr ""
#: src/backend/plugin/plugin.cpp:230
#: src/backend/plugin/plugin.cpp:238
msgid "This plugin is incompatible with \"%1%\", but both are present."
msgstr ""
+2 -2
View File
@@ -86,9 +86,9 @@ void ApiDatabase::EvalLists(const LanguageCode language) {
// LOOT Functionality Functions
////////////////////////////////////
std::vector<std::string> ApiDatabase::SortPlugins() {
std::vector<std::string> ApiDatabase::SortPlugins(const std::vector<std::string>& plugins) {
// Always reload all the plugins.
game_.LoadPlugins(false);
game_.LoadPlugins(plugins, false);
//Sort plugins into their load order.
PluginSorter sorter;
+1 -1
View File
@@ -43,7 +43,7 @@ struct ApiDatabase : public DatabaseInterface {
void EvalLists(const LanguageCode language);
std::vector<std::string> SortPlugins();
std::vector<std::string> SortPlugins(const std::vector<std::string>& plugins);
bool UpdateMasterlist(const std::string& masterlist_path,
const std::string& remote_url,
+30 -17
View File
@@ -113,31 +113,28 @@ void Game::RedatePlugins() {
}
}
void Game::LoadPlugins(bool headersOnly) {
void Game::LoadPlugins(const std::vector<std::string>& plugins, bool headersOnly) {
uintmax_t meanFileSize = 0;
std::multimap<uintmax_t, string> sizeMap;
// First find out how many plugins there are, and their sizes.
BOOST_LOG_TRIVIAL(trace) << "Scanning for plugins in " << this->DataPath();
for (fs::directory_iterator it(this->DataPath()); it != fs::directory_iterator(); ++it) {
if (fs::is_regular_file(it->status()) && Plugin::IsValid(it->path().filename().string(), *this)) {
string name = it->path().filename().string();
BOOST_LOG_TRIVIAL(info) << "Found plugin: " << name;
// First get the plugin sizes.
for (const auto& plugin : plugins) {
if (!Plugin::IsValid(plugin, *this))
throw Error(Error::Code::invalid_args, "\"" + plugin + "\" is not a valid plugin");
// Trim .ghost extension if present.
if (boost::iends_with(name, ".ghost"))
name = name.substr(0, name.length() - 6);
uintmax_t fileSize = Plugin::GetFileSize(plugin, *this);
meanFileSize += fileSize;
uintmax_t fileSize = fs::file_size(it->path());
meanFileSize += fileSize;
sizeMap.emplace(fileSize, name);
}
// Trim .ghost extension if present.
if (boost::iends_with(plugin, ".ghost"))
sizeMap.emplace(fileSize, plugin.substr(0, plugin.length() - 6));
else
sizeMap.emplace(fileSize, plugin);
}
meanFileSize /= sizeMap.size(); //Rounding error, but not important.
// Get the number of threads to use.
// hardware_concurrency() may be zero, if so then use only one thread.
// Get the number of threads to use.
// hardware_concurrency() may be zero, if so then use only one thread.
size_t threadsToUse = std::min((size_t)thread::hardware_concurrency(), sizeMap.size());
threadsToUse = std::max(threadsToUse, (size_t)1);
@@ -185,6 +182,22 @@ void Game::LoadPlugins(bool headersOnly) {
pluginsFullyLoaded_ = !headersOnly;
}
void Game::LoadAllInstalledPlugins(bool headersOnly) {
std::vector<std::string> plugins;
BOOST_LOG_TRIVIAL(trace) << "Scanning for plugins in " << this->DataPath();
for (fs::directory_iterator it(this->DataPath()); it != fs::directory_iterator(); ++it) {
if (fs::is_regular_file(it->status()) && Plugin::IsValid(it->path().filename().string(), *this)) {
string name = it->path().filename().string();
BOOST_LOG_TRIVIAL(info) << "Found plugin: " << name;
plugins.push_back(name);
}
}
LoadPlugins(plugins, headersOnly);
}
bool Game::ArePluginsFullyLoaded() const {
return pluginsFullyLoaded_;
}
+2 -1
View File
@@ -45,7 +45,8 @@ public:
void RedatePlugins(); //Change timestamps to match load order (Skyrim only).
void LoadPlugins(bool headersOnly); //Loads all installed plugins.
void LoadPlugins(const std::vector<std::string>& plugins, bool headersOnly);
void LoadAllInstalledPlugins(bool headersOnly); //Loads all installed plugins.
bool ArePluginsFullyLoaded() const; // Checks if the game's plugins have already been loaded.
// Check if the plugin is active by using the cached value if
+8
View File
@@ -187,6 +187,14 @@ bool Plugin::IsValid(const std::string& filename, const Game& game) {
return false;
}
uintmax_t Plugin::GetFileSize(const std::string & filename, const Game & game) {
boost::filesystem::path realPath = game.DataPath() / filename;
if (!boost::filesystem::exists(realPath))
realPath += ".ghost";
return boost::filesystem::file_size(realPath);
}
bool Plugin::operator < (const Plugin & rhs) const {
return boost::ilexicographical_compare(Name(), rhs.Name());;
}
+1
View File
@@ -62,6 +62,7 @@ public:
// Checks that reqs and masters are all present, and that no incs are present.
void CheckInstallValidity(const Game& game);
static bool IsValid(const std::string& filename, const Game& game);
static uintmax_t GetFileSize(const std::string& filename, const Game& game);
bool operator < (const Plugin& rhs) const;
private:
+3 -3
View File
@@ -353,7 +353,7 @@ void QueryHandler::GetConflictingPlugins(const std::string& pluginName, CefRefPt
// Checking for FormID overlap will only work if the plugins have been loaded, so check if
// the plugins have been fully loaded, and if not load all plugins.
if (!lootState_.getCurrentGame().ArePluginsFullyLoaded())
lootState_.getCurrentGame().LoadPlugins(false);
lootState_.getCurrentGame().LoadAllInstalledPlugins(false);
YAML::Node node;
auto plugin = lootState_.getCurrentGame().GetPlugin(pluginName);
@@ -578,7 +578,7 @@ void QueryHandler::GetGameData(CefRefPtr<CefFrame> frame, CefRefPtr<Callback> ca
lootState_.getCurrentGame().ClearCachedConditions();
bool isFirstLoad = lootState_.getCurrentGame().GetPlugins().empty();
lootState_.getCurrentGame().LoadPlugins(true);
lootState_.getCurrentGame().LoadAllInstalledPlugins(true);
//Sort plugins into their load order.
list<Plugin> installed;
@@ -846,7 +846,7 @@ void QueryHandler::SortPlugins(CefRefPtr<CefFrame> frame, CefRefPtr<Callback> ca
try {
// Always reload all the plugins.
SendProgressUpdate(frame, translate("Loading plugin contents..."));
lootState_.getCurrentGame().LoadPlugins(false);
lootState_.getCurrentGame().LoadAllInstalledPlugins(false);
//Sort plugins into their load order.
SendProgressUpdate(frame, translate("Sorting load order..."));
+13 -1
View File
@@ -171,7 +171,19 @@ TEST_P(DatabaseInterfaceTest, sortPluginsShouldSucceedIfPassedValidArguments) {
ASSERT_NO_THROW(GenerateMasterlist());
ASSERT_NO_THROW(db_->LoadLists(masterlistPath.string(), ""));
std::vector<std::string> actualOrder = db_->SortPlugins();
std::vector<std::string> actualOrder = db_->SortPlugins({
blankEsp,
blankPluginDependentEsp,
blankDifferentMasterDependentEsm,
blankMasterDependentEsp,
blankDifferentMasterDependentEsp,
blankDifferentEsp,
blankDifferentPluginDependentEsp,
masterFile,
blankEsm,
blankMasterDependentEsm,
blankDifferentEsm,
});
ASSERT_EQ(expectedOrder, actualOrder);
}
+12 -12
View File
@@ -187,11 +187,11 @@ TEST_P(GameTest, redatePluginsShouldRedatePluginsForSkyrimAndDoNothingForOtherGa
}
}
TEST_P(GameTest, loadPluginsWithHeadersOnlyTrueShouldLoadTheHeadersOfAllInstalledPlugins) {
TEST_P(GameTest, loadAllInstalledPluginsWithHeadersOnlyTrueShouldLoadTheHeadersOfAllInstalledPlugins) {
Game game(GetParam());
game.SetGamePath(dataPath.parent_path());
EXPECT_NO_THROW(game.LoadPlugins(true));
EXPECT_NO_THROW(game.LoadAllInstalledPlugins(true));
EXPECT_EQ(11, game.GetPlugins().size());
// Check that one plugin's header has been read.
@@ -203,11 +203,11 @@ TEST_P(GameTest, loadPluginsWithHeadersOnlyTrueShouldLoadTheHeadersOfAllInstalle
EXPECT_EQ(0, plugin.Crc());
}
TEST_P(GameTest, loadPluginsWithHeadersOnlyFalseShouldFullyLoadAllInstalledPlugins) {
TEST_P(GameTest, loadAllInstalledPluginsWithHeadersOnlyFalseShouldFullyLoadAllInstalledPlugins) {
Game game(GetParam());
game.SetGamePath(dataPath.parent_path());
EXPECT_NO_THROW(game.LoadPlugins(false));
EXPECT_NO_THROW(game.LoadAllInstalledPlugins(false));
EXPECT_EQ(11, game.GetPlugins().size());
// Check that one plugin's header has been read.
@@ -229,7 +229,7 @@ TEST_P(GameTest, pluginsShouldNotBeFullyLoadedAfterLoadingHeadersOnly) {
Game game(GetParam());
game.SetGamePath(dataPath.parent_path());
ASSERT_NO_THROW(game.LoadPlugins(true));
ASSERT_NO_THROW(game.LoadAllInstalledPlugins(true));
EXPECT_FALSE(game.ArePluginsFullyLoaded());
}
@@ -238,7 +238,7 @@ TEST_P(GameTest, pluginsShouldBeFullyLoadedAfterFullyLoadingThem) {
Game game(GetParam());
game.SetGamePath(dataPath.parent_path());
ASSERT_NO_THROW(game.LoadPlugins(false));
ASSERT_NO_THROW(game.LoadAllInstalledPlugins(false));
EXPECT_TRUE(game.ArePluginsFullyLoaded());
}
@@ -269,7 +269,7 @@ TEST_P(GameTest, shouldShowBlankEspAsInactiveIfItHasNotBeenLoadedAndTheGameHasBe
TEST_P(GameTest, shouldShowBlankEsmAsInactiveIfItsHeaderHasBeenLoadedAndGameHasNotBeenInitialised) {
Game game(GetParam());
game.SetGamePath(dataPath.parent_path());
ASSERT_NO_THROW(game.LoadPlugins(true));
ASSERT_NO_THROW(game.LoadAllInstalledPlugins(true));
EXPECT_FALSE(game.IsPluginActive(blankEsm));
}
@@ -277,7 +277,7 @@ TEST_P(GameTest, shouldShowBlankEsmAsInactiveIfItsHeaderHasBeenLoadedAndGameHasN
TEST_P(GameTest, shouldShowBlankEspAsInactiveIfItsHeaderHasBeenLoadedAndGameHasNotBeenInitialised) {
Game game(GetParam());
game.SetGamePath(dataPath.parent_path());
ASSERT_NO_THROW(game.LoadPlugins(true));
ASSERT_NO_THROW(game.LoadAllInstalledPlugins(true));
EXPECT_FALSE(game.IsPluginActive(blankEsp));
}
@@ -286,7 +286,7 @@ TEST_P(GameTest, shouldShowBlankEsmAsActiveIfItsHeaderHasBeenLoadedAndTheGameHas
Game game(GetParam());
game.SetGamePath(dataPath.parent_path());
ASSERT_NO_THROW(game.Init(false, localPath));
ASSERT_NO_THROW(game.LoadPlugins(true));
ASSERT_NO_THROW(game.LoadAllInstalledPlugins(true));
EXPECT_TRUE(game.IsPluginActive(blankEsm));
}
@@ -295,7 +295,7 @@ TEST_P(GameTest, shouldShowBlankEspAsInactiveIfItsHeaderHasBeenLoadedAndTheGameH
Game game(GetParam());
game.SetGamePath(dataPath.parent_path());
ASSERT_NO_THROW(game.Init(false, localPath));
ASSERT_NO_THROW(game.LoadPlugins(true));
ASSERT_NO_THROW(game.LoadAllInstalledPlugins(true));
EXPECT_FALSE(game.IsPluginActive(blankEsp));
}
@@ -304,7 +304,7 @@ TEST_P(GameTest, shouldShowBlankEsmAsActiveIfItHasBeenFullyLoadedAndTheGameHasBe
Game game(GetParam());
game.SetGamePath(dataPath.parent_path());
ASSERT_NO_THROW(game.Init(false, localPath));
ASSERT_NO_THROW(game.LoadPlugins(false));
ASSERT_NO_THROW(game.LoadAllInstalledPlugins(false));
EXPECT_TRUE(game.IsPluginActive(blankEsm));
}
@@ -313,7 +313,7 @@ TEST_P(GameTest, shouldShowBlankEspAsInactiveIfItHasBeenFullyLoadedAndTheGameHas
Game game(GetParam());
game.SetGamePath(dataPath.parent_path());
ASSERT_NO_THROW(game.Init(false, localPath));
ASSERT_NO_THROW(game.LoadPlugins(false));
ASSERT_NO_THROW(game.LoadAllInstalledPlugins(false));
EXPECT_FALSE(game.IsPluginActive(blankEsp));
}
@@ -276,7 +276,7 @@ TEST_P(ConditionGrammarTest, aChecksumConditionWithACrcThatDoesNotMatchTheActual
}
TEST_P(ConditionGrammarTest, aVersionEqualityConditionWithAVersionThatEqualsTheActualPluginVersionShouldEvaluateToTrue) {
ASSERT_NO_THROW(game_.LoadPlugins(true));
ASSERT_NO_THROW(game_.LoadAllInstalledPlugins(true));
Grammar grammar(&game_);
std::string condition("version(\"" + blankEsm + "\", \"5.0\", ==)");
@@ -291,7 +291,7 @@ TEST_P(ConditionGrammarTest, aVersionEqualityConditionWithAVersionThatEqualsTheA
}
TEST_P(ConditionGrammarTest, aVersionEqualityConditionWithAVersionThatDoesNotEqualTheActualPluginVersionShouldEvaluateToFalse) {
ASSERT_NO_THROW(game_.LoadPlugins(true));
ASSERT_NO_THROW(game_.LoadAllInstalledPlugins(true));
Grammar grammar(&game_);
std::string condition("version(\"" + blankEsm + "\", \"6.0\", ==)");
@@ -306,7 +306,7 @@ TEST_P(ConditionGrammarTest, aVersionEqualityConditionWithAVersionThatDoesNotEqu
}
TEST_P(ConditionGrammarTest, aVersionEqualityConditionForAPluginWithNoVersionShouldEvaluateToFalse) {
ASSERT_NO_THROW(game_.LoadPlugins(true));
ASSERT_NO_THROW(game_.LoadAllInstalledPlugins(true));
Grammar grammar(&game_);
std::string condition("version(\"" + blankEsp + "\", \"6.0\", ==)");
@@ -321,7 +321,7 @@ TEST_P(ConditionGrammarTest, aVersionEqualityConditionForAPluginWithNoVersionSho
}
TEST_P(ConditionGrammarTest, aVersionInequalityConditionWithAVersionThatDoesNotEqualTheActualPluginVersionShouldEvaluateToTrue) {
ASSERT_NO_THROW(game_.LoadPlugins(true));
ASSERT_NO_THROW(game_.LoadAllInstalledPlugins(true));
Grammar grammar(&game_);
std::string condition("version(\"" + blankEsm + "\", \"6.0\", !=)");
@@ -336,7 +336,7 @@ TEST_P(ConditionGrammarTest, aVersionInequalityConditionWithAVersionThatDoesNotE
}
TEST_P(ConditionGrammarTest, aVersionInequalityConditionWithAVersionThatEqualsTheActualPluginVersionShouldEvaluateToFalse) {
ASSERT_NO_THROW(game_.LoadPlugins(true));
ASSERT_NO_THROW(game_.LoadAllInstalledPlugins(true));
Grammar grammar(&game_);
std::string condition("version(\"" + blankEsm + "\", \"5.0\", !=)");
@@ -351,7 +351,7 @@ TEST_P(ConditionGrammarTest, aVersionInequalityConditionWithAVersionThatEqualsTh
}
TEST_P(ConditionGrammarTest, aVersionInequalityConditionForAPluginWithNoVersionShouldEvaluateToTrue) {
ASSERT_NO_THROW(game_.LoadPlugins(true));
ASSERT_NO_THROW(game_.LoadAllInstalledPlugins(true));
Grammar grammar(&game_);
std::string condition("version(\"" + blankEsp + "\", \"6.0\", !=)");
@@ -366,7 +366,7 @@ TEST_P(ConditionGrammarTest, aVersionInequalityConditionForAPluginWithNoVersionS
}
TEST_P(ConditionGrammarTest, aVersionLessThanConditionWithAnActualPluginVersionLessThanTheGivenVersionShouldEvaluateToTrue) {
ASSERT_NO_THROW(game_.LoadPlugins(true));
ASSERT_NO_THROW(game_.LoadAllInstalledPlugins(true));
Grammar grammar(&game_);
std::string condition("version(\"" + blankEsm + "\", \"6.0\", <)");
@@ -381,7 +381,7 @@ TEST_P(ConditionGrammarTest, aVersionLessThanConditionWithAnActualPluginVersionL
}
TEST_P(ConditionGrammarTest, aVersionLessThanConditionWithAnActualPluginVersionEqualToTheGivenVersionShouldEvaluateToFalse) {
ASSERT_NO_THROW(game_.LoadPlugins(true));
ASSERT_NO_THROW(game_.LoadAllInstalledPlugins(true));
Grammar grammar(&game_);
std::string condition("version(\"" + blankEsm + "\", \"5.0\", <)");
@@ -396,7 +396,7 @@ TEST_P(ConditionGrammarTest, aVersionLessThanConditionWithAnActualPluginVersionE
}
TEST_P(ConditionGrammarTest, aVersionLessThanConditionForAPluginWithNoVersionShouldEvaluateToTrue) {
ASSERT_NO_THROW(game_.LoadPlugins(true));
ASSERT_NO_THROW(game_.LoadAllInstalledPlugins(true));
Grammar grammar(&game_);
std::string condition("version(\"" + blankEsp + "\", \"5.0\", <)");
@@ -411,7 +411,7 @@ TEST_P(ConditionGrammarTest, aVersionLessThanConditionForAPluginWithNoVersionSho
}
TEST_P(ConditionGrammarTest, aVersionGreaterThanConditionWithAnActualPluginVersionGreaterThanTheGivenVersionShouldEvaluateToTrue) {
ASSERT_NO_THROW(game_.LoadPlugins(true));
ASSERT_NO_THROW(game_.LoadAllInstalledPlugins(true));
Grammar grammar(&game_);
std::string condition("version(\"" + blankEsm + "\", \"4.0\", >)");
@@ -426,7 +426,7 @@ TEST_P(ConditionGrammarTest, aVersionGreaterThanConditionWithAnActualPluginVersi
}
TEST_P(ConditionGrammarTest, aVersionGreaterThanConditionWithAnActualPluginVersionEqualToTheGivenVersionShouldEvaluateToFalse) {
ASSERT_NO_THROW(game_.LoadPlugins(true));
ASSERT_NO_THROW(game_.LoadAllInstalledPlugins(true));
Grammar grammar(&game_);
std::string condition("version(\"" + blankEsm + "\", \"5.0\", >)");
@@ -441,7 +441,7 @@ TEST_P(ConditionGrammarTest, aVersionGreaterThanConditionWithAnActualPluginVersi
}
TEST_P(ConditionGrammarTest, aVersionGreaterThanConditionForAPluginWithNoVersionShouldEvaluateToFalse) {
ASSERT_NO_THROW(game_.LoadPlugins(true));
ASSERT_NO_THROW(game_.LoadAllInstalledPlugins(true));
Grammar grammar(&game_);
std::string condition("version(\"" + blankEsp + "\", \"5.0\", >)");
@@ -456,7 +456,7 @@ TEST_P(ConditionGrammarTest, aVersionGreaterThanConditionForAPluginWithNoVersion
}
TEST_P(ConditionGrammarTest, aVersionLessThanOrEqualToConditionWithAnActualPluginVersionEqualToTheGivenVersionShouldEvaluateToTrue) {
ASSERT_NO_THROW(game_.LoadPlugins(true));
ASSERT_NO_THROW(game_.LoadAllInstalledPlugins(true));
Grammar grammar(&game_);
std::string condition("version(\"" + blankEsm + "\", \"5.0\", <=)");
@@ -471,7 +471,7 @@ TEST_P(ConditionGrammarTest, aVersionLessThanOrEqualToConditionWithAnActualPlugi
}
TEST_P(ConditionGrammarTest, aVersionLessThanOrEqualToConditionWithAnActualPluginVersionGreaterThanTheGivenVersionShouldEvaluateToFalse) {
ASSERT_NO_THROW(game_.LoadPlugins(true));
ASSERT_NO_THROW(game_.LoadAllInstalledPlugins(true));
Grammar grammar(&game_);
std::string condition("version(\"" + blankEsm + "\", \"4.0\", <=)");
@@ -486,7 +486,7 @@ TEST_P(ConditionGrammarTest, aVersionLessThanOrEqualToConditionWithAnActualPlugi
}
TEST_P(ConditionGrammarTest, aVersionLessThanOrEqualToConditionForAPluginWithNoVersionShouldEvaluateToTrue) {
ASSERT_NO_THROW(game_.LoadPlugins(true));
ASSERT_NO_THROW(game_.LoadAllInstalledPlugins(true));
Grammar grammar(&game_);
std::string condition("version(\"" + blankEsp + "\", \"5.0\", <=)");
@@ -502,7 +502,7 @@ TEST_P(ConditionGrammarTest, aVersionLessThanOrEqualToConditionForAPluginWithNoV
TEST_P(ConditionGrammarTest, aVersionGreaterThanOrEqualToConditionWithAnActualPluginVersionEqualToTheGivenVersionShouldEvaluateToTrue) {
ASSERT_NO_THROW(game_.Init(false, localPath));
ASSERT_NO_THROW(game_.LoadPlugins(true));
ASSERT_NO_THROW(game_.LoadAllInstalledPlugins(true));
Grammar grammar(&game_);
std::string condition("version(\"" + blankEsm + "\", \"5.0\", >=)");
@@ -517,7 +517,7 @@ TEST_P(ConditionGrammarTest, aVersionGreaterThanOrEqualToConditionWithAnActualPl
}
TEST_P(ConditionGrammarTest, aVersionGreaterThanOrEqualToConditionWithAnActualPluginVersionLessThanTheGivenVersionShouldEvaluateToFalse) {
ASSERT_NO_THROW(game_.LoadPlugins(true));
ASSERT_NO_THROW(game_.LoadAllInstalledPlugins(true));
Grammar grammar(&game_);
std::string condition("version(\"" + blankEsm + "\", \"6.0\", >=)");
@@ -532,7 +532,7 @@ TEST_P(ConditionGrammarTest, aVersionGreaterThanOrEqualToConditionWithAnActualPl
}
TEST_P(ConditionGrammarTest, aVersionGreaterThanOrEqualToConditionForAPluginWithNoVersionShouldEvaluateToFalse) {
ASSERT_NO_THROW(game_.LoadPlugins(true));
ASSERT_NO_THROW(game_.LoadAllInstalledPlugins(true));
Grammar grammar(&game_);
std::string condition("version(\"" + blankEsp + "\", \"5.0\", >=)");
@@ -59,7 +59,7 @@ TEST_P(PluginSorterTest, sortingWithNoLoadedPluginsShouldReturnAnEmptyList) {
}
TEST_P(PluginSorterTest, sortingShouldNotMakeUnnecessaryChangesToAnExistingLoadOrder) {
ASSERT_NO_THROW(game_.LoadPlugins(false));
ASSERT_NO_THROW(game_.LoadAllInstalledPlugins(false));
PluginSorter ps;
std::vector<std::string> expectedSortedOrder = getLoadOrder();
@@ -73,7 +73,7 @@ TEST_P(PluginSorterTest, sortingShouldNotMakeUnnecessaryChangesToAnExistingLoadO
}
TEST_P(PluginSorterTest, sortingShouldClearExistingGameMessages) {
ASSERT_NO_THROW(game_.LoadPlugins(false));
ASSERT_NO_THROW(game_.LoadAllInstalledPlugins(false));
game_.AppendMessage(Message(MessageType::say, "1"));
ASSERT_FALSE(game_.GetMessages().empty());
@@ -83,7 +83,7 @@ TEST_P(PluginSorterTest, sortingShouldClearExistingGameMessages) {
}
TEST_P(PluginSorterTest, failedSortShouldNotClearExistingGameMessages) {
ASSERT_NO_THROW(game_.LoadPlugins(false));
ASSERT_NO_THROW(game_.LoadAllInstalledPlugins(false));
PluginMetadata plugin(blankEsm);
plugin.LoadAfter({File(blankMasterDependentEsm)});
game_.GetUserlist().AddPlugin(plugin);
@@ -96,7 +96,7 @@ TEST_P(PluginSorterTest, failedSortShouldNotClearExistingGameMessages) {
}
TEST_P(PluginSorterTest, sortingShouldEvaluateRelativeGlobalPriorities) {
ASSERT_NO_THROW(game_.LoadPlugins(false));
ASSERT_NO_THROW(game_.LoadAllInstalledPlugins(false));
PluginMetadata plugin(blankDifferentMasterDependentEsp);
plugin.GlobalPriority(Priority(-100));
game_.GetUserlist().AddPlugin(plugin);
@@ -121,7 +121,7 @@ TEST_P(PluginSorterTest, sortingShouldEvaluateRelativeGlobalPriorities) {
}
TEST_P(PluginSorterTest, sortingWithGlobalPrioritiesShouldInheritRecursivelyRegardlessOfEvaluationOrder) {
ASSERT_NO_THROW(game_.LoadPlugins(false));
ASSERT_NO_THROW(game_.LoadAllInstalledPlugins(false));
// Set Blank.esp's priority.
PluginMetadata plugin(blankEsp);
@@ -171,7 +171,7 @@ TEST_P(PluginSorterTest, sortingWithGlobalPrioritiesShouldInheritRecursivelyRega
}
TEST_P(PluginSorterTest, sortingShouldUseLoadAfterMetadataWhenDecidingRelativePluginPositions) {
ASSERT_NO_THROW(game_.LoadPlugins(false));
ASSERT_NO_THROW(game_.LoadAllInstalledPlugins(false));
PluginMetadata plugin(blankEsp);
plugin.LoadAfter({
File(blankDifferentEsp),
@@ -199,7 +199,7 @@ TEST_P(PluginSorterTest, sortingShouldUseLoadAfterMetadataWhenDecidingRelativePl
}
TEST_P(PluginSorterTest, sortingShouldUseRequirementMetadataWhenDecidingRelativePluginPositions) {
ASSERT_NO_THROW(game_.LoadPlugins(false));
ASSERT_NO_THROW(game_.LoadAllInstalledPlugins(false));
PluginMetadata plugin(blankEsp);
plugin.Reqs({
File(blankDifferentEsp),
@@ -227,7 +227,7 @@ TEST_P(PluginSorterTest, sortingShouldUseRequirementMetadataWhenDecidingRelative
}
TEST_P(PluginSorterTest, sortingShouldThrowIfACyclicInteractionIsEncountered) {
ASSERT_NO_THROW(game_.LoadPlugins(false));
ASSERT_NO_THROW(game_.LoadAllInstalledPlugins(false));
PluginMetadata plugin(blankEsm);
plugin.LoadAfter({File(blankMasterDependentEsm)});
game_.GetUserlist().AddPlugin(plugin);