diff --git a/include/loot/metadata/message.h b/include/loot/metadata/message.h index 29a01585..5d0866d3 100644 --- a/include/loot/metadata/message.h +++ b/include/loot/metadata/message.h @@ -76,6 +76,14 @@ public: const std::vector& content, const std::string& condition = ""); + /** + * Construct a Message object from a SimpleMessage object. + * @param message + * The SimpleMessage object. + * @return A Message object. + */ + LOOT_API explicit Message(const SimpleMessage& message); + /** * A less-than operator implemented with no semantics so that Message objects * can be stored in sets. diff --git a/src/api/metadata/message.cpp b/src/api/metadata/message.cpp index 259e86cf..f2d8790e 100644 --- a/src/api/metadata/message.cpp +++ b/src/api/metadata/message.cpp @@ -34,10 +34,9 @@ Message::Message() : type_(MessageType::say) {} Message::Message(const MessageType type, const std::string& content, const std::string& condition) : - type_(type), - ConditionalMetadata(condition) { - content_.push_back(MessageContent(content)); -} + type_(type), + content_({MessageContent(content)}), + ConditionalMetadata(condition) {} Message::Message(const MessageType type, const std::vector& content, @@ -58,6 +57,11 @@ Message::Message(const MessageType type, } } +Message::Message(const SimpleMessage& message) : + type_(message.type), + content_({MessageContent(message.text, message.language)}), + ConditionalMetadata(message.condition) {} + bool Message::operator<(const Message& rhs) const { if (type_ < rhs.type_) { return true; diff --git a/src/tests/api/internals/metadata/message_test.h b/src/tests/api/internals/metadata/message_test.h index 7e6f3f22..e224f590 100644 --- a/src/tests/api/internals/metadata/message_test.h +++ b/src/tests/api/internals/metadata/message_test.h @@ -82,6 +82,22 @@ TEST_P( std::invalid_argument); } +TEST_P(MessageTest, + simpleMessageConstructorShouldCreateAMessageWithASingleContentString) { + SimpleMessage simple; + simple.type = MessageType::error; + simple.text = "ERROR"; + simple.language = "fr"; + simple.condition = "condition"; + + Message message(simple); + + EXPECT_EQ(MessageType::error, message.GetType()); + EXPECT_EQ(MessageContents({MessageContent(simple.text, simple.language)}), + message.GetContent()); + EXPECT_EQ("condition", message.GetCondition()); +} + TEST_P(MessageTest, equalityShouldRequireEqualMessageTypes) { Message message1(MessageType::say, "content"); Message message2(MessageType::say, "content");