hessian2/basic_codec/date_codec_unittests.cc (122 lines of code) (raw):
#include <iostream>
#include <type_traits>
#include "gtest/gtest.h"
#include "hessian2/basic_codec/date_codec.hpp"
#include "hessian2/test_framework/decoder_test_framework.h"
#include "hessian2/test_framework/encoder_test_framework.h"
namespace Hessian2 {
class DateCodecTest : public testing::Test {
public:
template <typename T>
void decodeSucc(absl::string_view data, T out, size_t size) {
Hessian2::Decoder decoder(data);
auto output = decoder.decode<T>();
EXPECT_EQ(out, *output);
EXPECT_EQ(size, decoder.offset());
}
template <typename T>
void decodeFail(absl::string_view data) {
Hessian2::Decoder decoder(data);
auto output = decoder.decode<T>();
EXPECT_EQ(nullptr, output);
}
template <typename T>
void encodeSucc(T data, size_t size, std::string expected_data = "") {
std::string res;
Hessian2::Encoder encoder(res);
encoder.encode<T>(data);
if (!expected_data.empty()) {
EXPECT_EQ(expected_data, res);
}
decodeSucc<T>(res, data, size);
}
template <typename T>
void expectedEncode(T data) {
std::string res;
Hessian2::Encoder encoder(res);
encoder.encode<T>(data);
Hessian2::Decoder decoder(res);
auto value = decoder.decode<T>();
EXPECT_EQ(*value, data);
}
};
TEST_F(DateCodecTest, decode) {
{
expectedEncode(std::chrono::milliseconds(894621091000));
expectedEncode(std::chrono::seconds(894621091));
expectedEncode(std::chrono::hours(89462));
}
// Insufficient Data
{
std::string data{0x4a, 0x00, 0x00, 0x00};
decodeFail<std::chrono::milliseconds>(data);
}
{
std::string data{0x4b, 0x00, 0x00, 0x00};
decodeFail<std::chrono::milliseconds>(data);
}
}
TEST_F(TestDecoderFramework, DecoderJavaTestCaseForDate) {
{
EXPECT_TRUE(Decode<std::chrono::milliseconds>(
"replyDate_0", std::chrono::milliseconds(0)));
}
{
EXPECT_TRUE(
Decode<std::chrono::minutes>("replyDate_0", std::chrono::minutes(0)));
}
{
EXPECT_TRUE(Decode<std::chrono::milliseconds>(
"replyDate_1", std::chrono::milliseconds(894621091000)));
}
{
EXPECT_TRUE(Decode<std::chrono::seconds>("replyDate_1",
std::chrono::seconds(894621091)));
}
{
EXPECT_TRUE(Decode<std::chrono::minutes>("replyDate_1",
std::chrono::minutes(14910351)));
}
{
EXPECT_TRUE(Decode<std::chrono::milliseconds>(
"replyDate_2", std::chrono::milliseconds(894621060000)));
}
{
EXPECT_TRUE(Decode<std::chrono::seconds>("replyDate_2",
std::chrono::seconds(894621060)));
}
{
EXPECT_TRUE(Decode<std::chrono::minutes>("replyDate_2",
std::chrono::minutes(14910351)));
}
}
TEST_F(TestEncoderFramework, EncoderJavaTestCaseForDate) {
{
EXPECT_TRUE(Encode<std::chrono::milliseconds>(
"argDate_0", std::chrono::milliseconds(0)));
}
{
EXPECT_TRUE(
Encode<std::chrono::minutes>("argDate_0", std::chrono::minutes(0)));
}
{
EXPECT_TRUE(Encode<std::chrono::milliseconds>(
"argDate_1", std::chrono::milliseconds(894621091000)));
}
{
EXPECT_TRUE(Encode<std::chrono::seconds>("argDate_1",
std::chrono::seconds(894621091)));
}
{
EXPECT_TRUE(Encode<std::chrono::milliseconds>(
"argDate_2", std::chrono::milliseconds(894621060000)));
}
{
EXPECT_TRUE(Encode<std::chrono::seconds>("argDate_2",
std::chrono::seconds(894621060)));
}
{
EXPECT_TRUE(Encode<std::chrono::minutes>("argDate_2",
std::chrono::minutes(14910351)));
}
}
} // namespace Hessian2