diff --git a/extras/tests/Cpp11/stl_containers.cpp b/extras/tests/Cpp11/stl_containers.cpp index 9e590c14..4c664e72 100644 --- a/extras/tests/Cpp11/stl_containers.cpp +++ b/extras/tests/Cpp11/stl_containers.cpp @@ -6,6 +6,7 @@ #include #include +#include #include #include @@ -28,14 +29,40 @@ struct Converter > { static bool checkJson(JsonVariantConst src) { JsonArrayConst array = src; bool result = array; - for (JsonVariantConst item : array) { - if (!result) - break; - result = item.is(); - } + for (JsonVariantConst item : array) + result &= item.is(); return result; } }; + +template +struct Converter > { + static void toJson(const std::array& src, JsonVariant dst) { + JsonArray array = dst.to(); + for (T item : src) + array.add(item); + } + + static std::array fromJson(JsonVariantConst src) { + std::array dst; + dst.fill(0); + size_t idx = 0; + for (T item : src.as()) + 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(); + size++; + } + return result && size == N; + } +}; } // namespace ARDUINOJSON_NAMESPACE TEST_CASE("vector") { @@ -70,3 +97,42 @@ TEST_CASE("vector") { CHECK(doc.is >() == false); } } + +TEST_CASE("array") { + typedef std::array array_type; + + SECTION("toJson") { + array_type v; + v[0] = 1; + v[1] = 2; + + StaticJsonDocument<128> doc; + doc.set(v); + REQUIRE(doc.as() == "[1,2]"); + } + + SECTION("fromJson") { + StaticJsonDocument<128> doc; + doc.add(1); + doc.add(2); + + auto v = doc.as(); + REQUIRE(v.size() == 2); + CHECK(v[0] == 1); + CHECK(v[1] == 2); + } + + SECTION("checkJson") { + StaticJsonDocument<128> doc; + CHECK(doc.is() == false); + + doc.add(1); + CHECK(doc.is() == false); + + doc.add(2); + CHECK(doc.is() == true); + + doc[0] = "foo"; + CHECK(doc.is() == false); + } +}