std_stream.cpp 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. // ArduinoJson - arduinojson.org
  2. // Copyright Benoit Blanchon 2014-2018
  3. // MIT License
  4. #include <ArduinoJson.h>
  5. #include <catch.hpp>
  6. #include <sstream>
  7. TEST_CASE("std::stream") {
  8. SECTION("JsonVariantFalse") {
  9. std::ostringstream os;
  10. JsonVariant variant = false;
  11. os << variant;
  12. REQUIRE("false" == os.str());
  13. }
  14. SECTION("JsonVariantString") {
  15. std::ostringstream os;
  16. JsonVariant variant = "coucou";
  17. os << variant;
  18. REQUIRE("\"coucou\"" == os.str());
  19. }
  20. SECTION("JsonObject") {
  21. std::ostringstream os;
  22. DynamicJsonDocument doc;
  23. JsonObject& object = doc.to<JsonObject>();
  24. object["key"] = "value";
  25. os << object;
  26. REQUIRE("{\"key\":\"value\"}" == os.str());
  27. }
  28. SECTION("JsonObjectSubscript") {
  29. std::ostringstream os;
  30. DynamicJsonDocument doc;
  31. JsonObject& object = doc.to<JsonObject>();
  32. object["key"] = "value";
  33. os << object["key"];
  34. REQUIRE("\"value\"" == os.str());
  35. }
  36. SECTION("JsonArray") {
  37. std::ostringstream os;
  38. DynamicJsonDocument doc;
  39. JsonArray& array = doc.to<JsonArray>();
  40. array.add("value");
  41. os << array;
  42. REQUIRE("[\"value\"]" == os.str());
  43. }
  44. SECTION("JsonArraySubscript") {
  45. std::ostringstream os;
  46. DynamicJsonDocument doc;
  47. JsonArray& array = doc.to<JsonArray>();
  48. array.add("value");
  49. os << array[0];
  50. REQUIRE("\"value\"" == os.str());
  51. }
  52. SECTION("ParseArray") {
  53. std::istringstream json(" [ 42 /* comment */ ] ");
  54. DynamicJsonDocument doc;
  55. JsonError err = deserializeJson(doc, json);
  56. JsonArray& arr = doc.as<JsonArray>();
  57. REQUIRE(err == JsonError::Ok);
  58. REQUIRE(1 == arr.size());
  59. REQUIRE(42 == arr[0]);
  60. }
  61. SECTION("ParseObject") {
  62. std::istringstream json(" { hello : world // comment\n }");
  63. DynamicJsonDocument doc;
  64. JsonError err = deserializeJson(doc, json);
  65. JsonObject& obj = doc.as<JsonObject>();
  66. REQUIRE(err == JsonError::Ok);
  67. REQUIRE(1 == obj.size());
  68. REQUIRE(std::string("world") == obj["hello"]);
  69. }
  70. SECTION("ShouldNotReadPastTheEnd") {
  71. std::istringstream json("{}123");
  72. DynamicJsonDocument doc;
  73. deserializeJson(doc, json);
  74. REQUIRE('1' == json.get());
  75. }
  76. }