adding better json tests and encoding

This commit is contained in:
keldu.magnus 2021-02-28 12:49:32 +01:00
parent 627b5bca33
commit 880f1cd147
2 changed files with 37 additions and 4 deletions

View File

@ -45,6 +45,19 @@ template <> struct JsonEncodeImpl<MessagePrimitive<std::string>> {
}
};
template <> struct JsonEncodeImpl<MessagePrimitive<bool>> {
static Error encode(typename MessagePrimitive<bool>::Reader data,
Buffer &buffer) {
std::string str = data.get() ? "true" : "false";
Error error = buffer.push(
*reinterpret_cast<const uint8_t *>(str.data()), str.size());
if (error.failed()) {
return error;
}
return noError();
}
};
template <typename... T> struct JsonEncodeImpl<MessageList<T...>> {
template <size_t i = 0>
static typename std::enable_if<i == sizeof...(T), Error>::type
@ -273,6 +286,21 @@ template <typename T> struct JsonDecodeImpl<MessagePrimitive<T>> {
// MessagePrimitive<T>::Builder){}
static Error decode(typename MessagePrimitive<T>::Builder,
DynamicMessage::DynamicReader) {
// This is also a valid null implementation :)
return noError();
}
};
template <> struct JsonDecodeImpl<MessagePrimitive<bool>> {
// static void decode(BufferView view, typename
// MessagePrimitive<T>::Builder){}
static Error decode(typename MessagePrimitive<bool>::Builder data,
DynamicMessage::DynamicReader reader) {
if (reader.type() != DynamicMessage::Type::Bool) {
return criticalError("Not a boolean");
}
DynamicMessageBool::Reader b_reader = reader.as<DynamicMessageBool>();
data.set(b_reader.get());
return noError();
}
};

View File

@ -40,7 +40,8 @@ GIN_TEST("JSON List Encoding"){
typedef MessageStruct<
MessageStructMember<MessagePrimitive<uint32_t>, decltype("test_uint"_t)>,
MessageStructMember<MessagePrimitive<std::string>, decltype("test_string"_t)>,
MessageStructMember<MessagePrimitive<std::string>, decltype("test_name"_t)>
MessageStructMember<MessagePrimitive<std::string>, decltype("test_name"_t)>,
MessageStructMember<MessagePrimitive<bool>, decltype("test_bool"_t)>
> TestStruct;
GIN_TEST("JSON Struct Encoding"){
@ -61,7 +62,7 @@ GIN_TEST("JSON Struct Encoding"){
RingBuffer temp_buffer;
codec.encode<TestStruct>(root.asReader(), temp_buffer);
std::string expected_result{"{\"test_uint\":23,\"test_string\":\"foo\",\"test_name\":\"test_name\"}"};
std::string expected_result{"{\"test_uint\":23,\"test_string\":\"foo\",\"test_name\":\"test_name\",\"test_bool\":false}"};
std::string tmp_string = temp_buffer.toString();
GIN_EXPECT(tmp_string == expected_result, std::string{"Bad encoding:\n"} + tmp_string);
@ -119,7 +120,8 @@ GIN_TEST("JSON Struct Decoding"){
{
"test_string" :"banana" ,
"test_uint" : 5,
"test_name" : "keldu"
"test_name" : "keldu",
"test_bool" : true
})";
auto builder = heapMessageBuilder();
@ -135,6 +137,7 @@ GIN_TEST("JSON Struct Decoding"){
GIN_EXPECT( reader.get<decltype("test_string"_t)>().get() == "banana", "Test String has wrong value" );
GIN_EXPECT( reader.get<decltype("test_uint"_t)>().get() == 5, "Test Unsigned has wrong value" );
GIN_EXPECT( reader.get<decltype("test_name"_t)>().get() == "keldu", "Test Name has wrong value" );
GIN_EXPECT( reader.get<decltype("test_bool"_t)>().get() == true, "Test Bool has wrong value" );
}
typedef MessageStruct<
@ -149,7 +152,8 @@ GIN_TEST("JSON Struct Decoding Two layer"){
"test_struct" :{
"test_string" : "banana",
"test_uint": 40,
"test_name":"HaDiKo"
"test_name":"HaDiKo",
"test_bool" :false
},
"test_uint": 5,
"test_name" : "keldu"
@ -171,6 +175,7 @@ GIN_TEST("JSON Struct Decoding Two layer"){
GIN_EXPECT( inner_reader.get<decltype("test_string"_t)>().get() == "banana", "Test String has wrong value" );
GIN_EXPECT( inner_reader.get<decltype("test_uint"_t)>().get() == 40, "Test Unsigned has wrong value" );
GIN_EXPECT( inner_reader.get<decltype("test_name"_t)>().get() == "HaDiKo", "Test Name has wrong value" );
GIN_EXPECT( inner_reader.get<decltype("test_bool"_t)>().get() == false, "Test Bool has wrong value" );
GIN_EXPECT( reader.get<decltype("test_uint"_t)>().get() == 5, "Test Unsigned has wrong value" );
GIN_EXPECT( reader.get<decltype("test_name"_t)>().get() == "keldu", "Test Name has wrong value" );
}