larra/tests/stream.cpp
2024-10-03 02:13:42 +00:00

52 lines
1.9 KiB
C++

#include <gtest/gtest.h>
#include <larra/stream.hpp>
namespace larra::xmpp {
constexpr std::string_view kSerializedData =
R"(<stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' xml:lang='en' version='1.0' id='abc' from='user@example.com' />
)";
constexpr std::string_view kCheckSerializeData =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<stream:stream xmlns=\"jabber:client\" xmlns:stream=\"http://etherx.jabber.org/streams\" "
"from=\"user@example.com\" to=\"example.com\" id=\"abc\" version=\"1.0\" xml:lang=\"en\"/>\n";
TEST(Stream, Serialize) {
UserStream originalStream;
originalStream.from = BareJid{.username = "user", .server = "example.com"};
originalStream.to = "example.com";
originalStream.id = "abc";
originalStream.version = "1.0";
originalStream.xmlLang = "en";
xmlpp::Document doc;
auto streamNode = doc.create_root_node(UserStream::kDefaultName, UserStream::kDefaultNamespace, UserStream::kDefaultPrefix);
streamNode << originalStream;
const std::string serializedData = doc.write_to_string();
ASSERT_EQ(serializedData, kCheckSerializeData);
}
TEST(Stream, Deserialize) {
xmlpp::DomParser parser;
parser.parse_memory(static_cast<std::string>(kSerializedData));
auto parsedDoc = parser.get_document();
const UserStream deserializedStream = UserStream::Parse(parsedDoc->get_root_node());
ASSERT_TRUE(deserializedStream.from.has_value());
ASSERT_EQ(ToString(*deserializedStream.from), "user@example.com");
ASSERT_FALSE(deserializedStream.to.has_value());
ASSERT_TRUE(deserializedStream.id.has_value());
ASSERT_EQ(deserializedStream.id.value(), "abc");
ASSERT_TRUE(deserializedStream.version.has_value());
ASSERT_EQ(deserializedStream.version.value(), "1.0");
ASSERT_TRUE(deserializedStream.xmlLang.has_value());
ASSERT_EQ(deserializedStream.xmlLang.value(), "en");
}
} // namespace larra::xmpp