123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- // ArduinoJson - https://arduinojson.org
- // Copyright © 2014-2022, Benoit BLANCHON
- // MIT License
- #include <ArduinoJson.h>
- #include <stdint.h>
- #include <catch.hpp>
- #include <array>
- #include <string>
- #include <vector>
- namespace ARDUINOJSON_NAMESPACE {
- template <typename T>
- struct Converter<std::vector<T> > {
- static void toJson(const std::vector<T>& src, JsonVariant dst) {
- JsonArray array = dst.to<JsonArray>();
- for (T item : src)
- array.add(item);
- }
- static std::vector<T> fromJson(JsonVariantConst src) {
- std::vector<T> dst;
- for (T item : src.as<JsonArrayConst>())
- dst.push_back(item);
- return dst;
- }
- static bool checkJson(JsonVariantConst src) {
- JsonArrayConst array = src;
- bool result = array;
- for (JsonVariantConst item : array)
- result &= item.is<T>();
- return result;
- }
- };
- template <typename T, size_t N>
- struct Converter<std::array<T, N> > {
- static void toJson(const std::array<T, N>& src, JsonVariant dst) {
- JsonArray array = dst.to<JsonArray>();
- for (T item : src)
- array.add(item);
- }
- static std::array<T, N> fromJson(JsonVariantConst src) {
- std::array<T, N> dst;
- dst.fill(0);
- size_t idx = 0;
- for (T item : src.as<JsonArrayConst>())
- dst[idx++] = item;
- return dst;
- }
- static bool checkJson(JsonVariantConst src) {
- JsonArrayConst array = src;
- bool result = array;
- size_t size = 0;
- for (JsonVariantConst item : array) {
- result &= item.is<T>();
- size++;
- }
- return result && size == N;
- }
- };
- } // namespace ARDUINOJSON_NAMESPACE
- TEST_CASE("vector<int>") {
- SECTION("toJson") {
- std::vector<int> v = {1, 2};
- StaticJsonDocument<128> doc;
- doc.set(v);
- REQUIRE(doc.as<std::string>() == "[1,2]");
- }
- SECTION("fromJson") {
- StaticJsonDocument<128> doc;
- doc.add(1);
- doc.add(2);
- auto v = doc.as<std::vector<int> >();
- REQUIRE(v.size() == 2);
- CHECK(v[0] == 1);
- CHECK(v[1] == 2);
- }
- SECTION("checkJson") {
- StaticJsonDocument<128> doc;
- CHECK(doc.is<std::vector<int> >() == false);
- doc.add(1);
- doc.add(2);
- CHECK(doc.is<std::vector<int> >() == true);
- doc.add("foo");
- CHECK(doc.is<std::vector<int> >() == false);
- }
- }
- TEST_CASE("array<int, 2>") {
- typedef std::array<int, 2> array_type;
- SECTION("toJson") {
- array_type v;
- v[0] = 1;
- v[1] = 2;
- StaticJsonDocument<128> doc;
- doc.set(v);
- REQUIRE(doc.as<std::string>() == "[1,2]");
- }
- SECTION("fromJson") {
- StaticJsonDocument<128> doc;
- doc.add(1);
- doc.add(2);
- auto v = doc.as<array_type>();
- REQUIRE(v.size() == 2);
- CHECK(v[0] == 1);
- CHECK(v[1] == 2);
- }
- SECTION("checkJson") {
- StaticJsonDocument<128> doc;
- CHECK(doc.is<array_type>() == false);
- doc.add(1);
- CHECK(doc.is<array_type>() == false);
- doc.add(2);
- CHECK(doc.is<array_type>() == true);
- doc[0] = "foo";
- CHECK(doc.is<array_type>() == false);
- }
- }
|