copy.cpp 1.9 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::set(JsonVariant)") {
  7. DynamicJsonDocument doc1;
  8. DynamicJsonDocument doc2;
  9. JsonVariant var1 = doc1.to<JsonVariant>();
  10. JsonVariant var2 = doc2.to<JsonVariant>();
  11. SECTION("stores JsonArray by copy") {
  12. JsonArray arr = doc2.to<JsonArray>();
  13. arr.add(42);
  14. var1.set(arr);
  15. arr[0] = 666;
  16. REQUIRE(var1.as<std::string>() == "[42]");
  17. }
  18. SECTION("stores JsonObject by copy") {
  19. JsonObject obj = doc2.to<JsonObject>();
  20. obj["value"] = 42;
  21. var1.set(obj);
  22. obj["value"] = 666;
  23. REQUIRE(var1.as<std::string>() == "{\"value\":42}");
  24. }
  25. SECTION("stores const char* by reference") {
  26. var1.set("hello!!");
  27. var2.set(var1);
  28. REQUIRE(doc1.memoryUsage() == 0);
  29. REQUIRE(doc2.memoryUsage() == 0);
  30. }
  31. SECTION("stores char* by copy") {
  32. char str[] = "hello!!";
  33. var1.set(str);
  34. var2.set(var1);
  35. REQUIRE(doc1.memoryUsage() == 8);
  36. REQUIRE(doc2.memoryUsage() == 8);
  37. }
  38. SECTION("stores std::string by copy") {
  39. var1.set(std::string("hello!!"));
  40. var2.set(var1);
  41. REQUIRE(doc1.memoryUsage() == 8);
  42. REQUIRE(doc2.memoryUsage() == 8);
  43. }
  44. SECTION("stores Serialized<const char*> by reference") {
  45. var1.set(serialized("hello!!", 8));
  46. var2.set(var1);
  47. REQUIRE(doc1.memoryUsage() == 0);
  48. REQUIRE(doc2.memoryUsage() == 0);
  49. }
  50. SECTION("stores Serialized<char*> by copy") {
  51. char str[] = "hello!!";
  52. var1.set(serialized(str, 8));
  53. var2.set(var1);
  54. REQUIRE(doc1.memoryUsage() == 8);
  55. REQUIRE(doc2.memoryUsage() == 8);
  56. }
  57. SECTION("stores Serialized<std::string> by copy") {
  58. var1.set(serialized(std::string("hello!!!")));
  59. var2.set(var1);
  60. REQUIRE(doc1.memoryUsage() == 8);
  61. REQUIRE(doc2.memoryUsage() == 8);
  62. }
  63. }