subscript.cpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // ArduinoJson - https://arduinojson.org
  2. // Copyright © 2014-2024, Benoit BLANCHON
  3. // MIT License
  4. #include <ArduinoJson.h>
  5. #include <catch.hpp>
  6. #include "Literals.hpp"
  7. TEST_CASE("JsonDocument::operator[]") {
  8. JsonDocument doc;
  9. const JsonDocument& cdoc = doc;
  10. SECTION("object") {
  11. deserializeJson(doc, "{\"hello\":\"world\"}");
  12. SECTION("const char*") {
  13. REQUIRE(doc["hello"] == "world");
  14. REQUIRE(cdoc["hello"] == "world");
  15. }
  16. SECTION("std::string") {
  17. REQUIRE(doc["hello"_s] == "world");
  18. REQUIRE(cdoc["hello"_s] == "world");
  19. }
  20. SECTION("JsonVariant") {
  21. doc["key"] = "hello";
  22. REQUIRE(doc[doc["key"]] == "world");
  23. REQUIRE(cdoc[cdoc["key"]] == "world");
  24. }
  25. SECTION("supports operator|") {
  26. REQUIRE((doc["hello"] | "nope") == "world"_s);
  27. REQUIRE((doc["world"] | "nope") == "nope"_s);
  28. }
  29. }
  30. SECTION("array") {
  31. deserializeJson(doc, "[\"hello\",\"world\"]");
  32. SECTION("int") {
  33. REQUIRE(doc[1] == "world");
  34. REQUIRE(cdoc[1] == "world");
  35. }
  36. SECTION("JsonVariant") {
  37. doc[2] = 1;
  38. REQUIRE(doc[doc[2]] == "world");
  39. REQUIRE(cdoc[doc[2]] == "world");
  40. }
  41. }
  42. }
  43. TEST_CASE("JsonDocument automatically promotes to object") {
  44. JsonDocument doc;
  45. doc["one"]["two"]["three"] = 4;
  46. REQUIRE(doc["one"]["two"]["three"] == 4);
  47. }
  48. TEST_CASE("JsonDocument automatically promotes to array") {
  49. JsonDocument doc;
  50. doc[2] = 2;
  51. REQUIRE(doc.as<std::string>() == "[null,null,2]");
  52. }