mirror of
https://github.com/loot/libloot.git
synced 2026-07-27 14:16:01 -07:00
Return nullopt if condition eval removes all metadata
This commit is contained in:
@@ -119,7 +119,7 @@ bool ConditionEvaluator::Evaluate(const std::string& condition) {
|
||||
return result == LCI_RESULT_TRUE;
|
||||
}
|
||||
|
||||
PluginMetadata ConditionEvaluator::EvaluateAll(
|
||||
std::optional<PluginMetadata> ConditionEvaluator::EvaluateAll(
|
||||
const PluginMetadata& pluginMetadata) {
|
||||
PluginMetadata evaluatedMetadata(pluginMetadata.GetName());
|
||||
evaluatedMetadata.SetLocations(pluginMetadata.GetLocations());
|
||||
@@ -179,6 +179,10 @@ PluginMetadata ConditionEvaluator::EvaluateAll(
|
||||
evaluatedMetadata.SetCleanInfo(infoVector);
|
||||
}
|
||||
|
||||
if (evaluatedMetadata.HasNameOnly()) {
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
return evaluatedMetadata;
|
||||
}
|
||||
|
||||
|
||||
@@ -44,7 +44,8 @@ public:
|
||||
const std::filesystem::path& dataPath);
|
||||
|
||||
bool Evaluate(const std::string& condition);
|
||||
PluginMetadata EvaluateAll(const PluginMetadata& pluginMetadata);
|
||||
std::optional<PluginMetadata> EvaluateAll(
|
||||
const PluginMetadata& pluginMetadata);
|
||||
|
||||
void ClearConditionCache();
|
||||
void RefreshActivePluginsState(
|
||||
|
||||
@@ -93,16 +93,16 @@ TEST_P(GameInterfaceTest, setAdditionalDataPathsShouldClearTheConditionCache) {
|
||||
handle_->GetDatabase().SetPluginUserMetadata(metadata);
|
||||
|
||||
auto evaluatedMetadata =
|
||||
handle_->GetDatabase().GetPluginUserMetadata(blankEsm, true).value();
|
||||
EXPECT_TRUE(evaluatedMetadata.GetLoadAfterFiles().empty());
|
||||
handle_->GetDatabase().GetPluginUserMetadata(blankEsm, true);
|
||||
EXPECT_FALSE(evaluatedMetadata.has_value());
|
||||
|
||||
const auto dataFilePath = gamePath.parent_path() / "Data" / "plugin.esp";
|
||||
touch(dataFilePath);
|
||||
handle_->SetAdditionalDataPaths({dataFilePath.parent_path()});
|
||||
|
||||
evaluatedMetadata =
|
||||
handle_->GetDatabase().GetPluginUserMetadata(blankEsm, true).value();
|
||||
EXPECT_FALSE(evaluatedMetadata.GetLoadAfterFiles().empty());
|
||||
handle_->GetDatabase().GetPluginUserMetadata(blankEsm, true);
|
||||
EXPECT_FALSE(evaluatedMetadata.value().GetLoadAfterFiles().empty());
|
||||
}
|
||||
|
||||
TEST_P(GameInterfaceTest,
|
||||
|
||||
@@ -174,7 +174,7 @@ TEST_P(ConditionEvaluatorTest, evaluateAllShouldEvaluateAllMetadataConditions) {
|
||||
plugin.SetDirtyInfo({info1, info2});
|
||||
plugin.SetCleanInfo({info1, info2});
|
||||
|
||||
EXPECT_NO_THROW(plugin = evaluator_.EvaluateAll(plugin));
|
||||
EXPECT_NO_THROW(plugin = evaluator_.EvaluateAll(plugin).value());
|
||||
|
||||
std::vector<File> expectedFiles({file1});
|
||||
EXPECT_EQ("group1", plugin.GetGroup().value());
|
||||
@@ -190,8 +190,7 @@ TEST_P(ConditionEvaluatorTest, evaluateAllShouldEvaluateAllMetadataConditions) {
|
||||
TEST_P(ConditionEvaluatorTest, evaluateAllShouldPreserveGroupExplicitness) {
|
||||
PluginMetadata plugin(blankEsm);
|
||||
|
||||
EXPECT_NO_THROW(plugin = evaluator_.EvaluateAll(plugin));
|
||||
EXPECT_FALSE(plugin.GetGroup());
|
||||
EXPECT_FALSE(evaluator_.EvaluateAll(plugin).has_value());
|
||||
}
|
||||
|
||||
TEST_P(ConditionEvaluatorTest,
|
||||
|
||||
Reference in New Issue
Block a user