From 65afed18e5c6178b91958c8dfbda0ad8b82f46e3 Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Wed, 6 Jul 2016 19:45:45 +0100 Subject: [PATCH] Fix loot_get_plugin_tags() remembering results Consecutive calls would include the output tags from previous calls. Closes #595. --- src/api/loot_db.cpp | 2 ++ src/tests/api/loot_db_test.h | 38 +++++++++++++++++++++++ src/tests/api/loot_get_plugin_tags_test.h | 24 ++++++++++++++ 3 files changed, 64 insertions(+) diff --git a/src/api/loot_db.cpp b/src/api/loot_db.cpp index 97f3f84a..10500e54 100644 --- a/src/api/loot_db.cpp +++ b/src/api/loot_db.cpp @@ -77,11 +77,13 @@ void loot_db::setRevisionDateString(const std::string& str) { } void loot_db::setAddedTags(const std::set& names) { + addedTagIds.clear(); for (const auto& name : names) addedTagIds.push_back(getBashTagUid(name)); } void loot_db::setRemovedTags(const std::set& names) { + removedTagIds.clear(); for (const auto& name : names) removedTagIds.push_back(getBashTagUid(name)); } diff --git a/src/tests/api/loot_db_test.h b/src/tests/api/loot_db_test.h index e5d5ed6c..7c968e35 100644 --- a/src/tests/api/loot_db_test.h +++ b/src/tests/api/loot_db_test.h @@ -180,6 +180,25 @@ namespace loot { }), db->getAddedTagIds()); } + TEST_P(loot_db_test, settingAddedTagsShouldReplaceExistingTags) { + db->addBashTagsToMap({ + "C.Climate", + "Relev", + }); + + db->setAddedTags({ + "Relev", + }); + + db->setAddedTags({ + "C.Climate", + }); + + EXPECT_EQ(std::vector({ + 0, + }), db->getAddedTagIds()); + } + TEST_P(loot_db_test, settingRemovedTagsWithNoTagMapShouldThrow) { EXPECT_ANY_THROW(db->setRemovedTags({ "Relev", @@ -201,6 +220,25 @@ namespace loot { }), db->getRemovedTagIds()); } + TEST_P(loot_db_test, settingRemovedTagsShouldReplaceExistingTags) { + db->addBashTagsToMap({ + "C.Climate", + "Relev", + }); + + db->setRemovedTags({ + "Relev", + }); + + db->setRemovedTags({ + "C.Climate", + }); + + EXPECT_EQ(std::vector({ + 0, + }), db->getRemovedTagIds()); + } + TEST_P(loot_db_test, settingPluginMessagesShouldCopyThem) { db->setPluginMessages(std::list({ Message(Message::warn, "Test 1"), diff --git a/src/tests/api/loot_get_plugin_tags_test.h b/src/tests/api/loot_get_plugin_tags_test.h index 49026914..706ace70 100644 --- a/src/tests/api/loot_get_plugin_tags_test.h +++ b/src/tests/api/loot_get_plugin_tags_test.h @@ -134,6 +134,30 @@ namespace loot { EXPECT_TRUE(modified); } + + TEST_P(loot_get_plugin_tags_test, shouldOutputTheCorrectBashTagsForPluginsWhenMakingConsecutiveCalls) { + ASSERT_NO_THROW(generateMasterlist()); + ASSERT_EQ(loot_ok, loot_load_lists(db, masterlistPath.string().c_str(), NULL)); + getTagMap(); + + EXPECT_EQ(loot_ok, loot_get_plugin_tags(db, blankEsm.c_str(), &added, &numAdded, &removed, &numRemoved, &modified)); + + ASSERT_EQ(2, numAdded); + EXPECT_EQ(0, added[0]); + EXPECT_EQ(1, added[1]); + + ASSERT_EQ(1, numRemoved); + EXPECT_EQ(2, removed[0]); + EXPECT_FALSE(modified); + + EXPECT_EQ(loot_ok, loot_get_plugin_tags(db, blankEsp.c_str(), &added, &numAdded, &removed, &numRemoved, &modified)); + + EXPECT_EQ(0, numAdded); + EXPECT_EQ(NULL, added); + EXPECT_EQ(0, numRemoved); + EXPECT_EQ(NULL, removed); + EXPECT_FALSE(modified); + } } }