subscript.cpp 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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("The JsonVariant is undefined") {
  8. JsonVariant var = JsonVariant();
  9. REQUIRE(0 == var.size());
  10. REQUIRE(var["0"].isNull());
  11. REQUIRE(var[0].isNull());
  12. }
  13. SECTION("The JsonVariant is a string") {
  14. JsonVariant var = "hello world";
  15. REQUIRE(0 == var.size());
  16. REQUIRE(var["0"].isNull());
  17. REQUIRE(var[0].isNull());
  18. }
  19. SECTION("The JsonVariant is a JsonArray") {
  20. DynamicJsonDocument doc;
  21. JsonArray array = doc.to<JsonArray>();
  22. JsonVariant var = array;
  23. SECTION("get value") {
  24. array.add("element at index 0");
  25. array.add("element at index 1");
  26. REQUIRE(2 == var.size());
  27. REQUIRE(std::string("element at index 0") == var[0]);
  28. REQUIRE(std::string("element at index 1") == var[1]);
  29. REQUIRE(std::string("element at index 0") ==
  30. var[static_cast<unsigned char>(0)]); // issue #381
  31. REQUIRE(var[666].isNull());
  32. REQUIRE(var[3].isNull());
  33. REQUIRE(var["0"].isNull());
  34. }
  35. SECTION("set value") {
  36. array.add("hello");
  37. var[0] = "world";
  38. REQUIRE(1 == var.size());
  39. REQUIRE(std::string("world") == var[0]);
  40. }
  41. SECTION("set value in a nested object") {
  42. array.createNestedObject();
  43. var[0]["hello"] = "world";
  44. REQUIRE(1 == var.size());
  45. REQUIRE(1 == var[0].size());
  46. REQUIRE(std::string("world") == var[0]["hello"]);
  47. }
  48. }
  49. SECTION("The JsonVariant is a JsonObject") {
  50. DynamicJsonDocument doc;
  51. JsonObject object = doc.to<JsonObject>();
  52. JsonVariant var = object;
  53. SECTION("get value") {
  54. object["a"] = "element at key \"a\"";
  55. object["b"] = "element at key \"b\"";
  56. REQUIRE(2 == var.size());
  57. REQUIRE(std::string("element at key \"a\"") == var["a"]);
  58. REQUIRE(std::string("element at key \"b\"") == var["b"]);
  59. REQUIRE(var["c"].isNull());
  60. REQUIRE(var[0].isNull());
  61. }
  62. SECTION("set value, key is a const char*") {
  63. var["hello"] = "world";
  64. REQUIRE(1 == var.size());
  65. REQUIRE(std::string("world") == var["hello"]);
  66. }
  67. SECTION("set value, key is a char[]") {
  68. char key[] = "hello";
  69. var[key] = "world";
  70. key[0] = '!'; // make sure the key is duplicated
  71. REQUIRE(1 == var.size());
  72. REQUIRE(std::string("world") == var["hello"]);
  73. }
  74. }
  75. }