mirror of
https://github.com/loot/libloot.git
synced 2026-07-27 14:16:01 -07:00
Make SortPlugins take a vector of plugins to sort
This commit is contained in:
@@ -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,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 ""
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
@@ -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_;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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());;
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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..."));
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user