Reimplement message types as strongly-typed enums

This commit is contained in:
Oliver Hamlet
2016-07-13 20:48:18 +01:00
parent e87c8e772c
commit 93a2e266cc
18 changed files with 148 additions and 150 deletions
+3 -3
View File
@@ -67,9 +67,9 @@ const unsigned int loot_game_fonv = loot::Game::fonv;
const unsigned int loot_game_fo4 = loot::Game::fo4;
// LOOT message types.
const unsigned int loot_message_say = loot::Message::say;
const unsigned int loot_message_warn = loot::Message::warn;
const unsigned int loot_message_error = loot::Message::error;
const unsigned int loot_message_say = static_cast<unsigned int>(loot::Message::Type::say);
const unsigned int loot_message_warn = static_cast<unsigned int>(loot::Message::Type::warn);
const unsigned int loot_message_error = static_cast<unsigned int>(loot::Message::Type::error);
// LOOT message languages.
const unsigned int loot_lang_english = loot::Language::english;
+1 -1
View File
@@ -104,7 +104,7 @@ void loot_db::setPluginMessages(const std::list<loot::Message>& pluginMessages)
for (const auto& message : pluginMessages) {
pluginMessageStrings[i] = message.ChooseContent(loot::Language::english).Text();
cPluginMessages[i].type = message.Type();
cPluginMessages[i].type = static_cast<unsigned int>(message.GetType());
cPluginMessages[i].message = pluginMessageStrings[i].c_str();
++i;
+1 -1
View File
@@ -115,7 +115,7 @@ namespace loot {
std::vector<Message> GameCache::GetMessages() const {
vector<Message> output(messages);
if (!isLoadOrderSorted)
output.push_back(Message(Message::warn, "You have not sorted your load order this session."));
output.push_back(Message(Message::Type::warn, "You have not sorted your load order this session."));
return output;
}
+13 -17
View File
@@ -31,18 +31,14 @@
using namespace std;
namespace loot {
const unsigned int Message::say = 0;
const unsigned int Message::warn = 1;
const unsigned int Message::error = 2;
Message::Message() : _type(Message::Type::say) {}
Message::Message() : _type(Message::say) {}
Message::Message(const unsigned int type, const std::string& content,
Message::Message(const Type type, const std::string& content,
const std::string& condition) : _type(type), ConditionalMetadata(condition) {
_content.push_back(MessageContent(content, Language::english));
}
Message::Message(const unsigned int type, const std::vector<MessageContent>& content,
Message::Message(const Type type, const std::vector<MessageContent>& content,
const std::string& condition) : _type(type), _content(content), ConditionalMetadata(condition) {
if (content.size() > 1) {
bool englishStringExists = false;
@@ -56,16 +52,16 @@ namespace loot {
}
bool Message::operator < (const Message& rhs) const {
if (!_content.empty() && !rhs.Content().empty())
if (!_content.empty() && !rhs.GetContent().empty())
return boost::ilexicographical_compare(ChooseContent(Language::english).Text(), rhs.ChooseContent(Language::english).Text());
else if (_content.empty() && !rhs.Content().empty())
else if (_content.empty() && !rhs.GetContent().empty())
return true;
else
return false;
}
bool Message::operator == (const Message& rhs) const {
return (_content == rhs.Content());
return (_content == rhs.GetContent());
}
bool Message::EvalCondition(loot::Game& game, const unsigned int language) {
@@ -94,11 +90,11 @@ namespace loot {
}
}
unsigned int Message::Type() const {
Message::Type Message::GetType() const {
return _type;
}
std::vector<MessageContent> Message::Content() const {
std::vector<MessageContent> Message::GetContent() const {
return _content;
}
}
@@ -107,17 +103,17 @@ namespace YAML {
Emitter& operator << (Emitter& out, const loot::Message& rhs) {
out << BeginMap;
if (rhs.Type() == loot::Message::say)
if (rhs.GetType() == loot::Message::Type::say)
out << Key << "type" << Value << "say";
else if (rhs.Type() == loot::Message::warn)
else if (rhs.GetType() == loot::Message::Type::warn)
out << Key << "type" << Value << "warn";
else
out << Key << "type" << Value << "error";
if (rhs.Content().size() == 1)
out << Key << "content" << Value << YAML::SingleQuoted << rhs.Content().front().Text();
if (rhs.GetContent().size() == 1)
out << Key << "content" << Value << YAML::SingleQuoted << rhs.GetContent().front().Text();
else
out << Key << "content" << Value << rhs.Content();
out << Key << "content" << Value << rhs.GetContent();
if (rhs.IsConditional())
out << Key << "condition" << Value << YAML::SingleQuoted << rhs.Condition();
+17 -15
View File
@@ -41,10 +41,16 @@ namespace loot {
class Message : public ConditionalMetadata {
public:
enum struct Type : unsigned int {
say = 0,
warn = 1,
error = 2,
};
Message();
Message(const unsigned int type, const std::string& content,
Message(const Type type, const std::string& content,
const std::string& condition = "");
Message(const unsigned int type, const std::vector<MessageContent>& content,
Message(const Type type, const std::vector<MessageContent>& content,
const std::string& condition = "");
bool operator < (const Message& rhs) const;
@@ -52,15 +58,11 @@ namespace loot {
bool EvalCondition(Game& game, const unsigned int language);
unsigned int Type() const;
std::vector<MessageContent> Content() const;
Type GetType() const;
std::vector<MessageContent> GetContent() const;
MessageContent ChooseContent(const unsigned int language) const;
static const unsigned int say;
static const unsigned int warn;
static const unsigned int error;
private:
unsigned int _type;
Type _type;
std::vector<MessageContent> _content;
};
}
@@ -70,11 +72,11 @@ namespace YAML {
struct convert < loot::Message > {
static Node encode(const loot::Message& rhs) {
Node node;
node["content"] = rhs.Content();
node["content"] = rhs.GetContent();
if (rhs.Type() == loot::Message::say)
if (rhs.GetType() == loot::Message::Type::say)
node["type"] = "say";
else if (rhs.Type() == loot::Message::warn)
else if (rhs.GetType() == loot::Message::Type::warn)
node["type"] = "warn";
else
node["type"] = "error";
@@ -96,11 +98,11 @@ namespace YAML {
std::string type;
type = node["type"].as<std::string>();
unsigned int typeNo = loot::Message::say;
loot::Message::Type typeNo = loot::Message::Type::say;
if (boost::iequals(type, "warn"))
typeNo = loot::Message::warn;
typeNo = loot::Message::Type::warn;
else if (boost::iequals(type, "error"))
typeNo = loot::Message::error;
typeNo = loot::Message::Type::error;
std::vector<loot::MessageContent> content;
if (node["content"].IsSequence())
+1 -1
View File
@@ -87,7 +87,7 @@ namespace loot {
else if (this->_itm > 0 && this->_ref > 0 && this->_nav == 0)
f = boost::format(boost::locale::translate("Contains %1% ITM records and %2% deleted references. Clean with %3%.")) % this->_itm % this->_ref % this->_utility;
return Message(Message::warn, f.str());
return Message(Message::Type::warn, f.str());
}
bool PluginDirtyInfo::EvalCondition(Game& game, const std::string& pluginName) const {
+5 -5
View File
@@ -111,7 +111,7 @@ namespace loot {
}
catch (std::exception& e) {
BOOST_LOG_TRIVIAL(error) << "Cannot read plugin file \"" << name << "\". Details: " << e.what();
messages.push_back(loot::Message(loot::Message::error, (boost::format(boost::locale::translate("Cannot read \"%1%\". Details: %2%")) % name % e.what()).str()));
messages.push_back(loot::Message(loot::Message::Type::error, (boost::format(boost::locale::translate("Cannot read \"%1%\". Details: %2%")) % name % e.what()).str()));
}
BOOST_LOG_TRIVIAL(trace) << Name() << ": " << "Plugin loading complete.";
@@ -209,11 +209,11 @@ namespace loot {
for (const auto &master : getMasters()) {
if (!pluginExists(game, master)) {
BOOST_LOG_TRIVIAL(error) << "\"" << Name() << "\" requires \"" << master << "\", but it is missing.";
messages.push_back(Message(Message::error, (boost::format(boost::locale::translate("This plugin requires \"%1%\" to be installed, but it is missing.")) % master).str()));
messages.push_back(Message(Message::Type::error, (boost::format(boost::locale::translate("This plugin requires \"%1%\" to be installed, but it is missing.")) % master).str()));
}
else if (!game.IsPluginActive(master)) {
BOOST_LOG_TRIVIAL(error) << "\"" << Name() << "\" requires \"" << master << "\", but it is inactive.";
messages.push_back(Message(Message::error, (boost::format(boost::locale::translate("This plugin requires \"%1%\" to be active, but it is inactive.")) % master).str()));
messages.push_back(Message(Message::Type::error, (boost::format(boost::locale::translate("This plugin requires \"%1%\" to be active, but it is inactive.")) % master).str()));
}
}
}
@@ -221,13 +221,13 @@ namespace loot {
for (const auto &req : Reqs()) {
if (!pluginExists(game, req.Name())) {
BOOST_LOG_TRIVIAL(error) << "\"" << Name() << "\" requires \"" << req.Name() << "\", but it is missing.";
messages.push_back(loot::Message(Message::error, (boost::format(boost::locale::translate("This plugin requires \"%1%\" to be installed, but it is missing.")) % req.Name()).str()));
messages.push_back(loot::Message(Message::Type::error, (boost::format(boost::locale::translate("This plugin requires \"%1%\" to be installed, but it is missing.")) % req.Name()).str()));
}
}
for (const auto &inc : Incs()) {
if (pluginExists(game, inc.Name()) && game.IsPluginActive(inc.Name())) {
BOOST_LOG_TRIVIAL(error) << "\"" << Name() << "\" is incompatible with \"" << inc.Name() << "\", but both are present.";
messages.push_back(loot::Message(Message::error, (boost::format(boost::locale::translate("This plugin is incompatible with \"%1%\", but both are present.")) % inc.Name()).str()));
messages.push_back(loot::Message(Message::Type::error, (boost::format(boost::locale::translate("This plugin is incompatible with \"%1%\", but both are present.")) % inc.Name()).str()));
}
}
}
+1 -1
View File
@@ -212,7 +212,7 @@ namespace loot {
catch (std::exception& e) {
BOOST_LOG_TRIVIAL(error) << "\"" << graph[v].Name() << "\" contains a condition that could not be evaluated. Details: " << e.what();
list<Message> messages(graph[v].Messages());
messages.push_back(Message(Message::error, (boost::format(boost::locale::translate("\"%1%\" contains a condition that could not be evaluated. Details: %2%")) % graph[v].Name() % e.what()).str()));
messages.push_back(Message(Message::Type::error, (boost::format(boost::locale::translate("\"%1%\" contains a condition that could not be evaluated. Details: %2%")) % graph[v].Name() % e.what()).str()));
graph[v].Messages(messages);
}
+6 -6
View File
@@ -645,7 +645,7 @@ namespace loot {
_lootState.CurrentGame().GetMasterlist().Load(_lootState.CurrentGame().MasterlistPath());
}
catch (exception &e) {
_lootState.CurrentGame().GetMasterlist().AppendMessage(Message(Message::error, (boost::format(loc::translate(
_lootState.CurrentGame().GetMasterlist().AppendMessage(Message(Message::Type::error, (boost::format(loc::translate(
"An error occurred while parsing the masterlist: %1%. "
"This probably happened because an update to LOOT changed "
"its metadata syntax support. Try updating your masterlist "
@@ -661,7 +661,7 @@ namespace loot {
_lootState.CurrentGame().GetUserlist().Load(_lootState.CurrentGame().UserlistPath());
}
catch (exception &e) {
_lootState.CurrentGame().GetUserlist().AppendMessage(Message(Message::error, (boost::format(loc::translate(
_lootState.CurrentGame().GetUserlist().AppendMessage(Message(Message::Type::error, (boost::format(loc::translate(
"An error occurred while parsing the userlist: %1%. "
"This probably happened because an update to LOOT changed "
"its metadata syntax support. Your user metadata will have "
@@ -793,7 +793,7 @@ namespace loot {
// There was a parsing error, but roll-back was successful, so the process
// should still complete.
_lootState.CurrentGame().GetMasterlist().AppendMessage(Message(Message::error, e.what()));
_lootState.CurrentGame().GetMasterlist().AppendMessage(Message(Message::Type::error, e.what()));
wasChanged = true;
}
else {
@@ -962,7 +962,7 @@ namespace loot {
catch (loot::Error& e) {
BOOST_LOG_TRIVIAL(error) << "Failed to sort plugins. Details: " << e.what();
if (e.code() == Error::Code::sorting_error) {
_lootState.CurrentGame().AppendMessage(Message(Message::error, e.what()));
_lootState.CurrentGame().AppendMessage(Message(Message::Type::error, e.what()));
YAML::Node node;
node["globalMessages"] = GetGeneralMessages();
@@ -1000,7 +1000,7 @@ namespace loot {
}
catch (std::exception& e) {
BOOST_LOG_TRIVIAL(error) << "A global message contains a condition that could not be evaluated. Details: " << e.what();
messages.push_back(Message(Message::error, (format(loc::translate("A global message contains a condition that could not be evaluated. Details: %1%")) % e.what()).str()));
messages.push_back(Message(Message::Type::error, (format(loc::translate("A global message contains a condition that could not be evaluated. Details: %1%")) % e.what()).str()));
}
return messages;
@@ -1023,7 +1023,7 @@ namespace loot {
catch (std::exception& e) {
BOOST_LOG_TRIVIAL(error) << "\"" << tempPlugin.Name() << "\" contains a condition that could not be evaluated. Details: " << e.what();
list<Message> messages(tempPlugin.Messages());
messages.push_back(Message(Message::error, (format(loc::translate("\"%1%\" contains a condition that could not be evaluated. Details: %2%")) % tempPlugin.Name() % e.what()).str()));
messages.push_back(Message(Message::Type::error, (format(loc::translate("\"%1%\" contains a condition that could not be evaluated. Details: %2%")) % tempPlugin.Name() % e.what()).str()));
tempPlugin.Messages(messages);
}
+14 -14
View File
@@ -241,41 +241,41 @@ namespace loot {
TEST_P(loot_db_test, settingPluginMessagesShouldCopyThem) {
db->setPluginMessages(std::list<Message>({
Message(Message::warn, "Test 1"),
Message(Message::error, "Test 2"),
Message(Message::Type::warn, "Test 1"),
Message(Message::Type::error, "Test 2"),
}));
EXPECT_EQ(2, db->getPluginMessages().size());
EXPECT_EQ(Message::warn, db->getPluginMessages()[0].type);
EXPECT_EQ(static_cast<unsigned int>(Message::Type::warn), db->getPluginMessages()[0].type);
EXPECT_STREQ("Test 1", db->getPluginMessages()[0].message);
EXPECT_EQ(Message::error, db->getPluginMessages()[1].type);
EXPECT_EQ(static_cast<unsigned int>(Message::Type::error), db->getPluginMessages()[1].type);
EXPECT_STREQ("Test 2", db->getPluginMessages()[1].message);
}
TEST_P(loot_db_test, settingPluginMessagesTwiceShouldOverwriteTheFirstDataSet) {
db->setPluginMessages(std::list<Message>({
Message(Message::warn, "Test 1"),
Message(Message::error, "Test 2"),
Message(Message::Type::warn, "Test 1"),
Message(Message::Type::error, "Test 2"),
}));
db->setPluginMessages(std::list<Message>({
Message(Message::error, "Test 3"),
Message(Message::warn, "Test 4"),
Message(Message::say, "Test 5"),
Message(Message::Type::error, "Test 3"),
Message(Message::Type::warn, "Test 4"),
Message(Message::Type::say, "Test 5"),
}));
EXPECT_EQ(3, db->getPluginMessages().size());
EXPECT_EQ(Message::error, db->getPluginMessages()[0].type);
EXPECT_EQ(static_cast<unsigned int>(Message::Type::error), db->getPluginMessages()[0].type);
EXPECT_STREQ("Test 3", db->getPluginMessages()[0].message);
EXPECT_EQ(Message::warn, db->getPluginMessages()[1].type);
EXPECT_EQ(static_cast<unsigned int>(Message::Type::warn), db->getPluginMessages()[1].type);
EXPECT_STREQ("Test 4", db->getPluginMessages()[1].message);
EXPECT_EQ(Message::say, db->getPluginMessages()[2].type);
EXPECT_EQ(static_cast<unsigned int>(Message::Type::say), db->getPluginMessages()[2].type);
EXPECT_STREQ("Test 5", db->getPluginMessages()[2].message);
}
TEST_P(loot_db_test, clearingArraysShouldEmptyPluginNamesTagIdsAndMessages) {
db->setPluginMessages(std::list<Message>({
Message(Message::warn, "Test 1"),
Message(Message::error, "Test 2"),
Message(Message::Type::warn, "Test 1"),
Message(Message::Type::error, "Test 2"),
}));
db->setPluginNames(std::vector<PluginMetadata>({
PluginMetadata("Blank.esm"),
+6 -6
View File
@@ -63,7 +63,7 @@ namespace loot {
cache.CacheCondition(condition, true);
cache.AddPlugin(Plugin(game, blankEsm, true));
Message expectedMessage(Message::say, "1");
Message expectedMessage(Message::Type::say, "1");
cache.AppendMessage(expectedMessage);
cache.SetLoadOrderSorted(true);
@@ -79,7 +79,7 @@ namespace loot {
cache.CacheCondition(condition, true);
cache.AddPlugin(Plugin(game, blankEsm, true));
Message expectedMessage(Message::say, "1");
Message expectedMessage(Message::Type::say, "1");
cache.AppendMessage(expectedMessage);
cache.SetLoadOrderSorted(true);
@@ -195,8 +195,8 @@ namespace loot {
TEST_P(GameCacheTest, appendingMessagesShouldStoreThemInTheGivenOrder) {
std::vector<Message> messages({
Message(Message::say, "1"),
Message(Message::error, "2"),
Message(Message::Type::say, "1"),
Message(Message::Type::error, "2"),
});
for (const auto& message : messages)
cache.AppendMessage(message);
@@ -208,8 +208,8 @@ namespace loot {
TEST_P(GameCacheTest, clearingMessagesShouldRemoveAllAppendedMessages) {
std::vector<Message> messages({
Message(Message::say, "1"),
Message(Message::error, "2"),
Message(Message::Type::say, "1"),
Message(Message::Type::error, "2"),
});
for (const auto& message : messages)
cache.AppendMessage(message);
+46 -46
View File
@@ -46,16 +46,16 @@ namespace loot {
TEST_P(MessageTest, defaultConstructorShouldCreateNoteWithNoContent) {
Message message;
EXPECT_EQ(Message::say, message.Type());
EXPECT_EQ(MessageContents(), message.Content());
EXPECT_EQ(Message::Type::say, message.GetType());
EXPECT_EQ(MessageContents(), message.GetContent());
}
TEST_P(MessageTest, scalarContentConstructorShouldCreateAMessageWithASingleContentString) {
MessageContent content = MessageContent("content1", Language::english);
Message message(Message::warn, content.Text(), "condition1");
Message message(Message::Type::warn, content.Text(), "condition1");
EXPECT_EQ(Message::warn, message.Type());
EXPECT_EQ(MessageContents({content}), message.Content());
EXPECT_EQ(Message::Type::warn, message.GetType());
EXPECT_EQ(MessageContents({content}), message.GetContent());
EXPECT_EQ("condition1", message.Condition());
}
@@ -64,10 +64,10 @@ namespace loot {
MessageContent("content1", Language::english),
MessageContent("content2", Language::french),
});
Message message(Message::error, contents, "condition1");
Message message(Message::Type::error, contents, "condition1");
EXPECT_EQ(Message::error, message.Type());
EXPECT_EQ(contents, message.Content());
EXPECT_EQ(Message::Type::error, message.GetType());
EXPECT_EQ(contents, message.GetContent());
EXPECT_EQ("condition1", message.Condition());
}
@@ -76,31 +76,31 @@ namespace loot {
MessageContent("content1", Language::german),
MessageContent("content2", Language::french),
});
EXPECT_ANY_THROW(Message(Message::error, contents, "condition1"));
EXPECT_ANY_THROW(Message(Message::Type::error, contents, "condition1"));
}
TEST_P(MessageTest, messagesWithDifferentContentStringsShouldBeUnequal) {
Message message1(Message::say, "content1", "condition1");
Message message2(Message::say, "content2", "condition1");
Message message1(Message::Type::say, "content1", "condition1");
Message message2(Message::Type::say, "content2", "condition1");
EXPECT_FALSE(message1 == message2);
}
TEST_P(MessageTest, messagesWithEqualContentStringsShouldBeEqual) {
Message message1(Message::say, MessageContents({MessageContent("content1", Language::english)}), "condition1");
Message message2(Message::warn, MessageContents({MessageContent("content1", Language::french)}), "condition2");
Message message1(Message::Type::say, MessageContents({MessageContent("content1", Language::english)}), "condition1");
Message message2(Message::Type::warn, MessageContents({MessageContent("content1", Language::french)}), "condition2");
EXPECT_TRUE(message1 == message2);
}
TEST_P(MessageTest, LessThanOperatorShouldUseCaseInsensitiveLexicographicalContentStringComparison) {
Message message1(Message::say, MessageContents({MessageContent("content1", Language::english)}), "condition1");
Message message2(Message::warn, MessageContents({MessageContent("content1", Language::french)}), "condition2");
Message message1(Message::Type::say, MessageContents({MessageContent("content1", Language::english)}), "condition1");
Message message2(Message::Type::warn, MessageContents({MessageContent("content1", Language::french)}), "condition2");
EXPECT_FALSE(message1 < message2);
EXPECT_FALSE(message2 < message1);
message1 = Message(Message::say, "content1", "condition1");
message2 = Message(Message::say, "content2", "condition1");
message1 = Message(Message::Type::say, "content1", "condition1");
message2 = Message(Message::Type::say, "content2", "condition1");
EXPECT_TRUE(message1 < message2);
EXPECT_FALSE(message2 < message1);
}
@@ -112,7 +112,7 @@ namespace loot {
Message message;
EXPECT_TRUE(message.EvalCondition(game, Language::english));
EXPECT_EQ(MessageContents({MessageContent()}), message.Content());
EXPECT_EQ(MessageContents({MessageContent()}), message.GetContent());
}
TEST_P(MessageTest, evalConditionShouldPickOneContentStringIfMoreThanOneExists) {
@@ -120,15 +120,15 @@ namespace loot {
game.SetGamePath(dataPath.parent_path());
ASSERT_NO_THROW(game.Init(false, localPath));
Message message(Message::say, MessageContents({
Message message(Message::Type::say, MessageContents({
MessageContent("content1", Language::german),
MessageContent("content2", Language::english),
MessageContent("content3", Language::french),
}));
EXPECT_TRUE(message.EvalCondition(game, Language::french));
EXPECT_EQ(1, message.Content().size());
EXPECT_EQ(MessageContent("content3", Language::french), message.Content()[0]);
EXPECT_EQ(1, message.GetContent().size());
EXPECT_EQ(MessageContent("content3", Language::french), message.GetContent()[0]);
}
TEST_P(MessageTest, chooseContentShouldCreateADefaultContentObjectIfNoneExists) {
@@ -137,7 +137,7 @@ namespace loot {
TEST_P(MessageTest, chooseContentShouldLeaveTheContentUnchangedIfOnlyOneStringExists) {
MessageContent content("content1", Language::english);
Message message(Message::say, MessageContents({content}));
Message message(Message::Type::say, MessageContents({content}));
EXPECT_EQ(content, message.ChooseContent(Language::french));
EXPECT_EQ(content, message.ChooseContent(Language::english));
@@ -145,7 +145,7 @@ namespace loot {
TEST_P(MessageTest, chooseContentShouldSelectTheEnglishStringIfNoStringExistsForTheGivenLanguage) {
MessageContent content("content1", Language::english);
Message message(Message::say, MessageContents({
Message message(Message::Type::say, MessageContents({
content,
MessageContent("content1", Language::german),
}));
@@ -154,7 +154,7 @@ namespace loot {
TEST_P(MessageTest, chooseContentShouldSelectTheStringForTheGivenLanguageIfOneExists) {
MessageContent french("content3", Language::french);
Message message(Message::say, MessageContents({
Message message(Message::Type::say, MessageContents({
MessageContent("content1", Language::german),
MessageContent("content2", Language::english),
french,
@@ -164,7 +164,7 @@ namespace loot {
}
TEST_P(MessageTest, emittingAsYamlShouldOutputNoteMessageTypeCorrectly) {
Message message(Message::say, "content1");
Message message(Message::Type::say, "content1");
YAML::Emitter emitter;
emitter << message;
@@ -173,7 +173,7 @@ namespace loot {
}
TEST_P(MessageTest, emittingAsYamlShouldOutputWarnMessageTypeCorrectly) {
Message message(Message::warn, "content1");
Message message(Message::Type::warn, "content1");
YAML::Emitter emitter;
emitter << message;
@@ -182,7 +182,7 @@ namespace loot {
}
TEST_P(MessageTest, emittingAsYamlShouldOutputErrorMessageTypeCorrectly) {
Message message(Message::error, "content1");
Message message(Message::Type::error, "content1");
YAML::Emitter emitter;
emitter << message;
@@ -191,7 +191,7 @@ namespace loot {
}
TEST_P(MessageTest, emittingAsYamlShouldOutputConditionIfItIsNotEmpty) {
Message message(Message::say, "content1", "condition1");
Message message(Message::Type::say, "content1", "condition1");
YAML::Emitter emitter;
emitter << message;
@@ -201,7 +201,7 @@ namespace loot {
}
TEST_P(MessageTest, emittingAsYamlShouldOutputMultipleContentStringsAsAList) {
Message message(Message::say, MessageContents({
Message message(Message::Type::say, MessageContents({
MessageContent("content1", Language::english),
MessageContent("content2", Language::german)
}));
@@ -217,7 +217,7 @@ namespace loot {
}
TEST_P(MessageTest, encodingAsYamlShouldStoreNoteMessageTypeCorrectly) {
Message message(Message::say, "content1");
Message message(Message::Type::say, "content1");
YAML::Node node;
node = message;
@@ -225,7 +225,7 @@ namespace loot {
}
TEST_P(MessageTest, encodingAsYamlShouldStoreWarningMessageTypeCorrectly) {
Message message(Message::warn, "content1");
Message message(Message::Type::warn, "content1");
YAML::Node node;
node = message;
@@ -233,7 +233,7 @@ namespace loot {
}
TEST_P(MessageTest, encodingAsYamlShouldStoreErrorMessageTypeCorrectly) {
Message message(Message::error, "content1");
Message message(Message::Type::error, "content1");
YAML::Node node;
node = message;
@@ -241,7 +241,7 @@ namespace loot {
}
TEST_P(MessageTest, encodingAsYamlShouldOmitConditionFieldIfItIsEmpty) {
Message message(Message::say, "content1");
Message message(Message::Type::say, "content1");
YAML::Node node;
node = message;
@@ -249,7 +249,7 @@ namespace loot {
}
TEST_P(MessageTest, encodingAsYamlShouldStoreConditionFieldIfItIsNotEmpty) {
Message message(Message::say, "content1", "condition1");
Message message(Message::Type::say, "content1", "condition1");
YAML::Node node;
node = message;
@@ -257,11 +257,11 @@ namespace loot {
}
TEST_P(MessageTest, encodingAsYamlShouldStoreASingleContentStringInAVector) {
Message message(Message::say, "content1");
Message message(Message::Type::say, "content1");
YAML::Node node;
node = message;
EXPECT_EQ(message.Content(), node["content"].as<MessageContents>());
EXPECT_EQ(message.GetContent(), node["content"].as<MessageContents>());
}
TEST_P(MessageTest, encodingAsYamlShouldMultipleContentStringsInAVector) {
@@ -269,7 +269,7 @@ namespace loot {
MessageContent("content1", Language::english),
MessageContent("content2", Language::french),
});
Message message(Message::say, contents);
Message message(Message::Type::say, contents);
YAML::Node node;
node = message;
@@ -281,7 +281,7 @@ namespace loot {
"content: content1");
Message message = node.as<Message>();
EXPECT_EQ(Message::say, message.Type());
EXPECT_EQ(Message::Type::say, message.GetType());
}
TEST_P(MessageTest, decodingFromYamlShouldSetWarningTypeCorrectly) {
@@ -289,7 +289,7 @@ namespace loot {
"content: content1");
Message message = node.as<Message>();
EXPECT_EQ(Message::warn, message.Type());
EXPECT_EQ(Message::Type::warn, message.GetType());
}
TEST_P(MessageTest, decodingFromYamlShouldSetErrorTypeCorrectly) {
@@ -297,7 +297,7 @@ namespace loot {
"content: content1");
Message message = node.as<Message>();
EXPECT_EQ(Message::error, message.Type());
EXPECT_EQ(Message::Type::error, message.GetType());
}
TEST_P(MessageTest, decodingFromYamlShouldHandleAnUnrecognisedTypeAsANote) {
@@ -305,7 +305,7 @@ namespace loot {
"content: content1");
Message message = node.as<Message>();
EXPECT_EQ(Message::say, message.Type());
EXPECT_EQ(Message::Type::say, message.GetType());
}
TEST_P(MessageTest, decodingFromYamlShouldLeaveTheConditionEmptyIfNoneIsPresent) {
@@ -331,7 +331,7 @@ namespace loot {
Message message = node.as<Message>();
MessageContents expectedContent({MessageContent("content1", Language::english)});
EXPECT_EQ(expectedContent, message.Content());
EXPECT_EQ(expectedContent, message.GetContent());
}
TEST_P(MessageTest, decodingFromYamlShouldStoreAListOfContentStringsCorrectly) {
@@ -346,7 +346,7 @@ namespace loot {
EXPECT_EQ(MessageContents({
MessageContent("content1", Language::english),
MessageContent("content2", Language::german),
}), message.Content());
}), message.GetContent());
}
TEST_P(MessageTest, decodingFromYamlShouldNotThrowIfTheOnlyContentStringIsNotEnglish) {
@@ -376,7 +376,7 @@ namespace loot {
" - sub1");
Message message = node.as<Message>();
EXPECT_EQ(MessageContents({MessageContent("consub1tent1", Language::english)}), message.Content());
EXPECT_EQ(MessageContents({MessageContent("consub1tent1", Language::english)}), message.GetContent());
}
TEST_P(MessageTest, decodingFromYamlShouldApplySubstitutionsToAllContentStrings) {
@@ -393,7 +393,7 @@ namespace loot {
EXPECT_EQ(MessageContents({
MessageContent("content1 sub", Language::english),
MessageContent("content2 sub", Language::german),
}), message.Content());
}), message.GetContent());
}
TEST_P(MessageTest, decodingFromYamlShouldThrowIfTheContentStringExpectsMoreSubstitutionsThanExist) {
@@ -411,7 +411,7 @@ namespace loot {
"content: con%1%tent1\n");
Message message = node.as<Message>();
EXPECT_EQ(MessageContents({MessageContent("con%1%tent1", Language::english)}), message.Content());
EXPECT_EQ(MessageContents({MessageContent("con%1%tent1", Language::english)}), message.GetContent());
}
TEST_P(MessageTest, decodingFromYamlShouldThrowIfAnInvalidConditionIsGiven) {
@@ -59,35 +59,35 @@ namespace loot {
TEST_P(PluginDirtyInfoTest, asMessageShouldOutputAllNonZeroCounts) {
Message message = PluginDirtyInfo(0x12345678, 2, 10, 30, "cleaner").AsMessage();
EXPECT_EQ(Message::warn, message.Type());
EXPECT_EQ(Message::Type::warn, message.GetType());
EXPECT_EQ("Contains 2 ITM records, 10 deleted references and 30 deleted navmeshes. Clean with cleaner.", message.ChooseContent(Language::english).Text());
message = PluginDirtyInfo(0x12345678, 0, 0, 0, "cleaner").AsMessage();
EXPECT_EQ(Message::warn, message.Type());
EXPECT_EQ(Message::Type::warn, message.GetType());
EXPECT_EQ("Clean with cleaner.", message.ChooseContent(Language::english).Text());
message = PluginDirtyInfo(0x12345678, 0, 10, 30, "cleaner").AsMessage();
EXPECT_EQ(Message::warn, message.Type());
EXPECT_EQ(Message::Type::warn, message.GetType());
EXPECT_EQ("Contains 10 deleted references and 30 deleted navmeshes. Clean with cleaner.", message.ChooseContent(Language::english).Text());
message = PluginDirtyInfo(0x12345678, 0, 0, 30, "cleaner").AsMessage();
EXPECT_EQ(Message::warn, message.Type());
EXPECT_EQ(Message::Type::warn, message.GetType());
EXPECT_EQ("Contains 30 deleted navmeshes. Clean with cleaner.", message.ChooseContent(Language::english).Text());
message = PluginDirtyInfo(0x12345678, 0, 10, 0, "cleaner").AsMessage();
EXPECT_EQ(Message::warn, message.Type());
EXPECT_EQ(Message::Type::warn, message.GetType());
EXPECT_EQ("Contains 10 deleted references. Clean with cleaner.", message.ChooseContent(Language::english).Text());
message = PluginDirtyInfo(0x12345678, 2, 0, 30, "cleaner").AsMessage();
EXPECT_EQ(Message::warn, message.Type());
EXPECT_EQ(Message::Type::warn, message.GetType());
EXPECT_EQ("Contains 2 ITM records and 30 deleted navmeshes. Clean with cleaner.", message.ChooseContent(Language::english).Text());
message = PluginDirtyInfo(0x12345678, 2, 0, 0, "cleaner").AsMessage();
EXPECT_EQ(Message::warn, message.Type());
EXPECT_EQ(Message::Type::warn, message.GetType());
EXPECT_EQ("Contains 2 ITM records. Clean with cleaner.", message.ChooseContent(Language::english).Text());
message = PluginDirtyInfo(0x12345678, 2, 10, 0, "cleaner").AsMessage();
EXPECT_EQ(Message::warn, message.Type());
EXPECT_EQ(Message::Type::warn, message.GetType());
EXPECT_EQ("Contains 2 ITM records and 10 deleted references. Clean with cleaner.", message.ChooseContent(Language::english).Text());
}
@@ -230,7 +230,7 @@ namespace loot {
TEST_P(PluginMetadataTest, mergeMetadataShouldMergeMessages) {
PluginMetadata plugin1;
PluginMetadata plugin2;
Message message(Message::say, "content");
Message message(Message::Type::say, "content");
plugin1.Messages({message});
plugin2.Messages({message});
@@ -383,9 +383,9 @@ namespace loot {
TEST_P(PluginMetadataTest, diffMetadataShouldOutputMessagesThatAreNotCommonToBothInputPlugins) {
PluginMetadata plugin1;
PluginMetadata plugin2;
Message message1(Message::say, "content1");
Message message2(Message::say, "content2");
Message message3(Message::say, "content3");
Message message1(Message::Type::say, "content1");
Message message2(Message::Type::say, "content2");
Message message3(Message::Type::say, "content3");
plugin1.Messages({message1, message2});
plugin2.Messages({message1, message3});
@@ -518,9 +518,9 @@ namespace loot {
TEST_P(PluginMetadataTest, newMetadataShouldOutputMessagesThatAreNotCommonToBothInputPlugins) {
PluginMetadata plugin1;
PluginMetadata plugin2;
Message message1(Message::say, "content1");
Message message2(Message::say, "content2");
Message message3(Message::say, "content3");
Message message1(Message::Type::say, "content1");
Message message2(Message::Type::say, "content2");
Message message3(Message::Type::say, "content3");
plugin1.Messages({message1, message2});
plugin2.Messages({message1, message3});
@@ -625,8 +625,8 @@ namespace loot {
plugin.Reqs({file1, file2});
plugin.Incs({file1, file2});
Message message1(Message::say, "content");
Message message2(Message::say, "content", "file(\"" + missingEsp + "\")");
Message message1(Message::Type::say, "content");
Message message2(Message::Type::say, "content", "file(\"" + missingEsp + "\")");
plugin.Messages({message1, message2});
Tag tag1("Relev");
@@ -697,7 +697,7 @@ namespace loot {
TEST_P(PluginMetadataTest, hasNameOnlyShouldBeFalseIfMessagesExist) {
PluginMetadata plugin(blankEsp);
plugin.Messages({Message(Message::say, "content")});
plugin.Messages({Message(Message::Type::say, "content")});
EXPECT_FALSE(plugin.HasNameOnly());
}
@@ -835,7 +835,7 @@ namespace loot {
TEST_P(PluginMetadataTest, emittingAsYamlShouldOutputAPluginWithMessagesCorrectly) {
PluginMetadata plugin(blankEsp);
plugin.Messages({Message(Message::say, "content")});
plugin.Messages({Message(Message::Type::say, "content")});
YAML::Emitter emitter;
emitter << plugin;
@@ -949,7 +949,7 @@ namespace loot {
TEST_P(PluginMetadataTest, encodingAsYamlShouldSetMsgFieldIfMessagesExist) {
PluginMetadata plugin(blankEsp);
plugin.Messages({Message(Message::say, "content")});
plugin.Messages({Message(Message::Type::say, "content")});
YAML::Node node;
node = plugin;
@@ -1032,7 +1032,7 @@ namespace loot {
File("Blank.esm")
}), plugin.Incs());
EXPECT_EQ(std::list<Message>({
Message(Message::say, "content")
Message(Message::Type::say, "content")
}), plugin.Messages());
EXPECT_EQ(std::set<Tag>({
Tag("Relev")
+5 -5
View File
@@ -86,7 +86,7 @@ namespace loot {
EXPECT_NO_THROW(metadataList.Load(metadataPath));
EXPECT_EQ(std::list<Message>({
Message(Message::say, "A global message."),
Message(Message::Type::say, "A global message."),
}), metadataList.Messages());
}
@@ -174,7 +174,7 @@ namespace loot {
}), metadataList.BashTags());
EXPECT_EQ(std::list<Message>({
Message(Message::say, "A global message."),
Message(Message::Type::say, "A global message."),
}), metadataList.Messages());
// Non-regex plugins can be outputted in any order, and regex entries can
@@ -294,8 +294,8 @@ namespace loot {
PluginMetadata plugin = metadataList.FindPlugin(PluginMetadata(blankEsm));
ASSERT_EQ(std::list<Message>({
Message(Message::warn, "This is a warning."),
Message(Message::say, "This message should be removed when evaluating conditions."),
Message(Message::Type::warn, "This is a warning."),
Message(Message::Type::say, "This message should be removed when evaluating conditions."),
}), plugin.Messages());
plugin = metadataList.FindPlugin(PluginMetadata(blankEsp));
@@ -306,7 +306,7 @@ namespace loot {
plugin = metadataList.FindPlugin(PluginMetadata(blankEsm));
EXPECT_EQ(std::list<Message>({
Message(Message::warn, "This is a warning."),
Message(Message::Type::warn, "This is a warning."),
}), plugin.Messages());
plugin = metadataList.FindPlugin(PluginMetadata(blankEsp));
@@ -73,7 +73,7 @@ namespace loot {
TEST_P(PluginSorterTest, sortingShouldClearExistingGameMessages) {
ASSERT_NO_THROW(game.LoadPlugins(false));
game.AppendMessage(Message(Message::say, "1"));
game.AppendMessage(Message(Message::Type::say, "1"));
ASSERT_FALSE(game.GetMessages().empty());
PluginSorter ps;
@@ -86,7 +86,7 @@ namespace loot {
PluginMetadata plugin(blankEsm);
plugin.LoadAfter({File(blankMasterDependentEsm)});
game.GetUserlist().AddPlugin(plugin);
game.AppendMessage(Message(Message::say, "1"));
game.AppendMessage(Message(Message::Type::say, "1"));
ASSERT_FALSE(game.GetMessages().empty());
PluginSorter ps;
+3 -3
View File
@@ -280,7 +280,7 @@ namespace loot {
EXPECT_FALSE(plugin.CheckInstallValidity(game));
EXPECT_EQ(std::list<Message>({
Message(Message::error, "This plugin requires \"" + missingEsp + "\" to be installed, but it is missing."),
Message(Message::Type::error, "This plugin requires \"" + missingEsp + "\" to be installed, but it is missing."),
}), plugin.Messages());
}
@@ -293,7 +293,7 @@ namespace loot {
EXPECT_FALSE(plugin.CheckInstallValidity(game));
EXPECT_EQ(std::list<Message>({
Message(Message::error, "This plugin is incompatible with \"" + masterFile + "\", but both are present."),
Message(Message::Type::error, "This plugin is incompatible with \"" + masterFile + "\", but both are present."),
}), plugin.Messages());
}
@@ -316,7 +316,7 @@ namespace loot {
EXPECT_FALSE(plugin.CheckInstallValidity(game));
EXPECT_EQ(std::list<Message>({
Message(Message::error, "This plugin requires \"" + blankDifferentEsm + "\" to be active, but it is inactive."),
Message(Message::Type::error, "This plugin requires \"" + blankDifferentEsm + "\" to be active, but it is inactive."),
}), plugin.Messages());
}
+3 -3
View File
@@ -55,15 +55,15 @@ namespace loot {
void PrintTo(const Message& value, ::std::ostream* os) {
std::string type;
if (value.Type() == Message::warn)
if (value.GetType() == Message::Type::warn)
type = "warn";
else if (value.Type() == Message::error)
else if (value.GetType() == Message::Type::error)
type = "error";
else
type = "say";
*os << "Message(\"" << type << "\", "
<< ::testing::PrintToString(value.Content()) << ", "
<< ::testing::PrintToString(value.GetContent()) << ", "
<< "\"" << value.Condition() << "\""
<< ")";
}