subscript.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. // ArduinoJson - arduinojson.org
  2. // Copyright Benoit Blanchon 2014-2018
  3. // MIT License
  4. #include <ArduinoJson.h>
  5. #include <catch.hpp>
  6. TEST_CASE("JsonVariant::operator[]") {
  7. SECTION("Array") {
  8. DynamicJsonDocument doc;
  9. JsonArray& array = doc.to<JsonArray>();
  10. array.add("element at index 0");
  11. array.add("element at index 1");
  12. JsonVariant var = array;
  13. REQUIRE(2 == var.size());
  14. REQUIRE(std::string("element at index 0") == var[0]);
  15. REQUIRE(std::string("element at index 1") == var[1]);
  16. REQUIRE(std::string("element at index 0") ==
  17. var[static_cast<unsigned char>(0)]); // issue #381
  18. REQUIRE_FALSE(var[666].success());
  19. REQUIRE_FALSE(var[3].success());
  20. REQUIRE_FALSE(var["0"].success());
  21. }
  22. SECTION("Object") {
  23. DynamicJsonDocument doc;
  24. JsonObject& object = doc.to<JsonObject>();
  25. object["a"] = "element at key \"a\"";
  26. object["b"] = "element at key \"b\"";
  27. JsonVariant var = object;
  28. REQUIRE(2 == var.size());
  29. REQUIRE(std::string("element at key \"a\"") == var["a"]);
  30. REQUIRE(std::string("element at key \"b\"") == var["b"]);
  31. REQUIRE_FALSE(var["c"].success());
  32. REQUIRE_FALSE(var[0].success());
  33. }
  34. SECTION("Undefined") {
  35. JsonVariant var = JsonVariant();
  36. REQUIRE(0 == var.size());
  37. REQUIRE_FALSE(var["0"].success());
  38. REQUIRE_FALSE(var[0].success());
  39. }
  40. SECTION("String") {
  41. JsonVariant var = "hello world";
  42. REQUIRE(0 == var.size());
  43. REQUIRE_FALSE(var["0"].success());
  44. REQUIRE_FALSE(var[0].success());
  45. }
  46. SECTION("ObjectSetValue") {
  47. DynamicJsonDocument doc;
  48. JsonObject& obj = doc.to<JsonObject>();
  49. JsonVariant var = obj;
  50. var["hello"] = "world";
  51. REQUIRE(1 == var.size());
  52. REQUIRE(std::string("world") == var["hello"]);
  53. }
  54. SECTION("ArraySetValue") {
  55. DynamicJsonDocument doc;
  56. JsonArray& arr = doc.to<JsonArray>();
  57. arr.add("hello");
  58. JsonVariant var = arr;
  59. var[0] = "world";
  60. REQUIRE(1 == var.size());
  61. REQUIRE(std::string("world") == var[0]);
  62. }
  63. SECTION("NestedObjectSetValue") {
  64. DynamicJsonDocument doc;
  65. deserializeJson(doc, "[{}]");
  66. JsonVariant var = doc.as<JsonVariant>();
  67. var[0]["hello"] = "world";
  68. REQUIRE(1 == var.size());
  69. REQUIRE(1 == var[0].size());
  70. REQUIRE(std::string("world") == var[0]["hello"]);
  71. }
  72. }