#include #include #include namespace { namespace schema { using namespace saw::schema; using TestTuple = Tuple< String, Int32 >; using TestArray = Array< String >; using TestStruct = Struct< Member, Member >; } SAW_TEST("Int32 write"){ using namespace saw; data native_int; data json_int; native_int.set(44123); codec json_codec; error_or eov = json_codec.encode(native_int, json_int); SAW_EXPECT(eov.is_value(), "Encoding error"); /** * Currently doing this manually. Technically I should convert to std::string for tests */ std::string_view str_v = "44123"; std::string enc_val = convert_to_string(json_int.get_buffer()); SAW_EXPECT( enc_val == str_v, std::string{"Value is not being encoded correctly. Encoded: "} + enc_val ); } SAW_TEST("String write"){ using namespace saw; data nat_str; data json_str; nat_str.set("foo"); codec json_codec; error_or eov = json_codec.encode(nat_str, json_str); SAW_EXPECT(eov.is_value(), "Encoding error"); /** * Currently doing this manually. Technically I should convert to std::string for tests */ std::string_view str_view = "\"foo\""; std::string encoded_value = convert_to_string(json_str.get_buffer()); SAW_EXPECT(encoded_value == str_view, "String not encoded correctly"); } SAW_TEST("Tuple write"){ using namespace saw; data native_tup; data json_tup; auto& nat_zero = native_tup.template get<0>(); auto& nat_one = native_tup.template get<1>(); nat_zero.set("bar"); nat_one.set(34); codec json_codec; error_or eov = json_codec.encode(native_tup, json_tup); SAW_EXPECT(eov.is_value(), "Encoding error"); std::string_view str_v = "[\"bar\",34]"; std::string enc_val = convert_to_string(json_tup.get_buffer()); SAW_EXPECT(enc_val == str_v, std::string{"Tuple not encoded correctly. Encoded: "} + enc_val + std::string{" Expected: "} + std::string{str_v}); } SAW_TEST("Array write"){ using namespace saw; data native{3}; data json; native.at(0).set("foo"); native.at(1).set("bar"); native.at(2).set("baz"); codec json_codec; error_or eov = json_codec.encode(native, json); SAW_EXPECT(eov.is_value(), "Encoding error"); std::string_view str_v = "[\"foo\",\"bar\",\"baz\"]"; std::string enc_val = convert_to_string(json.get_buffer()); SAW_EXPECT(enc_val == str_v, std::string{"Array not encoded correctly. Encoded: "} + enc_val + std::string{" Expected: "} + std::string{str_v}); } SAW_TEST("Struct write"){ using namespace saw; data native; data json; native.get<"foo">().set(5); native.get<"bar">().set("baz"); codec json_codec; error_or eov = json_codec.encode(native, json); SAW_EXPECT(eov.is_value(), "Encoding error"); std::string_view str_v = "{\"foo\":5,\"bar\":\"baz\"}"; std::string enc_val = convert_to_string(json.get_buffer()); SAW_EXPECT(enc_val == str_v, std::string{"Struct not encoded correctly. Encoded: "} + enc_val + std::string{" Expected: "} + std::string{str_v}); } }