From b0a68f540fc91bf2a7b9aa61c4a3c538d8cf3081 Mon Sep 17 00:00:00 2001 From: Niels Lohmann Date: Sat, 27 Jan 2018 18:37:55 +0100 Subject: [PATCH] :white_check_mark: added roundtrip tests for UBJSON --- .../json_roundtrip/roundtrip01.json.ubjson | 1 + .../json_roundtrip/roundtrip02.json.ubjson | 1 + .../json_roundtrip/roundtrip03.json.ubjson | 1 + .../json_roundtrip/roundtrip04.json.ubjson | Bin 0 -> 4 bytes .../json_roundtrip/roundtrip05.json.ubjson | 1 + .../json_roundtrip/roundtrip06.json.ubjson | 1 + .../json_roundtrip/roundtrip07.json.ubjson | 1 + .../json_roundtrip/roundtrip08.json.ubjson | Bin 0 -> 6 bytes .../json_roundtrip/roundtrip09.json.ubjson | 1 + .../json_roundtrip/roundtrip10.json.ubjson | 1 + .../json_roundtrip/roundtrip11.json.ubjson | 1 + .../json_roundtrip/roundtrip12.json.ubjson | Bin 0 -> 7 bytes .../json_roundtrip/roundtrip13.json.ubjson | 1 + .../json_roundtrip/roundtrip14.json.ubjson | Bin 0 -> 11 bytes .../json_roundtrip/roundtrip15.json.ubjson | 1 + .../json_roundtrip/roundtrip16.json.ubjson | 1 + .../json_roundtrip/roundtrip17.json.ubjson | Bin 0 -> 11 bytes .../json_roundtrip/roundtrip18.json.ubjson | 1 + .../json_roundtrip/roundtrip19.json.ubjson | 1 + .../json_roundtrip/roundtrip20.json.ubjson | Bin 0 -> 11 bytes .../json_roundtrip/roundtrip21.json.ubjson | Bin 0 -> 11 bytes .../json_roundtrip/roundtrip22.json.ubjson | 1 + .../json_roundtrip/roundtrip23.json.ubjson | 1 + .../json_roundtrip/roundtrip24.json.ubjson | Bin 0 -> 11 bytes .../json_roundtrip/roundtrip25.json.ubjson | Bin 0 -> 11 bytes .../json_roundtrip/roundtrip26.json.ubjson | Bin 0 -> 11 bytes .../json_roundtrip/roundtrip27.json.ubjson | 1 + .../json_roundtrip/roundtrip28.json.ubjson | Bin 0 -> 11 bytes .../json_roundtrip/roundtrip29.json.ubjson | Bin 0 -> 11 bytes .../json_roundtrip/roundtrip30.json.ubjson | 1 + .../json_roundtrip/roundtrip31.json.ubjson | 1 + .../json_roundtrip/roundtrip32.json.ubjson | 1 + test/src/unit-ubjson.cpp | 103 ++++++++++++++++++ 33 files changed, 123 insertions(+) create mode 100644 test/data/json_roundtrip/roundtrip01.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip02.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip03.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip04.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip05.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip06.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip07.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip08.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip09.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip10.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip11.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip12.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip13.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip14.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip15.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip16.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip17.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip18.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip19.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip20.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip21.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip22.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip23.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip24.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip25.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip26.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip27.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip28.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip29.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip30.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip31.json.ubjson create mode 100644 test/data/json_roundtrip/roundtrip32.json.ubjson diff --git a/test/data/json_roundtrip/roundtrip01.json.ubjson b/test/data/json_roundtrip/roundtrip01.json.ubjson new file mode 100644 index 00000000..b9f6852d --- /dev/null +++ b/test/data/json_roundtrip/roundtrip01.json.ubjson @@ -0,0 +1 @@ +[Z] \ No newline at end of file diff --git a/test/data/json_roundtrip/roundtrip02.json.ubjson b/test/data/json_roundtrip/roundtrip02.json.ubjson new file mode 100644 index 00000000..f9ca78f5 --- /dev/null +++ b/test/data/json_roundtrip/roundtrip02.json.ubjson @@ -0,0 +1 @@ +[T] \ No newline at end of file diff --git a/test/data/json_roundtrip/roundtrip03.json.ubjson b/test/data/json_roundtrip/roundtrip03.json.ubjson new file mode 100644 index 00000000..e454e6ae --- /dev/null +++ b/test/data/json_roundtrip/roundtrip03.json.ubjson @@ -0,0 +1 @@ +[F] \ No newline at end of file diff --git a/test/data/json_roundtrip/roundtrip04.json.ubjson b/test/data/json_roundtrip/roundtrip04.json.ubjson new file mode 100644 index 0000000000000000000000000000000000000000..150ad07d9bab62c4bae91b5a57bfa46c34e32035 GIT binary patch literal 4 Lcma#fWQYX-0|)^k literal 0 HcmV?d00001 diff --git a/test/data/json_roundtrip/roundtrip05.json.ubjson b/test/data/json_roundtrip/roundtrip05.json.ubjson new file mode 100644 index 00000000..8a3655bf --- /dev/null +++ b/test/data/json_roundtrip/roundtrip05.json.ubjson @@ -0,0 +1 @@ +[Sifoo] \ No newline at end of file diff --git a/test/data/json_roundtrip/roundtrip06.json.ubjson b/test/data/json_roundtrip/roundtrip06.json.ubjson new file mode 100644 index 00000000..0637a088 --- /dev/null +++ b/test/data/json_roundtrip/roundtrip06.json.ubjson @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/data/json_roundtrip/roundtrip07.json.ubjson b/test/data/json_roundtrip/roundtrip07.json.ubjson new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/test/data/json_roundtrip/roundtrip07.json.ubjson @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/test/data/json_roundtrip/roundtrip08.json.ubjson b/test/data/json_roundtrip/roundtrip08.json.ubjson new file mode 100644 index 0000000000000000000000000000000000000000..1274f060f904a87ef83350e7523a9fa111d942cc GIT binary patch literal 6 Ncma#fWXNQU1po!l0gM0u literal 0 HcmV?d00001 diff --git a/test/data/json_roundtrip/roundtrip09.json.ubjson b/test/data/json_roundtrip/roundtrip09.json.ubjson new file mode 100644 index 00000000..8f0d59cf --- /dev/null +++ b/test/data/json_roundtrip/roundtrip09.json.ubjson @@ -0,0 +1 @@ +{ifooSibar} \ No newline at end of file diff --git a/test/data/json_roundtrip/roundtrip10.json.ubjson b/test/data/json_roundtrip/roundtrip10.json.ubjson new file mode 100644 index 00000000..116f7ca4 --- /dev/null +++ b/test/data/json_roundtrip/roundtrip10.json.ubjson @@ -0,0 +1 @@ +{iaZifooSibar} \ No newline at end of file diff --git a/test/data/json_roundtrip/roundtrip11.json.ubjson b/test/data/json_roundtrip/roundtrip11.json.ubjson new file mode 100644 index 00000000..20177536 --- /dev/null +++ b/test/data/json_roundtrip/roundtrip11.json.ubjson @@ -0,0 +1 @@ +[iÿ] \ No newline at end of file diff --git a/test/data/json_roundtrip/roundtrip12.json.ubjson b/test/data/json_roundtrip/roundtrip12.json.ubjson new file mode 100644 index 0000000000000000000000000000000000000000..1a39d1b1e3084c3a8797d51f0456802cadbd68d8 GIT binary patch literal 7 Ocma#fX<%Srhy?%#=>eqx literal 0 HcmV?d00001 diff --git a/test/data/json_roundtrip/roundtrip13.json.ubjson b/test/data/json_roundtrip/roundtrip13.json.ubjson new file mode 100644 index 00000000..d1b43667 --- /dev/null +++ b/test/data/json_roundtrip/roundtrip13.json.ubjson @@ -0,0 +1 @@ +[LîÝï ‚~ë] \ No newline at end of file diff --git a/test/data/json_roundtrip/roundtrip14.json.ubjson b/test/data/json_roundtrip/roundtrip14.json.ubjson new file mode 100644 index 0000000000000000000000000000000000000000..65a415a07f4f6e80af5ac956ff1a27e2d283bfc8 GIT binary patch literal 11 Ncma#{X<&eWSO5#j0fhhn literal 0 HcmV?d00001 diff --git a/test/data/json_roundtrip/roundtrip15.json.ubjson b/test/data/json_roundtrip/roundtrip15.json.ubjson new file mode 100644 index 00000000..cd579001 --- /dev/null +++ b/test/data/json_roundtrip/roundtrip15.json.ubjson @@ -0,0 +1 @@ +[i] \ No newline at end of file diff --git a/test/data/json_roundtrip/roundtrip16.json.ubjson b/test/data/json_roundtrip/roundtrip16.json.ubjson new file mode 100644 index 00000000..d3494df1 --- /dev/null +++ b/test/data/json_roundtrip/roundtrip16.json.ubjson @@ -0,0 +1 @@ +[lÿÿÿ] \ No newline at end of file diff --git a/test/data/json_roundtrip/roundtrip17.json.ubjson b/test/data/json_roundtrip/roundtrip17.json.ubjson new file mode 100644 index 0000000000000000000000000000000000000000..dbc1b2c1ef2dde8f79b50f3007c3db08732b8d16 GIT binary patch literal 11 Pcma#{VE}^vKoAQ66*~n1 literal 0 HcmV?d00001 diff --git a/test/data/json_roundtrip/roundtrip18.json.ubjson b/test/data/json_roundtrip/roundtrip18.json.ubjson new file mode 100644 index 00000000..2b1778d5 --- /dev/null +++ b/test/data/json_roundtrip/roundtrip18.json.ubjson @@ -0,0 +1 @@ +[L"ô}é] \ No newline at end of file diff --git a/test/data/json_roundtrip/roundtrip19.json.ubjson b/test/data/json_roundtrip/roundtrip19.json.ubjson new file mode 100644 index 00000000..ec62b059 --- /dev/null +++ b/test/data/json_roundtrip/roundtrip19.json.ubjson @@ -0,0 +1 @@ +[Lÿÿÿÿÿÿÿ] \ No newline at end of file diff --git a/test/data/json_roundtrip/roundtrip20.json.ubjson b/test/data/json_roundtrip/roundtrip20.json.ubjson new file mode 100644 index 0000000000000000000000000000000000000000..b2aab5209c1e930ee6f0e2c6377b8bd675211548 GIT binary patch literal 11 Mcma!cVSs{I00#L0{Qv*} literal 0 HcmV?d00001 diff --git a/test/data/json_roundtrip/roundtrip21.json.ubjson b/test/data/json_roundtrip/roundtrip21.json.ubjson new file mode 100644 index 0000000000000000000000000000000000000000..9c9eefc2f04ffa43b7996da5f746ad4e2654a26a GIT binary patch literal 11 Ncma!cX<&eWSO5!o0et`f literal 0 HcmV?d00001 diff --git a/test/data/json_roundtrip/roundtrip22.json.ubjson b/test/data/json_roundtrip/roundtrip22.json.ubjson new file mode 100644 index 00000000..ef313496 --- /dev/null +++ b/test/data/json_roundtrip/roundtrip22.json.ubjson @@ -0,0 +1 @@ +[D?óÀƒn—] \ No newline at end of file diff --git a/test/data/json_roundtrip/roundtrip23.json.ubjson b/test/data/json_roundtrip/roundtrip23.json.ubjson new file mode 100644 index 00000000..14ee7f2d --- /dev/null +++ b/test/data/json_roundtrip/roundtrip23.json.ubjson @@ -0,0 +1 @@ +[D¿óÀƒn—] \ No newline at end of file diff --git a/test/data/json_roundtrip/roundtrip24.json.ubjson b/test/data/json_roundtrip/roundtrip24.json.ubjson new file mode 100644 index 0000000000000000000000000000000000000000..32965e3f20862ac1a59fc1dfa451d7687ec858cd GIT binary patch literal 11 Ncma!cVSoU}SO5n50R8{~ literal 0 HcmV?d00001 diff --git a/test/data/json_roundtrip/roundtrip25.json.ubjson b/test/data/json_roundtrip/roundtrip25.json.ubjson new file mode 100644 index 0000000000000000000000000000000000000000..7361cea368df726c77118e01710c3a30cdec416b GIT binary patch literal 11 Ocma!cVc`D{2C)DlRtE+E literal 0 HcmV?d00001 diff --git a/test/data/json_roundtrip/roundtrip26.json.ubjson b/test/data/json_roundtrip/roundtrip26.json.ubjson new file mode 100644 index 0000000000000000000000000000000000000000..ef476931914b0164abdb0cf1fdf1b05aa00f047c GIT binary patch literal 11 Ocma!cVGv*dgIE9uc>xUo literal 0 HcmV?d00001 diff --git a/test/data/json_roundtrip/roundtrip27.json.ubjson b/test/data/json_roundtrip/roundtrip27.json.ubjson new file mode 100644 index 00000000..5b5ddd56 --- /dev/null +++ b/test/data/json_roundtrip/roundtrip27.json.ubjson @@ -0,0 +1 @@ +[Dïÿÿÿÿÿÿ] \ No newline at end of file diff --git a/test/data/json_roundtrip/roundtrip28.json.ubjson b/test/data/json_roundtrip/roundtrip28.json.ubjson new file mode 100644 index 0000000000000000000000000000000000000000..32965e3f20862ac1a59fc1dfa451d7687ec858cd GIT binary patch literal 11 Ncma!cVSoU}SO5n50R8{~ literal 0 HcmV?d00001 diff --git a/test/data/json_roundtrip/roundtrip29.json.ubjson b/test/data/json_roundtrip/roundtrip29.json.ubjson new file mode 100644 index 0000000000000000000000000000000000000000..82ab8dd9fcd42df8ff508e88658214321abaf599 GIT binary patch literal 11 Pcma!cVc`D{0)JxxB2otg literal 0 HcmV?d00001 diff --git a/test/data/json_roundtrip/roundtrip30.json.ubjson b/test/data/json_roundtrip/roundtrip30.json.ubjson new file mode 100644 index 00000000..23f39bcc --- /dev/null +++ b/test/data/json_roundtrip/roundtrip30.json.ubjson @@ -0,0 +1 @@ +[D9¹ ãõöÂ] \ No newline at end of file diff --git a/test/data/json_roundtrip/roundtrip31.json.ubjson b/test/data/json_roundtrip/roundtrip31.json.ubjson new file mode 100644 index 00000000..cc714de1 --- /dev/null +++ b/test/data/json_roundtrip/roundtrip31.json.ubjson @@ -0,0 +1 @@ +[DF/)Äî±Uå] \ No newline at end of file diff --git a/test/data/json_roundtrip/roundtrip32.json.ubjson b/test/data/json_roundtrip/roundtrip32.json.ubjson new file mode 100644 index 00000000..cc714de1 --- /dev/null +++ b/test/data/json_roundtrip/roundtrip32.json.ubjson @@ -0,0 +1 @@ +[DF/)Äî±Uå] \ No newline at end of file diff --git a/test/src/unit-ubjson.cpp b/test/src/unit-ubjson.cpp index a8bfe691..a1830d62 100644 --- a/test/src/unit-ubjson.cpp +++ b/test/src/unit-ubjson.cpp @@ -2105,3 +2105,106 @@ TEST_CASE("all first bytes", "[!throws]") } } +TEST_CASE("UBJSON roundtrips", "[hide]") +{ + SECTION("input from self-generated UBJSON files") + { + for (std::string filename : + { + "test/data/json_roundtrip/roundtrip01.json", + "test/data/json_roundtrip/roundtrip02.json", + "test/data/json_roundtrip/roundtrip03.json", + "test/data/json_roundtrip/roundtrip04.json", + "test/data/json_roundtrip/roundtrip05.json", + "test/data/json_roundtrip/roundtrip06.json", + "test/data/json_roundtrip/roundtrip07.json", + "test/data/json_roundtrip/roundtrip08.json", + "test/data/json_roundtrip/roundtrip09.json", + "test/data/json_roundtrip/roundtrip10.json", + "test/data/json_roundtrip/roundtrip11.json", + "test/data/json_roundtrip/roundtrip12.json", + "test/data/json_roundtrip/roundtrip13.json", + "test/data/json_roundtrip/roundtrip14.json", + "test/data/json_roundtrip/roundtrip15.json", + "test/data/json_roundtrip/roundtrip16.json", + "test/data/json_roundtrip/roundtrip17.json", + "test/data/json_roundtrip/roundtrip18.json", + "test/data/json_roundtrip/roundtrip19.json", + "test/data/json_roundtrip/roundtrip20.json", + "test/data/json_roundtrip/roundtrip21.json", + "test/data/json_roundtrip/roundtrip22.json", + "test/data/json_roundtrip/roundtrip23.json", + "test/data/json_roundtrip/roundtrip24.json", + "test/data/json_roundtrip/roundtrip25.json", + "test/data/json_roundtrip/roundtrip26.json", + "test/data/json_roundtrip/roundtrip27.json", + "test/data/json_roundtrip/roundtrip28.json", + "test/data/json_roundtrip/roundtrip29.json", + "test/data/json_roundtrip/roundtrip30.json", + "test/data/json_roundtrip/roundtrip31.json", + "test/data/json_roundtrip/roundtrip32.json" + }) + { + CAPTURE(filename); + + // parse JSON file + std::ifstream f_json(filename); + json j1 = json::parse(f_json); + + SECTION("std::vector") + { + // parse MessagePack file + std::ifstream f_ubjson(filename + ".ubjson", std::ios::binary); + std::vector packed( + (std::istreambuf_iterator(f_ubjson)), + std::istreambuf_iterator()); + json j2; + CHECK_NOTHROW(j2 = json::from_ubjson(packed)); + + // compare parsed JSON values + CHECK(j1 == j2); + } + + SECTION("std::ifstream") + { + // parse MessagePack file + std::ifstream f_ubjson(filename + ".ubjson", std::ios::binary); + json j2; + CHECK_NOTHROW(j2 = json::from_ubjson(f_ubjson)); + + // compare parsed JSON values + CHECK(j1 == j2); + } + + SECTION("uint8_t* and size") + { + // parse MessagePack file + std::ifstream f_ubjson(filename + ".ubjson", std::ios::binary); + std::vector packed( + (std::istreambuf_iterator(f_ubjson)), + std::istreambuf_iterator()); + json j2; + CHECK_NOTHROW(j2 = json::from_ubjson({packed.data(), packed.size()})); + + // compare parsed JSON values + CHECK(j1 == j2); + } + + SECTION("output to output adapters") + { + // parse MessagePack file + std::ifstream f_ubjson(filename + ".ubjson", std::ios::binary); + std::vector packed( + (std::istreambuf_iterator(f_ubjson)), + std::istreambuf_iterator()); + + SECTION("std::vector") + { + std::vector vec; + json::to_ubjson(j1, vec); + CHECK(vec == packed); + } + } + } + } +}