Fixed JsonVariant::success() which didn't propagate JsonArray::success() nor JsonObject::success() (issue #342).

This commit is contained in:
Benoit Blanchon
2016-08-29 20:54:39 +02:00
parent e401498e4a
commit ffb9b6d1ba
6 changed files with 87 additions and 24 deletions

View File

@ -6,6 +6,7 @@ HEAD
* Fixed `-Wparentheses` warning introduced in v5.6.5 (PR #335 by @nuket) * Fixed `-Wparentheses` warning introduced in v5.6.5 (PR #335 by @nuket)
* Added `.mbedignore` for ARM mbdeb (PR #334 by @nuket) * Added `.mbedignore` for ARM mbdeb (PR #334 by @nuket)
* Fixed `JsonVariant::success()` which didn't propagate `JsonArray::success()` nor `JsonObject::success()` (issue #342).
v5.6.5 v5.6.5
------ ------

View File

@ -8,11 +8,29 @@
#pragma once #pragma once
#include "JsonArray.hpp" #include "JsonArray.hpp"
#include "JsonObject.hpp"
#include "JsonArraySubscript.hpp" #include "JsonArraySubscript.hpp"
#include "JsonObject.hpp"
namespace ArduinoJson { namespace ArduinoJson {
inline JsonVariant::JsonVariant(JsonArray &array) {
if (array.success()) {
_type = Internals::JSON_ARRAY;
_content.asArray = &array;
} else {
_type = Internals::JSON_UNDEFINED;
}
}
inline JsonVariant::JsonVariant(JsonObject &object) {
if (object.success()) {
_type = Internals::JSON_OBJECT;
_content.asObject = &object;
} else {
_type = Internals::JSON_UNDEFINED;
}
}
template <> template <>
inline bool JsonArray::setNodeValue(node_type *node, String &value) { inline bool JsonArray::setNodeValue(node_type *node, String &value) {
const char *copy = _buffer->strdup(value); const char *copy = _buffer->strdup(value);

View File

@ -107,16 +107,10 @@ class JsonVariant : public JsonVariantBase<JsonVariant> {
} }
// Create a JsonVariant containing a reference to an array. // Create a JsonVariant containing a reference to an array.
JsonVariant(JsonArray &array) { JsonVariant(JsonArray &array);
_type = Internals::JSON_ARRAY;
_content.asArray = &array;
}
// Create a JsonVariant containing a reference to an object. // Create a JsonVariant containing a reference to an object.
JsonVariant(JsonObject &object) { JsonVariant(JsonObject &object);
_type = Internals::JSON_OBJECT;
_content.asObject = &object;
}
// Get the variant as the specified type. // Get the variant as the specified type.
// //

View File

@ -34,26 +34,33 @@ void assertIs(JsonArray& value) {
ASSERT_TRUE(variant.is<TTo>()); ASSERT_TRUE(variant.is<TTo>());
} }
TEST(SUITE, ArrayIsArry) { TEST(SUITE, ArrayIsArray) {
assertIs<JsonArray&>(JsonArray::invalid()); DynamicJsonBuffer jsonBuffer;
assertIs<JsonArray&>(jsonBuffer.createArray());
} }
TEST(SUITE, ArrayIsBool) { TEST(SUITE, ArrayIsNotBool) {
assertIsNot<bool>(JsonArray::invalid()); DynamicJsonBuffer jsonBuffer;
assertIsNot<bool>(jsonBuffer.createArray());
} }
TEST(SUITE, ArrayIsDouble) { TEST(SUITE, ArrayIsNotDouble) {
assertIsNot<double>(JsonArray::invalid()); DynamicJsonBuffer jsonBuffer;
assertIsNot<double>(jsonBuffer.createArray());
} }
TEST(SUITE, ArrayIsFloat) { TEST(SUITE, ArrayIsNotFloat) {
assertIsNot<float>(JsonArray::invalid()); DynamicJsonBuffer jsonBuffer;
assertIsNot<float>(jsonBuffer.createArray());
} }
TEST(SUITE, ArrayIsInt) { TEST(SUITE, ArrayIsNotInt) {
assertIsNot<int>(JsonArray::invalid()); DynamicJsonBuffer jsonBuffer;
assertIsNot<int>(jsonBuffer.createArray());
} }
TEST(SUITE, ArrayIsLong) { TEST(SUITE, ArrayIsNotLong) {
assertIsNot<long>(JsonArray::invalid()); DynamicJsonBuffer jsonBuffer;
assertIsNot<long>(jsonBuffer.createArray());
} }
TEST(SUITE, ArrayIsString) { TEST(SUITE, ArrayIsNotString) {
assertIsNot<const char*>(JsonArray::invalid()); DynamicJsonBuffer jsonBuffer;
assertIsNot<const char*>(jsonBuffer.createArray());
} }
TEST(SUITE, BoolIsArray) { TEST(SUITE, BoolIsArray) {

View File

@ -0,0 +1,43 @@
// Copyright Benoit Blanchon 2014-2016
// MIT License
//
// Arduino JSON library
// https://github.com/bblanchon/ArduinoJson
// If you like this project, please add a star!
#include <ArduinoJson.h>
#include <gtest/gtest.h>
TEST(JsonVariant_Success_Tests, ReturnsFalse_WhenUndefined) {
JsonVariant variant;
EXPECT_FALSE(variant.success());
}
TEST(JsonVariant_Success_Tests, ReturnsTrue_WhenInteger) {
JsonVariant variant = 0;
EXPECT_TRUE(variant.success());
}
TEST(JsonVariant_Success_Tests, ReturnsTrue_WhenEmptyArray) {
DynamicJsonBuffer jsonBuffer;
JsonVariant variant = jsonBuffer.createArray();
EXPECT_TRUE(variant.success());
}
TEST(JsonVariant_Success_Tests, ReturnsTrue_WhenEmptyObject) {
DynamicJsonBuffer jsonBuffer;
JsonVariant variant = jsonBuffer.createObject();
EXPECT_TRUE(variant.success());
}
TEST(JsonVariant_Success_Tests, ReturnsFalse_WhenInvalidArray) {
JsonVariant variant = JsonArray::invalid();
EXPECT_FALSE(variant.success());
}
TEST(JsonVariant_Success_Tests, ReturnsFalse_WhenInvalidObject) {
JsonVariant variant = JsonObject::invalid();
EXPECT_FALSE(variant.success());
}