RawJson() accepts any kind of string and obeys to duplication rules

This commit is contained in:
Benoit Blanchon
2018-01-18 09:43:37 +01:00
parent 7e4fcb0868
commit bae179ed67
20 changed files with 163 additions and 123 deletions

View File

@ -84,7 +84,7 @@ TEST_CASE("JsonArray::add()") {
REQUIRE(expectedSize == _jsonBuffer.size());
}
SECTION("should duplicate char*") {
SECTION("should duplicate char*") {
_array.add(const_cast<char*>("world"));
const size_t expectedSize = JSON_ARRAY_SIZE(1) + 6;
REQUIRE(expectedSize == _jsonBuffer.size());
@ -95,4 +95,16 @@ TEST_CASE("JsonArray::add()") {
const size_t expectedSize = JSON_ARRAY_SIZE(1) + 6;
REQUIRE(expectedSize == _jsonBuffer.size());
}
SECTION("should not duplicate RawJson(const char*)") {
_array.add(RawJson("{}"));
const size_t expectedSize = JSON_ARRAY_SIZE(1);
REQUIRE(expectedSize == _jsonBuffer.size());
}
SECTION("should duplicate RawJson(char*)") {
_array.add(RawJson(const_cast<char*>("{}")));
const size_t expectedSize = JSON_ARRAY_SIZE(1) + 3;
REQUIRE(expectedSize == _jsonBuffer.size());
}
}

View File

@ -8,10 +8,10 @@
static void check(JsonArray &array, std::string expected) {
std::string actual;
size_t actualLen = array.printTo(actual);
size_t measuredLen = array.measureLength();
CHECK(actualLen == expected.size());
CHECK(measuredLen == expected.size());
REQUIRE(expected == actual);
REQUIRE(actualLen == expected.size());
size_t measuredLen = array.measureLength();
REQUIRE(measuredLen == expected.size());
}
TEST_CASE("JsonArray::printTo()") {
@ -67,12 +67,22 @@ TEST_CASE("JsonArray::printTo()") {
check(array, "[1,2]");
}
SECTION("RawJson") {
SECTION("RawJson(const char*)") {
array.add(RawJson("{\"key\":\"value\"}"));
check(array, "[{\"key\":\"value\"}]");
}
SECTION("RawJson(char*)") {
DynamicJsonBuffer jb2;
JsonArray &arr = jb2.createArray();
char tmp[] = "{\"key\":\"value\"}";
arr.add(RawJson(tmp));
check(arr, "[{\"key\":\"value\"}]");
}
SECTION("OneIntegerOverCapacity") {
array.add(1);
array.add(2);

View File

@ -8,6 +8,7 @@ add_executable(MiscTests
std_stream.cpp
std_string.cpp
StringBuilder.cpp
StringTraits.cpp
TypeTraits.cpp
unsigned_char.cpp
vla.cpp

View File

@ -0,0 +1,22 @@
// ArduinoJson - arduinojson.org
// Copyright Benoit Blanchon 2014-2018
// MIT License
#include <ArduinoJson.h>
#include <catch.hpp>
using namespace ArduinoJson::Internals;
template <typename String>
bool should_duplicate() {
return StringTraits<String>::should_duplicate;
}
TEST_CASE("StringTraits") {
SECTION("should_duplicate") {
REQUIRE(false == should_duplicate<const char*>());
REQUIRE(true == should_duplicate<char*>());
REQUIRE(true == should_duplicate<RawJsonString<char*> >());
REQUIRE(false == should_duplicate<RawJsonString<const char*> >());
}
}

View File

@ -4,7 +4,6 @@
#include <ArduinoJson.h>
#include <catch.hpp>
#include <sstream>
using namespace ArduinoJson::TypeTraits;
@ -31,12 +30,6 @@ TEST_CASE("TypeTraits") {
REQUIRE(static_cast<bool>(IsVariant<JsonVariant>::value));
}
SECTION("IsString") {
REQUIRE((IsString<const char*>::value));
REQUIRE((IsString<std::string>::value));
REQUIRE_FALSE((IsString<double>::value));
}
SECTION("IsConst") {
REQUIRE_FALSE((IsConst<char>::value));
REQUIRE((IsConst<const char>::value));