hessian2/string_writer_unittests.cc (281 lines of code) (raw):
#include <vector>
#include "gtest/gtest.h"
#include "common/common.h"
#include "hessian2/string_writer.hpp"
#include "hessian2/writer.hpp"
namespace Hessian2 {
TEST(StringWriterTest, WriteI8) {
std::string out;
StringWriter buffer(out);
buffer.writeByte(-128);
buffer.writeByte(-1);
buffer.writeByte(0);
buffer.writeByte(1);
buffer.writeByte(127);
EXPECT_EQ(std::string("\x80\xFF\0\x1\x7F", 5), out);
}
TEST(StringWriterTest, WriteLEI16) {
{
std::string out;
StringWriter buffer(out);
buffer.writeLE<int16_t>(std::numeric_limits<int16_t>::min());
EXPECT_EQ(std::string("\0\x80", 2), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeLE<int16_t>(0);
EXPECT_EQ(std::string("\0\0", 2), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeLE<int16_t>(1);
EXPECT_EQ(std::string("\x1\0", 2), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeLE<int16_t>(std::numeric_limits<int16_t>::max());
EXPECT_EQ("\xFF\x7F", out);
}
}
TEST(StringWriterTest, WriteLEU16) {
{
std::string out;
StringWriter buffer(out);
buffer.writeLE<uint16_t>(0);
EXPECT_EQ(std::string("\0\0", 2), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeLE<uint16_t>(1);
EXPECT_EQ(std::string("\x1\0", 2), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeLE<uint16_t>(
static_cast<uint16_t>(std::numeric_limits<int16_t>::max()) + 1);
EXPECT_EQ(std::string("\0\x80", 2), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeLE<uint16_t>(std::numeric_limits<uint16_t>::max());
EXPECT_EQ("\xFF\xFF", out);
}
}
TEST(StringWriterTest, WriteLEI32) {
{
std::string out;
StringWriter buffer(out);
buffer.writeLE<int32_t>(std::numeric_limits<int32_t>::min());
EXPECT_EQ(std::string("\0\0\0\x80", 4), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeLE<int32_t>(0);
EXPECT_EQ(std::string("\0\0\0\0", 4), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeLE<int32_t>(1);
EXPECT_EQ(std::string("\x1\0\0\0", 4), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeLE<int32_t>(std::numeric_limits<int32_t>::max());
EXPECT_EQ("\xFF\xFF\xFF\x7F", out);
}
}
TEST(StringWriterTest, WriteLEU32) {
{
std::string out;
StringWriter buffer(out);
buffer.writeLE<uint32_t>(0);
EXPECT_EQ(std::string("\0\0\0\0", 4), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeLE<uint32_t>(1);
EXPECT_EQ(std::string("\x1\0\0\0", 4), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeLE<uint32_t>(
static_cast<uint32_t>(std::numeric_limits<int32_t>::max()) + 1);
EXPECT_EQ(std::string("\0\0\0\x80", 4), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeLE<uint32_t>(std::numeric_limits<uint32_t>::max());
EXPECT_EQ("\xFF\xFF\xFF\xFF", out);
}
}
TEST(StringWriterTest, WriteLEI64) {
{
std::string out;
StringWriter buffer(out);
buffer.writeLE<int64_t>(std::numeric_limits<int64_t>::min());
EXPECT_EQ(std::string("\0\0\0\0\0\0\0\x80", 8), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeLE<int64_t>(1);
EXPECT_EQ(std::string("\x1\0\0\0\0\0\0\0", 8), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeLE<int64_t>(0);
EXPECT_EQ(std::string("\0\0\0\0\0\0\0\0", 8), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeLE<int64_t>(std::numeric_limits<int64_t>::max());
EXPECT_EQ("\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F", out);
}
}
TEST(StringWriterTest, WriteBEI16) {
{
std::string out;
StringWriter buffer(out);
buffer.writeBE<int16_t>(std::numeric_limits<int16_t>::min());
EXPECT_EQ(std::string("\x80\0", 2), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeBE<int16_t>(0);
EXPECT_EQ(std::string("\0\0", 2), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeBE<int16_t>(1);
EXPECT_EQ(std::string("\0\x1", 2), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeBE<int16_t>(std::numeric_limits<int16_t>::max());
EXPECT_EQ("\x7F\xFF", out);
}
}
TEST(StringWriterTest, WriteBEU16) {
{
std::string out;
StringWriter buffer(out);
buffer.writeBE<uint16_t>(0);
EXPECT_EQ(std::string("\0\0", 2), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeBE<uint16_t>(1);
EXPECT_EQ(std::string("\0\x1", 2), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeBE<uint16_t>(
static_cast<uint16_t>(std::numeric_limits<int16_t>::max()) + 1);
EXPECT_EQ(std::string("\x80\0", 2), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeBE<uint16_t>(std::numeric_limits<uint16_t>::max());
EXPECT_EQ("\xFF\xFF", out);
}
}
TEST(StringWriterTest, WriteBEI32) {
{
std::string out;
StringWriter buffer(out);
buffer.writeBE<int32_t>(std::numeric_limits<int32_t>::min());
EXPECT_EQ(std::string("\x80\0\0\0", 4), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeBE<int32_t>(0);
EXPECT_EQ(std::string("\0\0\0\0", 4), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeBE<int32_t>(1);
EXPECT_EQ(std::string("\0\0\0\x1", 4), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeBE<int32_t>(std::numeric_limits<int32_t>::max());
EXPECT_EQ("\x7F\xFF\xFF\xFF", out);
}
}
TEST(StringWriterTest, WriteBEU32) {
{
std::string out;
StringWriter buffer(out);
buffer.writeBE<uint32_t>(0);
EXPECT_EQ(std::string("\0\0\0\0", 4), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeBE<uint32_t>(1);
EXPECT_EQ(std::string("\0\0\0\x1", 4), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeBE<uint32_t>(
static_cast<uint32_t>(std::numeric_limits<int32_t>::max()) + 1);
EXPECT_EQ(std::string("\x80\0\0\0", 4), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeBE<uint32_t>(std::numeric_limits<uint32_t>::max());
EXPECT_EQ("\xFF\xFF\xFF\xFF", out);
}
}
TEST(StringWriterTest, WriteBEI64) {
{
std::string out;
StringWriter buffer(out);
buffer.writeBE<int64_t>(std::numeric_limits<int64_t>::min());
EXPECT_EQ(std::string("\x80\0\0\0\0\0\0\0\0", 8), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeBE<int64_t>(1);
EXPECT_EQ(std::string("\0\0\0\0\0\0\0\x1", 8), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeBE<int64_t>(0);
EXPECT_EQ(std::string("\0\0\0\0\0\0\0\0", 8), out);
}
{
std::string out;
StringWriter buffer(out);
buffer.writeBE<int64_t>(std::numeric_limits<int64_t>::max());
EXPECT_EQ("\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF", out);
}
}
} // namespace Hessian2