From 96f486001deee80f546143ccdf0f2d068af03693 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Mon, 15 Aug 2016 12:24:08 +0200 Subject: [PATCH] `as()` now returns `true` when input is `null` (issue #330) --- CHANGELOG.md | 5 + include/ArduinoJson/JsonVariant.hpp | 9 +- test/JsonVariant_Is_Tests.cpp | 271 +++++++++++++++++++++------- 3 files changed, 222 insertions(+), 63 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c185749..c1907fe3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ ArduinoJson: change log ======================= +HEAD +---- + +* `as()` now returns `true` when input is `null` (issue #330) + v5.6.4 ------ diff --git a/include/ArduinoJson/JsonVariant.hpp b/include/ArduinoJson/JsonVariant.hpp index 644c44cb..df573b23 100644 --- a/include/ArduinoJson/JsonVariant.hpp +++ b/include/ArduinoJson/JsonVariant.hpp @@ -300,8 +300,13 @@ class JsonVariant : public JsonVariantBase { return T(); } + // DEPRECATED: use as() instead const char *asString() const; + + // DEPRECATED: use as() instead JsonArray &asArray() const; + + // DEPRECATED: use as() instead JsonObject &asObject() const; private: @@ -324,7 +329,9 @@ class JsonVariant : public JsonVariantBase { return _type == Internals::JSON_OBJECT; } bool isString() const { - return _type == Internals::JSON_STRING; + return _type == Internals::JSON_STRING || + _type == Internals::JSON_UNPARSED && _content.asString && + !strcmp("null", _content.asString); } // The current type of the variant diff --git a/test/JsonVariant_Is_Tests.cpp b/test/JsonVariant_Is_Tests.cpp index df00b97d..7670f3a5 100644 --- a/test/JsonVariant_Is_Tests.cpp +++ b/test/JsonVariant_Is_Tests.cpp @@ -5,8 +5,8 @@ // https://github.com/bblanchon/ArduinoJson // If you like this project, please add a star! -#include #include +#include #define SUITE JsonVariant_Is_Tests @@ -34,75 +34,222 @@ void assertIs(JsonArray& value) { ASSERT_TRUE(variant.is()); } -TEST(SUITE, ArrayIsArry) { assertIs(JsonArray::invalid()); } -TEST(SUITE, ArrayIsBool) { assertIsNot(JsonArray::invalid()); } -TEST(SUITE, ArrayIsDouble) { assertIsNot(JsonArray::invalid()); } -TEST(SUITE, ArrayIsFloat) { assertIsNot(JsonArray::invalid()); } -TEST(SUITE, ArrayIsInt) { assertIsNot(JsonArray::invalid()); } -TEST(SUITE, ArrayIsLong) { assertIsNot(JsonArray::invalid()); } -TEST(SUITE, ArrayIsString) { assertIsNot(JsonArray::invalid()); } +TEST(SUITE, ArrayIsArry) { + assertIs(JsonArray::invalid()); +} +TEST(SUITE, ArrayIsBool) { + assertIsNot(JsonArray::invalid()); +} +TEST(SUITE, ArrayIsDouble) { + assertIsNot(JsonArray::invalid()); +} +TEST(SUITE, ArrayIsFloat) { + assertIsNot(JsonArray::invalid()); +} +TEST(SUITE, ArrayIsInt) { + assertIsNot(JsonArray::invalid()); +} +TEST(SUITE, ArrayIsLong) { + assertIsNot(JsonArray::invalid()); +} +TEST(SUITE, ArrayIsString) { + assertIsNot(JsonArray::invalid()); +} -TEST(SUITE, BoolIsArray) { assertIsNot(true); } -TEST(SUITE, BoolIsBool) { assertIs(true); } -TEST(SUITE, BoolIsDouble) { assertIsNot(true); } -TEST(SUITE, BoolIsFloat) { assertIsNot(true); } -TEST(SUITE, BoolIsInt) { assertIsNot(true); } -TEST(SUITE, BoolIsLong) { assertIsNot(true); } -TEST(SUITE, BoolIsString) { assertIsNot(true); } +TEST(SUITE, BoolIsArray) { + assertIsNot(true); +} +TEST(SUITE, BoolIsBool) { + assertIs(true); +} +TEST(SUITE, BoolIsDouble) { + assertIsNot(true); +} +TEST(SUITE, BoolIsFloat) { + assertIsNot(true); +} +TEST(SUITE, BoolIsInt) { + assertIsNot(true); +} +TEST(SUITE, BoolIsLong) { + assertIsNot(true); +} +TEST(SUITE, BoolIsString) { + assertIsNot(true); +} -TEST(SUITE, DoubleIsArray) { assertIsNot(4.2); } -TEST(SUITE, DoubleIsBool) { assertIsNot(4.2); } -TEST(SUITE, DoubleIsDouble) { assertIs(4.2); } -TEST(SUITE, DoubleIsFloat) { assertIs(4.2); } -TEST(SUITE, DoubleIsInt) { assertIsNot(4.2); } -TEST(SUITE, DoubleIsLong) { assertIsNot(4.2); } -TEST(SUITE, DoubleIsString) { assertIsNot(4.2); } +TEST(SUITE, DoubleIsArray) { + assertIsNot(4.2); +} +TEST(SUITE, DoubleIsBool) { + assertIsNot(4.2); +} +TEST(SUITE, DoubleIsDouble) { + assertIs(4.2); +} +TEST(SUITE, DoubleIsFloat) { + assertIs(4.2); +} +TEST(SUITE, DoubleIsInt) { + assertIsNot(4.2); +} +TEST(SUITE, DoubleIsLong) { + assertIsNot(4.2); +} +TEST(SUITE, DoubleIsString) { + assertIsNot(4.2); +} -TEST(SUITE, LongIsArray) { assertIsNot(42L); } -TEST(SUITE, LongIsBool) { assertIsNot(42L); } -TEST(SUITE, LongIsDouble) { assertIsNot(42L); } -TEST(SUITE, LongIsFloat) { assertIsNot(42L); } -TEST(SUITE, LongIsInt) { assertIs(42L); } -TEST(SUITE, LongIsLong) { assertIs(42L); } -TEST(SUITE, LongIsString) { assertIsNot(42L); } +TEST(SUITE, LongIsArray) { + assertIsNot(42L); +} +TEST(SUITE, LongIsBool) { + assertIsNot(42L); +} +TEST(SUITE, LongIsDouble) { + assertIsNot(42L); +} +TEST(SUITE, LongIsFloat) { + assertIsNot(42L); +} +TEST(SUITE, LongIsInt) { + assertIs(42L); +} +TEST(SUITE, LongIsLong) { + assertIs(42L); +} +TEST(SUITE, LongIsString) { + assertIsNot(42L); +} -TEST(SUITE, StringIsArray) { assertIsNot("42"); } -TEST(SUITE, StringIsBool) { assertIsNot("42"); } -TEST(SUITE, StringIsDouble) { assertIsNot("42"); } -TEST(SUITE, StringIsFloat) { assertIsNot("42"); } -TEST(SUITE, StringIsInt) { assertIsNot("42"); } -TEST(SUITE, StringIsLong) { assertIsNot("42"); } -TEST(SUITE, StringIsString) { assertIs("42"); } +TEST(SUITE, StringIsArray) { + assertIsNot("42"); +} +TEST(SUITE, StringIsBool) { + assertIsNot("42"); +} +TEST(SUITE, StringIsDouble) { + assertIsNot("42"); +} +TEST(SUITE, StringIsFloat) { + assertIsNot("42"); +} +TEST(SUITE, StringIsInt) { + assertIsNot("42"); +} +TEST(SUITE, StringIsLong) { + assertIsNot("42"); +} +TEST(SUITE, StringIsString) { + assertIs("42"); +} -TEST(SUITE, UnparsedTrueIsArra) { assertIsNot(RawJson("true")); } -TEST(SUITE, UnparsedTrueIsBool) { assertIs(RawJson("true")); } -TEST(SUITE, UnparsedTrueIsDouble) { assertIsNot(RawJson("true")); } -TEST(SUITE, UnparsedTrueIsFloat) { assertIsNot(RawJson("true")); } -TEST(SUITE, UnparsedTrueIsInt) { assertIsNot(RawJson("true")); } -TEST(SUITE, UnparsedTrueIsLong) { assertIsNot(RawJson("true")); } -TEST(SUITE, UnparsedTrueIsString) { assertIsNot(RawJson("true")); } +TEST(SUITE, UnparsedTrueIsArray) { + assertIsNot(RawJson("true")); +} +TEST(SUITE, UnparsedTrueIsBool) { + assertIs(RawJson("true")); +} +TEST(SUITE, UnparsedTrueIsDouble) { + assertIsNot(RawJson("true")); +} +TEST(SUITE, UnparsedTrueIsFloat) { + assertIsNot(RawJson("true")); +} +TEST(SUITE, UnparsedTrueIsInt) { + assertIsNot(RawJson("true")); +} +TEST(SUITE, UnparsedTrueIsLong) { + assertIsNot(RawJson("true")); +} +TEST(SUITE, UnparsedTrueIsString) { + assertIsNot(RawJson("true")); +} -TEST(SUITE, UnparsedFalseIsArra) { assertIsNot(RawJson("false")); } -TEST(SUITE, UnparsedFalseIsBool) { assertIs(RawJson("false")); } -TEST(SUITE, UnparsedFalseIsDouble) { assertIsNot(RawJson("false")); } -TEST(SUITE, UnparsedFalseIsFloat) { assertIsNot(RawJson("false")); } -TEST(SUITE, UnparsedFalseIsInt) { assertIsNot(RawJson("false")); } -TEST(SUITE, UnparsedFalseIsLong) { assertIsNot(RawJson("false")); } +TEST(SUITE, UnparsedFalseIsArray) { + assertIsNot(RawJson("false")); +} +TEST(SUITE, UnparsedFalseIsBool) { + assertIs(RawJson("false")); +} +TEST(SUITE, UnparsedFalseIsDouble) { + assertIsNot(RawJson("false")); +} +TEST(SUITE, UnparsedFalseIsFloat) { + assertIsNot(RawJson("false")); +} +TEST(SUITE, UnparsedFalseIsInt) { + assertIsNot(RawJson("false")); +} +TEST(SUITE, UnparsedFalseIsLong) { + assertIsNot(RawJson("false")); +} TEST(SUITE, UnparsedFalseIsString) { assertIsNot(RawJson("false")); } -TEST(SUITE, UnparsedIntIsArra) { assertIsNot(RawJson("42")); } -TEST(SUITE, UnparsedIntIsBool) { assertIsNot(RawJson("42")); } -TEST(SUITE, UnparsedIntIsDouble) { assertIsNot(RawJson("42")); } -TEST(SUITE, UnparsedIntIsFloat) { assertIsNot(RawJson("42")); } -TEST(SUITE, UnparsedIntIsInt) { assertIs(RawJson("42")); } -TEST(SUITE, UnparsedIntIsLong) { assertIs(RawJson("42")); } -TEST(SUITE, UnparsedIntIsString) { assertIsNot(RawJson("42")); } +TEST(SUITE, UnparsedIntIsArray) { + assertIsNot(RawJson("42")); +} +TEST(SUITE, UnparsedIntIsBool) { + assertIsNot(RawJson("42")); +} +TEST(SUITE, UnparsedIntIsDouble) { + assertIsNot(RawJson("42")); +} +TEST(SUITE, UnparsedIntIsFloat) { + assertIsNot(RawJson("42")); +} +TEST(SUITE, UnparsedIntIsInt) { + assertIs(RawJson("42")); +} +TEST(SUITE, UnparsedIntIsLong) { + assertIs(RawJson("42")); +} +TEST(SUITE, UnparsedIntIsString) { + assertIsNot(RawJson("42")); +} -TEST(SUITE, UnparsedFloatIsBool) { assertIsNot(RawJson("4.2e-10")); } -TEST(SUITE, UnparsedFloatIsDouble) { assertIs(RawJson("4.2e-10")); } -TEST(SUITE, UnparsedFloatIsFloat) { assertIs(RawJson("4.2e-10")); } -TEST(SUITE, UnparsedFloatIsInt) { assertIsNot(RawJson("4.2e-10")); } -TEST(SUITE, UnparsedFloatIsLong) { assertIsNot(RawJson("4.2e-10")); } -TEST(SUITE, UnparsedFloatIsStr) { assertIsNot(RawJson("4.2")); } +TEST(SUITE, UnparsedFloatIsBool) { + assertIsNot(RawJson("4.2e-10")); +} +TEST(SUITE, UnparsedFloatIsDouble) { + assertIs(RawJson("4.2e-10")); +} +TEST(SUITE, UnparsedFloatIsFloat) { + assertIs(RawJson("4.2e-10")); +} +TEST(SUITE, UnparsedFloatIsInt) { + assertIsNot(RawJson("4.2e-10")); +} +TEST(SUITE, UnparsedFloatIsLong) { + assertIsNot(RawJson("4.2e-10")); +} +TEST(SUITE, UnparsedFloatIsStr) { + assertIsNot(RawJson("4.2")); +} + +TEST(SUITE, UnparsedNullIsArray) { + assertIsNot(RawJson("null")); +} +TEST(SUITE, UnparsedNullIsBool) { + assertIsNot(RawJson("null")); +} +TEST(SUITE, UnparsedNullIsDouble) { + assertIsNot(RawJson("null")); +} +TEST(SUITE, UnparsedNullIsFloat) { + assertIsNot(RawJson("null")); +} +TEST(SUITE, UnparsedNullIsInt) { + assertIsNot(RawJson("null")); +} +TEST(SUITE, UnparsedNullIsLong) { + assertIsNot(RawJson("null")); +} +TEST(SUITE, UnparsedNullIsConstCharPtr) { + assertIs(RawJson("null")); +} +TEST(SUITE, UnparsedNullIsCharPtr) { + assertIs(RawJson("null")); +}