| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- // ArduinoJson - arduinojson.org
- // Copyright Benoit Blanchon 2014-2023
- // MIT License
- #include <ArduinoJson.h>
- #include <catch.hpp>
- TEST_CASE("JsonBuffer::parseObject()") {
- DynamicJsonBuffer jb;
- SECTION("An empty object") {
- JsonObject& obj = jb.parseObject("{}");
- REQUIRE(obj.success());
- REQUIRE(obj.size() == 0);
- }
- SECTION("Quotes") {
- SECTION("Double quotes") {
- JsonObject& obj = jb.parseObject("{\"key\":\"value\"}");
- REQUIRE(obj.success());
- REQUIRE(obj.size() == 1);
- REQUIRE(obj["key"] == "value");
- }
- SECTION("Single quotes") {
- JsonObject& obj = jb.parseObject("{'key':'value'}");
- REQUIRE(obj.success());
- REQUIRE(obj.size() == 1);
- REQUIRE(obj["key"] == "value");
- }
- SECTION("No quotes") {
- JsonObject& obj = jb.parseObject("{key:value}");
- REQUIRE(obj.success());
- REQUIRE(obj.size() == 1);
- REQUIRE(obj["key"] == "value");
- }
- SECTION("No quotes, allow underscore in key") {
- JsonObject& obj = jb.parseObject("{_k_e_y_:42}");
- REQUIRE(obj.success());
- REQUIRE(obj.size() == 1);
- REQUIRE(obj["_k_e_y_"] == 42);
- }
- }
- SECTION("Spaces") {
- SECTION("Before the key") {
- JsonObject& obj = jb.parseObject("{ \"key\":\"value\"}");
- REQUIRE(obj.success());
- REQUIRE(obj.size() == 1);
- REQUIRE(obj["key"] == "value");
- }
- SECTION("After the key") {
- JsonObject& obj = jb.parseObject("{\"key\" :\"value\"}");
- REQUIRE(obj.success());
- REQUIRE(obj.size() == 1);
- REQUIRE(obj["key"] == "value");
- }
- SECTION("Before the value") {
- JsonObject& obj = jb.parseObject("{\"key\": \"value\"}");
- REQUIRE(obj.success());
- REQUIRE(obj.size() == 1);
- REQUIRE(obj["key"] == "value");
- }
- SECTION("After the value") {
- JsonObject& obj = jb.parseObject("{\"key\":\"value\" }");
- REQUIRE(obj.success());
- REQUIRE(obj.size() == 1);
- REQUIRE(obj["key"] == "value");
- }
- SECTION("Before the colon") {
- JsonObject& obj =
- jb.parseObject("{\"key1\":\"value1\" ,\"key2\":\"value2\"}");
- REQUIRE(obj.success());
- REQUIRE(obj.size() == 2);
- REQUIRE(obj["key1"] == "value1");
- REQUIRE(obj["key2"] == "value2");
- }
- SECTION("After the colon") {
- JsonObject& obj =
- jb.parseObject("{\"key1\":\"value1\" ,\"key2\":\"value2\"}");
- REQUIRE(obj.success());
- REQUIRE(obj.size() == 2);
- REQUIRE(obj["key1"] == "value1");
- REQUIRE(obj["key2"] == "value2");
- }
- }
- SECTION("Values types") {
- SECTION("String") {
- JsonObject& obj =
- jb.parseObject("{\"key1\":\"value1\",\"key2\":\"value2\"}");
- REQUIRE(obj.success());
- REQUIRE(obj.size() == 2);
- REQUIRE(obj["key1"] == "value1");
- REQUIRE(obj["key2"] == "value2");
- }
- SECTION("Integer") {
- JsonObject& obj = jb.parseObject("{\"key1\":42,\"key2\":-42}");
- REQUIRE(obj.success());
- REQUIRE(obj.size() == 2);
- REQUIRE(obj["key1"] == 42);
- REQUIRE(obj["key2"] == -42);
- }
- SECTION("Double") {
- JsonObject& obj = jb.parseObject("{\"key1\":12.345,\"key2\":-7E89}");
- REQUIRE(obj.success());
- REQUIRE(obj.size() == 2);
- REQUIRE(obj["key1"] == 12.345);
- REQUIRE(obj["key2"] == -7E89);
- }
- SECTION("Booleans") {
- JsonObject& obj = jb.parseObject("{\"key1\":true,\"key2\":false}");
- REQUIRE(obj.success());
- REQUIRE(obj.size() == 2);
- REQUIRE(obj["key1"] == true);
- REQUIRE(obj["key2"] == false);
- }
- SECTION("Null") {
- JsonObject& obj = jb.parseObject("{\"key1\":null,\"key2\":null}");
- REQUIRE(obj.success());
- REQUIRE(obj.size() == 2);
- REQUIRE(obj["key1"].as<char*>() == 0);
- REQUIRE(obj["key2"].as<char*>() == 0);
- }
- }
- SECTION("Misc") {
- SECTION("The opening brace is missing") {
- JsonObject& obj = jb.parseObject("}");
- REQUIRE_FALSE(obj.success());
- }
- SECTION("The closing brace is missing") {
- JsonObject& obj = jb.parseObject("{");
- REQUIRE_FALSE(obj.success());
- }
- SECTION("A quoted key without value") {
- JsonObject& obj = jb.parseObject("{\"key\"}");
- REQUIRE_FALSE(obj.success());
- }
- SECTION("A non-quoted key without value") {
- JsonObject& obj = jb.parseObject("{key}");
- REQUIRE_FALSE(obj.success());
- }
- SECTION("A dangling comma") {
- JsonObject& obj = jb.parseObject("{\"key1\":\"value1\",}");
- REQUIRE_FALSE(obj.success());
- REQUIRE(obj.size() == 0);
- }
- SECTION("null as a key") {
- JsonObject& obj = jb.parseObject("null:\"value\"}");
- REQUIRE_FALSE(obj.success());
- }
- }
- }
|