Return C++17 std::optional<T> for unexceptionally-fallible functions

- DatabaseInterface::GetPluginMetadata()
- DatabaseInterface::GetPluginUserMetadata()
- GameInterface::GetPlugin()
- PluginInterface::GetVersion()
- PluginInterface::GetCRC()
This commit is contained in:
Oliver Hamlet
2018-10-20 12:47:53 +01:00
parent 4ad8fcf035
commit 8cfc5f6afb
22 changed files with 166 additions and 159 deletions
+7 -8
View File
@@ -24,6 +24,7 @@
#ifndef LOOT_DATABASE_INTERFACE
#define LOOT_DATABASE_INTERFACE
#include <optional>
#include <string>
#include <vector>
@@ -226,11 +227,10 @@ public:
* If true, any metadata conditions are evaluated before the metadata
* is returned, otherwise unevaluated metadata is returned. Evaluating
* plugin metadata conditions does not clear the condition cache.
* @returns A PluginMetadata object containing all the plugin's metadata.
* If the plugin has no metadata, PluginMetadata.IsNameOnly()
* will return true.
* @returns If the plugin has metadata, an optional containing that metadata,
* otherwise an optional containing no value.
*/
virtual PluginMetadata GetPluginMetadata(
virtual std::optional<PluginMetadata> GetPluginMetadata(
const std::string& plugin,
bool includeUserMetadata = true,
bool evaluateConditions = false) const = 0;
@@ -243,11 +243,10 @@ public:
* If true, any metadata conditions are evaluated before the metadata
* is returned, otherwise unevaluated metadata is returned. Evaluating
* plugin metadata conditions does not clear the condition cache.
* @returns A PluginMetadata object containing the plugin's user-added
* metadata. If the plugin has no metadata,
* PluginMetadata.IsNameOnly() will return true.
* @returns If the plugin has user-added metadata, an optional containing
* that metadata, otherwise an optional containing no value.
*/
virtual PluginMetadata GetPluginUserMetadata(
virtual std::optional<PluginMetadata> GetPluginUserMetadata(
const std::string& plugin,
bool evaluateConditions = false) const = 0;
+6 -5
View File
@@ -24,6 +24,8 @@
#ifndef LOOT_GAME_INTERFACE
#define LOOT_GAME_INTERFACE
#include <optional>
#include "loot/database_interface.h"
#include "loot/plugin_interface.h"
@@ -77,14 +79,13 @@ public:
/**
* @brief Get data for a loaded plugin.
* @details Throws an exception if the given plugin has not been loaded.
* @param pluginName
* The filename of the plugin to get data for.
* @returns A const PluginInterface reference. The reference remains valid
* until the ``LoadPlugins()`` or ``SortPlugins()`` functions are
* next called or this GameInterface is destroyed.
* @returns If the plugin has been loaded, an optional containing a pointer to
* an implementation of PluginInterface for that plugin, otherwise an
* optional containing no value.
*/
virtual std::shared_ptr<const PluginInterface> GetPlugin(
virtual std::optional<std::shared_ptr<const PluginInterface>> GetPlugin(
const std::string& pluginName) const = 0;
/**
+10 -8
View File
@@ -25,6 +25,7 @@
#define LOOT_PLUGIN_INTERFACE
#include <cstdint>
#include <optional>
#include <set>
#include <string>
#include <vector>
@@ -53,12 +54,13 @@ public:
/**
* Get the plugin's version number from its description field.
*
* If no version number is found in the description field, an empty string is
* returned. The description field parsing may fail to extract the version
* number correctly, though it functions correctly in all known cases.
* @return A string containing a version number, or an empty string.
* The description field may not contain a version number, or LOOT may be
* unable to detect it. The description field parsing may fail to extract the
* version number correctly, though it functions correctly in all known cases.
* @return An optional containing a version string if one is found, otherwise
* an optional containing no value.
*/
virtual std::string GetVersion() const = 0;
virtual std::optional<std::string> GetVersion() const = 0;
/**
* Get the plugin's masters.
@@ -75,10 +77,10 @@ public:
/**
* Get the plugin's CRC-32 checksum.
* @return The plugin's CRC-32 checksum if it has been fully read. If only the
* plugin's header has been read, ``0`` will be returned.
* @return An optional containing the plugin's CRC-32 checksum if the plugin
* has been fully loaded, otherwise an optional containing no value.
*/
virtual uint32_t GetCRC() const = 0;
virtual std::optional<uint32_t> GetCRC() const = 0;
/**
* Check if the plugin's master flag is set.
+14 -9
View File
@@ -199,29 +199,34 @@ void ApiDatabase::SetUserGroups(const std::unordered_set<Group>& groups) {
userlist_.SetGroups(groups);
}
PluginMetadata ApiDatabase::GetPluginMetadata(const std::string& plugin,
std::optional<PluginMetadata> ApiDatabase::GetPluginMetadata(const std::string& plugin,
bool includeUserMetadata,
bool evaluateConditions) const {
PluginMetadata metadata = masterlist_.FindPlugin(plugin);
auto metadata = masterlist_.FindPlugin(plugin);
if (includeUserMetadata) {
metadata.MergeMetadata(userlist_.FindPlugin(plugin));
auto userMetadata = userlist_.FindPlugin(plugin);
if (metadata && userMetadata) {
metadata.value().MergeMetadata(userMetadata.value());
} else if (userMetadata) {
metadata = userMetadata;
}
}
if (evaluateConditions) {
return conditionEvaluator_.evaluateAll(metadata);
if (evaluateConditions && metadata) {
return conditionEvaluator_.evaluateAll(metadata.value());
}
return metadata;
}
PluginMetadata ApiDatabase::GetPluginUserMetadata(
std::optional<PluginMetadata> ApiDatabase::GetPluginUserMetadata(
const std::string& plugin,
bool evaluateConditions) const {
PluginMetadata metadata = userlist_.FindPlugin(plugin);
auto metadata = userlist_.FindPlugin(plugin);
if (evaluateConditions) {
return conditionEvaluator_.evaluateAll(metadata);
if (evaluateConditions && metadata) {
return conditionEvaluator_.evaluateAll(metadata.value());
}
return metadata;
+7 -5
View File
@@ -72,12 +72,14 @@ struct ApiDatabase : public DatabaseInterface {
std::unordered_set<Group> GetUserGroups() const;
void SetUserGroups(const std::unordered_set<Group>& groups);
PluginMetadata GetPluginMetadata(const std::string& plugin,
bool includeUserMetadata = true,
bool evaluateConditions = false) const;
std::optional<PluginMetadata> GetPluginMetadata(
const std::string& plugin,
bool includeUserMetadata = true,
bool evaluateConditions = false) const;
PluginMetadata GetPluginUserMetadata(const std::string& plugin,
bool evaluateConditions = false) const;
std::optional<PluginMetadata> GetPluginUserMetadata(
const std::string& plugin,
bool evaluateConditions = false) const;
void SetPluginUserMetadata(const PluginMetadata& pluginMetadata);
+9 -9
View File
@@ -192,10 +192,9 @@ void Game::LoadPlugins(const std::vector<std::string>& plugins,
}
}
std::shared_ptr<const PluginInterface> Game::GetPlugin(
std::optional<std::shared_ptr<const PluginInterface>> Game::GetPlugin(
const std::string& pluginName) const {
return std::static_pointer_cast<const PluginInterface>(
cache_->GetPlugin(pluginName));
return cache_->GetPlugin(pluginName);
}
std::set<std::shared_ptr<const PluginInterface>> Game::GetLoadedPlugins()
@@ -226,13 +225,14 @@ void Game::LoadCurrentLoadOrderState() {
loadOrderHandler_->LoadCurrentState();
}
bool Game::IsPluginActive(const std::string& plugin) const {
try {
return std::static_pointer_cast<const Plugin>(GetPlugin(plugin))
->IsActive();
} catch (...) {
return loadOrderHandler_->IsPluginActive(plugin);
bool Game::IsPluginActive(const std::string& pluginName) const {
auto plugin = cache_->GetPlugin(pluginName);
if (plugin) {
return plugin.value()->IsActive();
}
return loadOrderHandler_->IsPluginActive(pluginName);
}
std::vector<std::string> Game::GetLoadOrder() const {
+2 -1
View File
@@ -59,7 +59,8 @@ public:
void LoadPlugins(const std::vector<std::string>& plugins,
bool loadHeadersOnly);
std::shared_ptr<const PluginInterface> GetPlugin(
std::optional<std::shared_ptr<const PluginInterface>>
GetPlugin(
const std::string& pluginName) const;
std::set<std::shared_ptr<const PluginInterface>> GetLoadedPlugins() const;
+2 -2
View File
@@ -97,13 +97,13 @@ std::set<std::shared_ptr<const Plugin>> GameCache::GetPlugins() const {
return output;
}
std::shared_ptr<const Plugin> GameCache::GetPlugin(
std::optional<std::shared_ptr<const Plugin>> GameCache::GetPlugin(
const std::string& pluginName) const {
auto it = plugins_.find(to_lower(pluginName));
if (it != end(plugins_))
return it->second;
throw std::invalid_argument("No plugin \"" + pluginName + "\" exists.");
return std::nullopt;
}
void GameCache::AddPlugin(const Plugin&& plugin) {
+2 -1
View File
@@ -47,7 +47,8 @@ public:
void CacheCrc(const std::string& file, uint32_t crc);
std::set<std::shared_ptr<const Plugin>> GetPlugins() const;
std::shared_ptr<const Plugin> GetPlugin(const std::string& pluginName) const;
std::optional<std::shared_ptr<const Plugin>> GetPlugin(
const std::string& pluginName) const;
void AddPlugin(const Plugin&& plugin);
std::set<boost::filesystem::path> GetArchivePaths() const;
+26 -25
View File
@@ -156,19 +156,17 @@ bool ConditionEvaluator::fileExists(const std::string& filePath) const {
// Try first checking the plugin cache, as most file entries are
// for plugins.
try {
// GetPlugin throws if it can't find an entry.
gameCache_->GetPlugin(filePath);
auto plugin = gameCache_->GetPlugin(filePath);
if (plugin) {
return true;
} catch (...) {
// Not a loaded plugin, check the filesystem.
if (hasPluginFileExtension(filePath, gameType_))
return boost::filesystem::exists(dataPath_ / filePath) ||
boost::filesystem::exists(dataPath_ / (filePath + ".ghost"));
else
return boost::filesystem::exists(dataPath_ / filePath);
}
// Not a loaded plugin, check the filesystem.
if (hasPluginFileExtension(filePath, gameType_))
return boost::filesystem::exists(dataPath_ / filePath) ||
boost::filesystem::exists(dataPath_ / (filePath + ".ghost"));
else
return boost::filesystem::exists(dataPath_ / filePath);
}
bool ConditionEvaluator::regexMatchExists(
@@ -412,19 +410,22 @@ Version ConditionEvaluator::getVersion(const std::string& filePath) const {
// If the file is a plugin, its version needs to be extracted
// from its description field. Try getting an entry from the
// plugin cache.
try {
return Version(gameCache_->GetPlugin(filePath)->GetVersion());
} catch (...) {
// The file wasn't in the plugin cache, load it as a plugin
// if it appears to be valid, otherwise treat it as a non
// plugin file.
if (Plugin::IsValid(filePath, gameType_, dataPath_))
return Version(
Plugin(gameType_, dataPath_, gameCache_, loadOrderHandler_, filePath, true)
.GetVersion());
return Version(dataPath_ / filePath);
auto plugin = gameCache_->GetPlugin(filePath);
if (plugin) {
return Version(plugin.value()->GetVersion().value_or(""));
}
// The file wasn't in the plugin cache, load it as a plugin
// if it appears to be valid, otherwise treat it as a non
// plugin file.
if (Plugin::IsValid(filePath, gameType_, dataPath_))
return Version(
Plugin(gameType_, dataPath_, gameCache_, loadOrderHandler_, filePath, true)
.GetVersion()
.value_or(""));
return Version(dataPath_ / filePath);
}
}
bool ConditionEvaluator::shouldParseOnly() const {
@@ -445,9 +446,9 @@ uint32_t ConditionEvaluator::getCrc(const std::string & file) const {
}
// Get the CRC from the game plugin cache if possible.
try {
crc = gameCache_->GetPlugin(file)->GetCRC();
} catch (...) {
auto plugin = gameCache_->GetPlugin(file);
if (plugin) {
crc = plugin.value()->GetCRC().value_or(0);
}
// Otherwise calculate it from the file.
+7 -2
View File
@@ -143,8 +143,9 @@ void MetadataList::SetGroups(const std::unordered_set<Group>& groups) {
}
// Merges multiple matching regex entries if any are found.
PluginMetadata MetadataList::FindPlugin(const PluginMetadata& plugin) const {
PluginMetadata match(plugin.GetName());
std::optional<PluginMetadata> MetadataList::FindPlugin(
const std::string& plugin) const {
PluginMetadata match(plugin);
auto it = plugins_.find(plugin);
@@ -159,6 +160,10 @@ PluginMetadata MetadataList::FindPlugin(const PluginMetadata& plugin) const {
regIt = find(++regIt, regexPlugins_.end(), plugin);
}
if (match.HasNameOnly()) {
return std::nullopt;
}
return match;
}
+3 -2
View File
@@ -25,6 +25,7 @@
#ifndef LOOT_API_METADATA_LIST
#define LOOT_API_METADATA_LIST
#include <optional>
#include <string>
#include <unordered_set>
#include <vector>
@@ -32,8 +33,8 @@
#include <boost/filesystem.hpp>
#include "api/metadata/condition_evaluator.h"
#include "loot/metadata/plugin_metadata.h"
#include "loot/metadata/group.h"
#include "loot/metadata/plugin_metadata.h"
namespace loot {
class MetadataList {
@@ -50,7 +51,7 @@ public:
void SetGroups(const std::unordered_set<Group>& groups);
// Merges multiple matching regex entries if any are found.
PluginMetadata FindPlugin(const PluginMetadata& plugin) const;
std::optional<PluginMetadata> FindPlugin(const std::string& plugin) const;
void AddPlugin(const PluginMetadata& plugin);
// Doesn't erase matching regex entries, because they might also
+8 -4
View File
@@ -51,7 +51,6 @@ Plugin::Plugin(const GameType gameType,
isEmpty_(true),
isActive_(false),
loadsArchive_(false),
crc_(0),
numOverrideRecords_(0) {
auto logger = getLogger();
@@ -139,8 +138,13 @@ std::string Plugin::GetLowercasedName() const {
return boost::locale::to_lower(name_);
}
std::string Plugin::GetVersion() const {
return Version(GetDescription()).AsString();
std::optional<std::string> Plugin::GetVersion() const {
std::string version = Version(GetDescription()).AsString();
if (version.empty()) {
return std::nullopt;
}
return version;
}
std::vector<std::string> Plugin::GetMasters() const {
@@ -160,7 +164,7 @@ std::vector<std::string> Plugin::GetMasters() const {
std::set<Tag> Plugin::GetBashTags() const { return tags_; }
uint32_t Plugin::GetCRC() const { return crc_; }
std::optional<uint32_t> Plugin::GetCRC() const { return crc_; }
bool Plugin::IsMaster() const {
bool isMaster;
+4 -4
View File
@@ -52,10 +52,10 @@ public:
std::string GetName() const;
std::string GetLowercasedName() const;
std::string GetVersion() const;
std::optional<std::string> GetVersion() const;
std::vector<std::string> GetMasters() const;
std::set<Tag> GetBashTags() const;
uint32_t GetCRC() const;
std::optional<uint32_t> GetCRC() const;
bool IsMaster() const;
bool IsLightMaster() const;
@@ -94,8 +94,8 @@ private:
bool isActive_;
bool loadsArchive_;
const std::string name_;
std::string version_; // Obtained from description field.
uint32_t crc_;
std::optional<std::string> version_; // Obtained from description field.
std::optional<uint32_t> crc_;
std::set<Tag> tags_;
// Useful caches.
+1 -1
View File
@@ -210,7 +210,7 @@ void PluginSorter::AddPluginVertices(Game& game) {
}
auto metadata =
game.GetDatabase()->GetPluginMetadata(plugin->GetName(), true, true);
game.GetDatabase()->GetPluginMetadata(plugin->GetName(), true, true).value_or(PluginMetadata(plugin->GetName()));
auto groupIt = groupPlugins.find(metadata.GetGroup());
if (groupIt == groupPlugins.end()) {
@@ -544,10 +544,8 @@ TEST_P(
TEST_P(
DatabaseInterfaceTest,
getPluginMetadataShouldReturnAnEmptyPluginMetadataObjectIfThePluginHasNoMetadata) {
auto metadata = db_->GetPluginMetadata(blankEsm);
EXPECT_TRUE(metadata.HasNameOnly());
getPluginMetadataShouldReturnAnEmptyOptionalIfThePluginHasNoMetadata) {
EXPECT_FALSE(db_->GetPluginMetadata(blankEsm));
}
TEST_P(
@@ -558,7 +556,7 @@ TEST_P(
ASSERT_NO_THROW(
db_->LoadLists(masterlistPath.string(), userlistPath_.string()));
auto metadata = db_->GetPluginMetadata(blankEsm, true);
auto metadata = db_->GetPluginMetadata(blankEsm, true).value();
std::set<File> expectedLoadAfter({
File(masterFile),
@@ -575,7 +573,7 @@ TEST_P(
ASSERT_NO_THROW(
db_->LoadLists(masterlistPath.string(), userlistPath_.string()));
auto metadata = db_->GetPluginMetadata(blankEsm, false);
auto metadata = db_->GetPluginMetadata(blankEsm, false).value();
std::set<File> expectedLoadAfter({
File(masterFile),
@@ -589,7 +587,7 @@ TEST_P(
ASSERT_NO_THROW(GenerateMasterlist());
ASSERT_NO_THROW(db_->LoadLists(masterlistPath.string(), ""));
auto metadata = db_->GetPluginMetadata(blankEsm, false, true);
auto metadata = db_->GetPluginMetadata(blankEsm, false, true).value();
EXPECT_TRUE(metadata.GetMessages().empty());
}
@@ -602,9 +600,7 @@ TEST_P(
ASSERT_NO_THROW(
db_->LoadLists(masterlistPath.string(), userlistPath_.string()));
auto metadata = db_->GetPluginUserMetadata(blankDifferentEsm);
EXPECT_TRUE(metadata.HasNameOnly());
EXPECT_FALSE(db_->GetPluginUserMetadata(blankDifferentEsm));
}
TEST_P(DatabaseInterfaceTest,
@@ -614,7 +610,7 @@ TEST_P(DatabaseInterfaceTest,
ASSERT_NO_THROW(
db_->LoadLists(masterlistPath.string(), userlistPath_.string()));
auto metadata = db_->GetPluginUserMetadata(blankEsm);
auto metadata = db_->GetPluginUserMetadata(blankEsm).value();
std::set<File> expectedLoadAfter({
File(blankDifferentEsm),
@@ -630,7 +626,7 @@ TEST_P(
ASSERT_NO_THROW(
db_->LoadLists(masterlistPath.string(), userlistPath_.string()));
auto metadata = db_->GetPluginMetadata(blankEsm, false, true);
auto metadata = db_->GetPluginMetadata(blankEsm, false, true).value();
EXPECT_TRUE(metadata.GetMessages().empty());
}
@@ -648,7 +644,7 @@ TEST_P(
db_->SetPluginUserMetadata(newMetadata);
auto metadata = db_->GetPluginUserMetadata(blankDifferentEsp);
auto metadata = db_->GetPluginUserMetadata(blankDifferentEsp).value();
std::set<File> expectedLoadAfter({
File(blankDifferentEsm),
@@ -669,7 +665,7 @@ TEST_P(DatabaseInterfaceTest,
db_->SetPluginUserMetadata(newMetadata);
auto metadata = db_->GetPluginMetadata(blankEsm);
auto metadata = db_->GetPluginMetadata(blankEsm).value();
std::set<File> expectedLoadAfter({
File(masterFile),
@@ -686,8 +682,7 @@ TEST_P(DatabaseInterfaceTest,
db_->DiscardPluginUserMetadata(blankEsm);
auto metadata = db_->GetPluginUserMetadata(blankEsm);
EXPECT_TRUE(metadata.HasNameOnly());
EXPECT_FALSE(db_->GetPluginUserMetadata(blankEsm));
}
TEST_P(
@@ -700,7 +695,7 @@ TEST_P(
db_->DiscardPluginUserMetadata(blankEsm);
auto metadata = db_->GetPluginMetadata(blankEsm);
auto metadata = db_->GetPluginMetadata(blankEsm).value();
std::set<File> expectedLoadAfter({
File(masterFile),
@@ -719,7 +714,7 @@ TEST_P(DatabaseInterfaceTest,
auto metadata = db_->GetPluginUserMetadata(blankDifferentEsp);
EXPECT_FALSE(metadata.HasNameOnly());
EXPECT_TRUE(metadata);
}
TEST_P(DatabaseInterfaceTest,
@@ -770,13 +765,10 @@ TEST_P(
db_->DiscardAllUserMetadata();
auto metadata = db_->GetPluginUserMetadata(blankEsm);
EXPECT_TRUE(metadata.HasNameOnly());
EXPECT_FALSE(db_->GetPluginUserMetadata(blankEsm));
EXPECT_FALSE(db_->GetPluginUserMetadata(blankDifferentEsp));
metadata = db_->GetPluginUserMetadata(blankDifferentEsp);
EXPECT_TRUE(metadata.HasNameOnly());
metadata = db_->GetPluginMetadata(blankEsm);
auto metadata = db_->GetPluginMetadata(blankEsm).value();
std::set<File> expectedLoadAfter({
File(masterFile),
@@ -89,11 +89,11 @@ TEST_P(
// Check that one plugin's header has been read.
ASSERT_NO_THROW(handle_->GetPlugin(masterFile));
auto plugin = handle_->GetPlugin(masterFile);
EXPECT_EQ("5.0", plugin->GetVersion());
auto plugin = handle_->GetPlugin(masterFile).value();
EXPECT_EQ("5.0", plugin->GetVersion().value());
// Check that only the header has been read.
EXPECT_EQ(0, plugin->GetCRC());
EXPECT_FALSE(plugin->GetCRC());
}
TEST_P(GameInterfaceTest,
@@ -103,15 +103,15 @@ TEST_P(GameInterfaceTest,
// Check that one plugin's header has been read.
ASSERT_NO_THROW(handle_->GetPlugin(masterFile));
auto plugin = handle_->GetPlugin(masterFile);
EXPECT_EQ("5.0", plugin->GetVersion());
auto plugin = handle_->GetPlugin(masterFile).value();
EXPECT_EQ("5.0", plugin->GetVersion().value());
// Check that not only the header has been read.
EXPECT_EQ(blankEsmCrc, plugin->GetCRC());
EXPECT_EQ(blankEsmCrc, plugin->GetCRC().value());
}
TEST_P(GameInterfaceTest, getPluginThatIsNotCachedShouldThrow) {
EXPECT_THROW(handle_->GetPlugin(blankEsm), std::invalid_argument);
TEST_P(GameInterfaceTest, getPluginThatIsNotCachedShouldReturnAnEmptyOptional) {
EXPECT_FALSE(handle_->GetPlugin(blankEsm));
}
TEST_P(GameInterfaceTest,
@@ -86,7 +86,7 @@ TEST_P(GameCacheTest, addingAPluginThatDoesNotExistShouldSucceed) {
game_.GetLoadOrderHandler(),
blankEsm,
true));
EXPECT_EQ(blankEsm, cache_.GetPlugin(blankEsm)->GetName());
EXPECT_EQ(blankEsm, cache_.GetPlugin(blankEsm).value()->GetName());
}
TEST_P(GameCacheTest,
@@ -97,7 +97,7 @@ TEST_P(GameCacheTest,
game_.GetLoadOrderHandler(),
blankEsm,
true));
EXPECT_EQ(0, cache_.GetPlugin(blankEsm)->GetCRC());
EXPECT_FALSE(cache_.GetPlugin(blankEsm).value()->GetCRC());
cache_.AddPlugin(Plugin(game_.Type(),
game_.DataPath(),
@@ -105,11 +105,11 @@ TEST_P(GameCacheTest,
game_.GetLoadOrderHandler(),
blankEsm,
false));
EXPECT_EQ(blankEsmCrc, cache_.GetPlugin(blankEsm)->GetCRC());
EXPECT_EQ(blankEsmCrc, cache_.GetPlugin(blankEsm).value()->GetCRC().value());
}
TEST_P(GameCacheTest, gettingAPluginThatIsNotCachedShouldThrow) {
EXPECT_THROW(cache_.GetPlugin(blankEsm), std::invalid_argument);
TEST_P(GameCacheTest, gettingAPluginThatIsNotCachedShouldReturnAnEmptyOptional) {
EXPECT_FALSE(cache_.GetPlugin(blankEsm));
}
TEST_P(GameCacheTest, gettingAPluginShouldBeCaseInsensitive) {
@@ -119,7 +119,7 @@ TEST_P(GameCacheTest, gettingAPluginShouldBeCaseInsensitive) {
game_.GetLoadOrderHandler(),
blankEsm,
true));
EXPECT_EQ(blankEsm, cache_.GetPlugin(blankEsm)->GetName());
EXPECT_EQ(blankEsm, cache_.GetPlugin(blankEsm).value()->GetName());
}
TEST_P(GameCacheTest,
+6 -6
View File
@@ -108,11 +108,11 @@ TEST_P(
// Check that one plugin's header has been read.
ASSERT_NO_THROW(game.GetPlugin(masterFile));
auto plugin = game.GetPlugin(masterFile);
EXPECT_EQ("5.0", plugin->GetVersion());
auto plugin = game.GetPlugin(masterFile).value();
EXPECT_EQ("5.0", plugin->GetVersion().value());
// Check that only the header has been read.
EXPECT_EQ(0, plugin->GetCRC());
EXPECT_FALSE(plugin->GetCRC());
}
TEST_P(GameTest, loadPluginsWithANonPluginShouldNotAddItToTheLoadedPlugins) {
@@ -149,11 +149,11 @@ TEST_P(GameTest,
// Check that one plugin's header has been read.
ASSERT_NO_THROW(game.GetPlugin(blankEsm));
auto plugin = game.GetPlugin(blankEsm);
EXPECT_EQ("5.0", plugin->GetVersion());
auto plugin = game.GetPlugin(blankEsm).value();
EXPECT_EQ("5.0", plugin->GetVersion().value());
// Check that not only the header has been read.
EXPECT_EQ(blankEsmCrc, plugin->GetCRC());
EXPECT_EQ(blankEsmCrc, plugin->GetCRC().value());
}
TEST_P(GameTest,
+14 -21
View File
@@ -280,13 +280,9 @@ TEST_P(MetadataListTest, setGroupsShouldReplaceExistingGroups) {
TEST_P(
MetadataListTest,
findPluginShouldReturnAnEmptyPluginObjectIfTheGivenPluginIsNotInTheMetadataList) {
findPluginShouldReturnAnEmptyOptionalIfTheGivenPluginIsNotInTheMetadataList) {
MetadataList metadataList;
PluginMetadata plugin =
metadataList.FindPlugin(PluginMetadata(blankDifferentEsm));
EXPECT_EQ(blankDifferentEsm, plugin.GetName());
EXPECT_TRUE(plugin.HasNameOnly());
EXPECT_FALSE(metadataList.FindPlugin(blankDifferentEsm));
}
TEST_P(
@@ -296,7 +292,7 @@ TEST_P(
ASSERT_NO_THROW(metadataList.Load(metadataPath));
PluginMetadata plugin =
metadataList.FindPlugin(PluginMetadata(blankDifferentEsp));
metadataList.FindPlugin(blankDifferentEsp).value();
EXPECT_EQ(blankDifferentEsp, plugin.GetName());
EXPECT_EQ(std::set<File>({
@@ -312,14 +308,13 @@ TEST_P(
TEST_P(MetadataListTest, addPluginShouldStoreGivenSpecificPluginMetadata) {
MetadataList metadataList;
ASSERT_NO_THROW(metadataList.Load(metadataPath));
ASSERT_TRUE(
metadataList.FindPlugin(PluginMetadata(blankDifferentEsm)).HasNameOnly());
ASSERT_FALSE(metadataList.FindPlugin(blankDifferentEsm));
PluginMetadata plugin(blankDifferentEsm);
plugin.SetGroup("group1");
metadataList.AddPlugin(plugin);
plugin = metadataList.FindPlugin(plugin);
plugin = metadataList.FindPlugin(plugin.GetName()).value();
EXPECT_EQ(blankDifferentEsm, plugin.GetName());
EXPECT_EQ("group1", plugin.GetGroup());
@@ -333,7 +328,8 @@ TEST_P(MetadataListTest, addPluginShouldStoreGivenRegexPluginMetadata) {
plugin.SetGroup("group1");
metadataList.AddPlugin(plugin);
plugin = metadataList.FindPlugin(PluginMetadata(blankPluginDependentEsp));
plugin =
metadataList.FindPlugin(blankPluginDependentEsp).value();
EXPECT_EQ("group1", plugin.GetGroup());
}
@@ -342,9 +338,8 @@ TEST_P(MetadataListTest, addPluginShouldThrowIfAMatchingPluginAlreadyExists) {
MetadataList metadataList;
ASSERT_NO_THROW(metadataList.Load(metadataPath));
PluginMetadata plugin = metadataList.FindPlugin(PluginMetadata(blankEsm));
PluginMetadata plugin = metadataList.FindPlugin(blankEsm).value();
ASSERT_EQ(blankEsm, plugin.GetName());
ASSERT_FALSE(plugin.HasNameOnly());
EXPECT_THROW(metadataList.AddPlugin(PluginMetadata(blankEsm)),
std::invalid_argument);
@@ -355,15 +350,13 @@ TEST_P(MetadataListTest,
MetadataList metadataList;
ASSERT_NO_THROW(metadataList.Load(metadataPath));
PluginMetadata plugin = metadataList.FindPlugin(PluginMetadata(blankEsp));
PluginMetadata plugin = metadataList.FindPlugin(blankEsp).value();
ASSERT_EQ(blankEsp, plugin.GetName());
ASSERT_FALSE(plugin.HasNameOnly());
metadataList.ErasePlugin(plugin);
plugin = metadataList.FindPlugin(plugin);
EXPECT_EQ(blankEsp, plugin.GetName());
EXPECT_TRUE(plugin.HasNameOnly());
EXPECT_FALSE(metadataList.FindPlugin(plugin.GetName()));
}
TEST_P(
@@ -378,7 +371,7 @@ TEST_P(
MetadataList metadataList;
ASSERT_NO_THROW(metadataList.Load(metadataPath));
PluginMetadata plugin = metadataList.FindPlugin(PluginMetadata(blankEsm));
PluginMetadata plugin = metadataList.FindPlugin(blankEsm).value();
ASSERT_EQ(
std::vector<Message>({
Message(MessageType::warn, "This is a warning."),
@@ -387,19 +380,19 @@ TEST_P(
}),
plugin.GetMessages());
plugin = metadataList.FindPlugin(PluginMetadata(blankEsp));
plugin = metadataList.FindPlugin(blankEsp).value();
ASSERT_EQ(blankEsp, plugin.GetName());
ASSERT_FALSE(plugin.HasNameOnly());
EXPECT_NO_THROW(metadataList.EvalAllConditions(evaluator));
plugin = metadataList.FindPlugin(PluginMetadata(blankEsm));
plugin = metadataList.FindPlugin(blankEsm).value();
EXPECT_EQ(std::vector<Message>({
Message(MessageType::warn, "This is a warning."),
}),
plugin.GetMessages());
plugin = metadataList.FindPlugin(PluginMetadata(blankEsp));
plugin = metadataList.FindPlugin(blankEsp).value();
EXPECT_EQ(blankEsp, plugin.GetName());
EXPECT_TRUE(plugin.GetDirtyInfo().empty());
}

Some files were not shown because too many files have changed in this diff Show More