summaryrefslogtreecommitdiff
path: root/modules/codec-json/tests/codec-json.cpp
diff options
context:
space:
mode:
authorClaudius "keldu" Holeksa <mail@keldu.de>2026-11-07 14:57:56 +0100
committerClaudius "keldu" Holeksa <mail@keldu.de>2026-11-07 14:57:56 +0100
commit55446448c0cd836241e8731d6af5091f0a82a14f (patch)
tree635f8b503014f21558e42fe1cd7f851546e0cf9d /modules/codec-json/tests/codec-json.cpp
parent97ae1a8f23074fea3784a008921c5d9fc3c1e8fb (diff)
downloadforstio-forstio-55446448c0cd836241e8731d6af5091f0a82a14f.tar.gz
Reintroduced non strict mode
Diffstat (limited to 'modules/codec-json/tests/codec-json.cpp')
-rw-r--r--modules/codec-json/tests/codec-json.cpp50
1 files changed, 50 insertions, 0 deletions
diff --git a/modules/codec-json/tests/codec-json.cpp b/modules/codec-json/tests/codec-json.cpp
index ab33f5a..a87b237 100644
--- a/modules/codec-json/tests/codec-json.cpp
+++ b/modules/codec-json/tests/codec-json.cpp
@@ -323,6 +323,56 @@ SAW_TEST("Struct read and write"){
SAW_EXPECT(native.get<"bar">() == "baz", "Invalid value for bar");
}
+SAW_TEST("Struct read with missing member"){
+ using namespace saw;
+ data<schema::TestStruct, encode::Native> native;
+ data<schema::TestStruct, encode::Json> json{"{\"bar\":\"baz\"}"};
+
+ codec<schema::TestStruct, encode::Json> json_codec;
+
+ error_or<void> eov = json_codec.decode(json, native);
+ SAW_EXPECT(eov.is_value(), "Decoding error");
+ SAW_EXPECT(native.get<"foo">().get() == 0, "Missing member foo should keep its default value");
+ SAW_EXPECT(native.get<"bar">() == "baz", "Invalid value for bar");
+}
+
+SAW_TEST("Struct read with missing member in strict mode"){
+ using namespace saw;
+ data<schema::TestStruct, encode::Native> native;
+ data<schema::TestStruct, encode::Json> json{"{\"bar\":\"baz\"}"};
+
+ codec_config<encode::Json> json_config;
+ json_config.strict = true;
+ codec<schema::TestStruct, encode::Json> json_codec{json_config};
+
+ error_or<void> eov = json_codec.decode(json, native);
+ SAW_EXPECT(eov.is_error(), "Strict decoding should reject incomplete structs");
+}
+
+SAW_TEST("Empty Struct read"){
+ using namespace saw;
+ data<schema::TestStruct, encode::Native> native;
+ data<schema::TestStruct, encode::Json> json{"{}"};
+
+ codec<schema::TestStruct, encode::Json> json_codec;
+
+ error_or<void> eov = json_codec.decode(json, native);
+ SAW_EXPECT(eov.is_value(), "Decoding error");
+ SAW_EXPECT(native.get<"foo">().get() == 0, "Missing member foo should keep its default value");
+ SAW_EXPECT(native.get<"bar">() == "", "Missing member bar should keep its default value");
+}
+
+SAW_TEST("Struct read with unknown member"){
+ using namespace saw;
+ data<schema::TestStruct, encode::Native> native;
+ data<schema::TestStruct, encode::Json> json{"{\"foo\":5,\"baz\":3,\"bar\":\"baz\"}"};
+
+ codec<schema::TestStruct, encode::Json> json_codec;
+
+ error_or<void> eov = json_codec.decode(json, native);
+ SAW_EXPECT(eov.is_error(), "Unknown members are not supported");
+}
+
SAW_TEST("Array Struct Empty read and write"){
using namespace saw;
data<schema::TestArrayStruct, encode::Native> native{0u};