forked from bblanchon/ArduinoJson
Compare commits
10 Commits
Author | SHA1 | Date | |
---|---|---|---|
b9e3255c9e | |||
e657396f65 | |||
929f608f2f | |||
c6a4bfa886 | |||
d5e25b12b8 | |||
7cf6fe6d62 | |||
155dd653e7 | |||
b5c8cd1766 | |||
4967e389c5 | |||
ffbaebd198 |
2
.gitignore
vendored
2
.gitignore
vendored
@ -4,3 +4,5 @@
|
||||
/bin
|
||||
/lib
|
||||
/sftp-config.json
|
||||
.tags
|
||||
.tags_sorted_by_file
|
||||
|
11
CHANGELOG.md
11
CHANGELOG.md
@ -1,6 +1,17 @@
|
||||
ArduinoJson: change log
|
||||
=======================
|
||||
|
||||
v5.0.4
|
||||
------
|
||||
|
||||
* Fixed ambiguous overload with `JsonArraySubscript` and `JsonObjectSubscript` (issue #122)
|
||||
|
||||
v5.0.3
|
||||
------
|
||||
|
||||
* Fixed `printTo(String)` which wrote numbers instead of strings (issue #120)
|
||||
* Fixed return type of `JsonArray::is<T>()` and some others (issue #121)
|
||||
|
||||
v5.0.2
|
||||
------
|
||||
|
||||
|
16
README.md
16
README.md
@ -21,6 +21,14 @@ Features
|
||||
* Small footprint
|
||||
* MIT License
|
||||
|
||||
Works on
|
||||
--------
|
||||
|
||||
* All Arduino boards
|
||||
* ESP8266
|
||||
* Teensy
|
||||
* Computers (Windows, Linux, OSX...)
|
||||
|
||||
Quick start
|
||||
-----------
|
||||
|
||||
@ -78,6 +86,14 @@ From GitHub user `zacsketches`:
|
||||
> I've been watching you consistently develop this library over the past six months, and I used it today for a publish and subscribe architecture designed to help hobbyists move into more advanced robotics. Your library allowed me to implement remote subscription in order to facilitate multi-processor robots.
|
||||
> ArduinoJson saved me a week's worth of time!!
|
||||
|
||||
[From Reddit user `erm_what_`](https://www.reddit.com/r/arduino/comments/3jj6ep/announcing_arduinojson_50/cusjk8c):
|
||||
|
||||
> This is a great library and I wouldn't be able to do the project I'm doing without it. I completely recommend it.
|
||||
|
||||
[From Reddit user `makerhacks`](https://www.reddit.com/r/arduino/comments/3jj6ep/announcing_arduinojson_50/cusqg7b):
|
||||
|
||||
> I am just starting an ESP8266 clock project and now I can output JSON from my server script and interpret it painlessly.
|
||||
|
||||
---
|
||||
|
||||
Found this library useful? Please star this project or [help me back with a donation!](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=donate%40benoitblanchon%2efr&lc=GB&item_name=Benoit%20Blanchon&item_number=Arduino%20JSON¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted) :smile:
|
||||
|
@ -10,6 +10,7 @@ using namespace ArduinoJson::Internals;
|
||||
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
// delay(1000); <--needed for some boards (like Teensy)
|
||||
|
||||
IndentedPrint serial(Serial);
|
||||
serial.setTabSize(4);
|
||||
|
@ -8,6 +8,7 @@
|
||||
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
// delay(1000); <--needed for some boards (like Teensy)
|
||||
|
||||
StaticJsonBuffer<200> jsonBuffer;
|
||||
|
||||
|
@ -8,6 +8,7 @@
|
||||
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
// delay(1000); <--needed for some boards (like Teensy)
|
||||
|
||||
StaticJsonBuffer<200> jsonBuffer;
|
||||
|
||||
|
@ -18,7 +18,8 @@ class DynamicStringBuilder : public Print {
|
||||
DynamicStringBuilder(String &str) : _str(str) {}
|
||||
|
||||
virtual size_t write(uint8_t c) {
|
||||
_str += c;
|
||||
// Need to cast to char, otherwise String will print a number (issue #120)
|
||||
_str += static_cast<char>(c);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -63,7 +63,8 @@ class JsonArray : public Internals::JsonPrintable<JsonArray>,
|
||||
FORCE_INLINE bool add(const String &value);
|
||||
FORCE_INLINE bool add(JsonArray &array);
|
||||
FORCE_INLINE bool add(JsonObject &object);
|
||||
FORCE_INLINE bool add(const JsonVariant &object);
|
||||
template <typename T>
|
||||
FORCE_INLINE bool add(const T &value);
|
||||
|
||||
// Sets the value at specified index.
|
||||
FORCE_INLINE void set(size_t index, bool value);
|
||||
@ -81,7 +82,8 @@ class JsonArray : public Internals::JsonPrintable<JsonArray>,
|
||||
FORCE_INLINE void set(size_t index, const String &value);
|
||||
FORCE_INLINE void set(size_t index, JsonArray &array);
|
||||
FORCE_INLINE void set(size_t index, JsonObject &object);
|
||||
FORCE_INLINE void set(size_t index, const JsonVariant &object);
|
||||
template <typename T>
|
||||
FORCE_INLINE void set(size_t index, const T &value);
|
||||
|
||||
// Gets the value at the specified index.
|
||||
FORCE_INLINE JsonVariant get(size_t index) const;
|
||||
@ -92,7 +94,7 @@ class JsonArray : public Internals::JsonPrintable<JsonArray>,
|
||||
|
||||
// Check the type of the value at specified index.
|
||||
template <typename T>
|
||||
FORCE_INLINE T is(size_t index) const;
|
||||
FORCE_INLINE bool is(size_t index) const;
|
||||
|
||||
// Creates a JsonArray and adds a reference at the end of the array.
|
||||
// It's a shortcut for JsonBuffer::createArray() and JsonArray::add()
|
||||
|
@ -77,8 +77,9 @@ inline bool JsonArray::add(JsonObject &object) {
|
||||
return addNode<JsonObject &>(object);
|
||||
}
|
||||
|
||||
inline bool JsonArray::add(const JsonVariant &object) {
|
||||
return addNode<const JsonVariant &>(object);
|
||||
template <typename T>
|
||||
inline bool JsonArray::add(const T &variant) {
|
||||
return addNode<const JsonVariant &>(variant);
|
||||
}
|
||||
|
||||
template <typename TValue>
|
||||
@ -149,8 +150,9 @@ inline void JsonArray::set(size_t index, JsonObject &object) {
|
||||
return setNodeAt<JsonObject &>(index, object);
|
||||
}
|
||||
|
||||
inline void JsonArray::set(size_t index, const JsonVariant &object) {
|
||||
return setNodeAt<const JsonVariant &>(index, object);
|
||||
template <typename T>
|
||||
inline void JsonArray::set(size_t index, const T &variant) {
|
||||
return setNodeAt<const JsonVariant &>(index, variant);
|
||||
}
|
||||
|
||||
template <typename TValue>
|
||||
@ -182,7 +184,7 @@ inline T JsonArray::get(size_t index) const {
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline T JsonArray::is(size_t index) const {
|
||||
inline bool JsonArray::is(size_t index) const {
|
||||
node_type *node = getNodeAt(index);
|
||||
return node ? node->content.is<T>() : false;
|
||||
}
|
||||
|
@ -8,6 +8,11 @@
|
||||
|
||||
#include "JsonSubscriptBase.hpp"
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable : 4522)
|
||||
#endif
|
||||
|
||||
namespace ArduinoJson {
|
||||
class JsonArraySubscript : public JsonSubscriptBase<JsonArraySubscript> {
|
||||
public:
|
||||
@ -16,6 +21,15 @@ class JsonArraySubscript : public JsonSubscriptBase<JsonArraySubscript> {
|
||||
|
||||
using JsonSubscriptBase<JsonArraySubscript>::operator=;
|
||||
|
||||
JsonArraySubscript& operator=(const JsonArraySubscript& src) {
|
||||
return assign<const JsonVariant&>(src);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
JsonArraySubscript& operator=(const T& src) {
|
||||
return assign<const JsonVariant&>(src);
|
||||
}
|
||||
|
||||
FORCE_INLINE bool success() const { return _index < _array.size(); }
|
||||
|
||||
FORCE_INLINE operator JsonVariant() const { return _array.get(_index); }
|
||||
@ -26,7 +40,7 @@ class JsonArraySubscript : public JsonSubscriptBase<JsonArraySubscript> {
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
FORCE_INLINE T is() const {
|
||||
FORCE_INLINE bool is() const {
|
||||
return _array.is<T>(_index);
|
||||
}
|
||||
|
||||
@ -52,3 +66,7 @@ inline std::ostream& operator<<(std::ostream& os,
|
||||
#endif
|
||||
|
||||
} // namespace ArduinoJson
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(pop)
|
||||
#endif
|
||||
|
@ -65,6 +65,9 @@ class JsonObject : public Internals::JsonPrintable<JsonObject>,
|
||||
FORCE_INLINE bool set(const char* key, JsonArray& array);
|
||||
FORCE_INLINE bool set(const char* key, JsonObject& object);
|
||||
FORCE_INLINE bool set(const char* key, const JsonVariant& value);
|
||||
template <typename T>
|
||||
FORCE_INLINE bool set(const char* key, const T& value);
|
||||
|
||||
FORCE_INLINE bool set(const String& key, bool value);
|
||||
FORCE_INLINE bool set(const String& key, float value, uint8_t decimals = 2);
|
||||
FORCE_INLINE bool set(const String& key, double value, uint8_t decimals = 2);
|
||||
@ -81,6 +84,8 @@ class JsonObject : public Internals::JsonPrintable<JsonObject>,
|
||||
FORCE_INLINE bool set(const String& key, JsonArray& array);
|
||||
FORCE_INLINE bool set(const String& key, JsonObject& object);
|
||||
FORCE_INLINE bool set(const String& key, const JsonVariant& value);
|
||||
template <typename T>
|
||||
FORCE_INLINE bool set(const String& key, const T& value);
|
||||
|
||||
// Gets the value associated with the specified key.
|
||||
FORCE_INLINE JsonVariant get(JsonObjectKey) const;
|
||||
|
@ -116,6 +116,10 @@ inline bool JsonObject::set(const char *key, JsonObject &object) {
|
||||
inline bool JsonObject::set(const char *key, const JsonVariant &value) {
|
||||
return setNodeAt<const char *, const JsonVariant &>(key, value);
|
||||
}
|
||||
template <typename T>
|
||||
inline bool JsonObject::set(const char *key, const T &value) {
|
||||
return setNodeAt<const char *, JsonVariant>(key, value);
|
||||
}
|
||||
inline bool JsonObject::set(const String &key, bool value) {
|
||||
return setNodeAt<const String &, bool>(key, value);
|
||||
}
|
||||
@ -166,6 +170,10 @@ inline bool JsonObject::set(const String &key, JsonObject &object) {
|
||||
inline bool JsonObject::set(const String &key, const JsonVariant &value) {
|
||||
return setNodeAt<const String &, const JsonVariant &>(key, value);
|
||||
}
|
||||
template <typename T>
|
||||
inline bool JsonObject::set(const String &key, const T &value) {
|
||||
return setNodeAt<const String &, JsonVariant>(key, value);
|
||||
}
|
||||
|
||||
template <typename TKey, typename TValue>
|
||||
inline bool JsonObject::setNodeAt(TKey key, TValue value) {
|
||||
|
@ -8,6 +8,11 @@
|
||||
|
||||
#include "JsonSubscriptBase.hpp"
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable : 4522)
|
||||
#endif
|
||||
|
||||
namespace ArduinoJson {
|
||||
|
||||
template <typename TKey>
|
||||
@ -19,6 +24,17 @@ class JsonObjectSubscript
|
||||
|
||||
using JsonSubscriptBase<JsonObjectSubscript<TKey> >::operator=;
|
||||
|
||||
JsonObjectSubscript<TKey>& operator=(const JsonObjectSubscript<TKey>& src) {
|
||||
return JsonSubscriptBase<JsonObjectSubscript<TKey> >::template assign<
|
||||
JsonVariant>(src);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
JsonObjectSubscript<TKey>& operator=(const T& src) {
|
||||
return JsonSubscriptBase<JsonObjectSubscript<TKey> >::template assign<
|
||||
JsonVariant>(src);
|
||||
}
|
||||
|
||||
FORCE_INLINE bool success() const { return _object.containsKey(_key); }
|
||||
|
||||
FORCE_INLINE operator JsonVariant() const { return _object.get(_key); }
|
||||
@ -29,7 +45,7 @@ class JsonObjectSubscript
|
||||
}
|
||||
|
||||
template <typename TValue>
|
||||
FORCE_INLINE TValue is() const {
|
||||
FORCE_INLINE bool is() const {
|
||||
return _object.is<TValue>(_key);
|
||||
}
|
||||
|
||||
@ -60,4 +76,8 @@ inline std::ostream& operator<<(
|
||||
return source.printTo(os);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
} // namespace ArduinoJson
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(pop)
|
||||
#endif
|
||||
|
@ -68,10 +68,10 @@ class JsonSubscriptBase : public JsonVariantBase<TImpl> {
|
||||
}
|
||||
|
||||
FORCE_INLINE TImpl& operator=(JsonVariant value) {
|
||||
return assign<JsonVariant>(value);
|
||||
return assign<const JsonVariant&>(value);
|
||||
}
|
||||
|
||||
private:
|
||||
protected:
|
||||
template <typename TValue>
|
||||
FORCE_INLINE TImpl& assign(TValue value) {
|
||||
TImpl* that = static_cast<TImpl*>(this);
|
||||
|
@ -1,5 +1,5 @@
|
||||
name=ArduinoJson
|
||||
version=5.0.2
|
||||
version=5.0.4
|
||||
author=Benoit Blanchon <blog.benoitblanchon.fr>
|
||||
maintainer=Benoit Blanchon <blog.benoitblanchon.fr>
|
||||
sentence=An efficient and elegant JSON library for Arduino.
|
||||
|
52
scripts/build-old-arduino-package.sh
Normal file
52
scripts/build-old-arduino-package.sh
Normal file
@ -0,0 +1,52 @@
|
||||
#!/bin/bash
|
||||
|
||||
TAG=$(git describe)
|
||||
OUTPUT="ArduinoJson-$TAG-old-layout.zip"
|
||||
|
||||
cd $(dirname $0)/..
|
||||
|
||||
cat > ArduinoJson.h <<END
|
||||
// WARNING:
|
||||
// --------
|
||||
// This file is a workaround for old version of the Arduino IDE.
|
||||
// If you are using Arduino IDE 1.0.6 or above, then you installed the wrong
|
||||
// package of ArduinoJson.
|
||||
// In that case, just delete the current installation and install the package.
|
||||
|
||||
END
|
||||
cp ArduinoJson.h ArduinoJson.cpp
|
||||
|
||||
cat "include/ArduinoJson.h" | sed 's!include "!include "include/!g' >> ArduinoJson.h
|
||||
|
||||
find src -name "*.cpp" |
|
||||
while read FILE; do
|
||||
echo >> ArduinoJson.cpp
|
||||
echo "// $FILE" >> ArduinoJson.cpp
|
||||
echo "//" >> ArduinoJson.cpp
|
||||
cat "$FILE" | sed 's!\.\./!!g' >> ArduinoJson.cpp
|
||||
done
|
||||
|
||||
unix2dos ArduinoJson.cpp
|
||||
unix2dos ArduinoJson.h
|
||||
|
||||
pushd ..
|
||||
|
||||
# remove existing file
|
||||
rm -f $OUTPUT
|
||||
|
||||
# create zipman dos2
|
||||
7z a $OUTPUT \
|
||||
ArduinoJson/CHANGELOG.md \
|
||||
ArduinoJson/examples \
|
||||
ArduinoJson/include/ArduinoJson \
|
||||
ArduinoJson/keywords.txt \
|
||||
ArduinoJson/LICENSE.md \
|
||||
ArduinoJson/README.md \
|
||||
ArduinoJson/ArduinoJson.h \
|
||||
ArduinoJson/ArduinoJson.cpp \
|
||||
-x!ArduinoJson/src/CMakeLists.txt
|
||||
|
||||
popd
|
||||
|
||||
rm ArduinoJson.h
|
||||
rm ArduinoJson.cpp
|
@ -5,6 +5,7 @@ file(GLOB_RECURSE CPP_FILES *.cpp)
|
||||
if(CMAKE_CXX_COMPILER_ID MATCHES "(GNU|Clang)")
|
||||
add_definitions(
|
||||
-fno-exceptions
|
||||
-fno-rtti
|
||||
-pedantic
|
||||
-Wall
|
||||
-Wcast-align
|
||||
|
@ -71,6 +71,26 @@ TEST_F(ArduinoStringTests, JsonObject_SetKeyValue) {
|
||||
ASSERT_STREQ("world", object["hello"]);
|
||||
}
|
||||
|
||||
TEST_F(ArduinoStringTests, JsonObject_SetToArraySubscript) {
|
||||
JsonArray &arr = _jsonBuffer.createArray();
|
||||
arr.add("world");
|
||||
|
||||
JsonObject &object = _jsonBuffer.createObject();
|
||||
object.set(String("hello"), arr[0]);
|
||||
|
||||
ASSERT_STREQ("world", object["hello"]);
|
||||
}
|
||||
|
||||
TEST_F(ArduinoStringTests, JsonObject_SetToObjectSubscript) {
|
||||
JsonObject &arr = _jsonBuffer.createObject();
|
||||
arr.set("x", "world");
|
||||
|
||||
JsonObject &object = _jsonBuffer.createObject();
|
||||
object.set(String("hello"), arr["x"]);
|
||||
|
||||
ASSERT_STREQ("world", object["hello"]);
|
||||
}
|
||||
|
||||
TEST_F(ArduinoStringTests, JsonObject_Get) {
|
||||
char json[] = "{\"key\":\"value\"}";
|
||||
const JsonObject &object = _jsonBuffer.parseObject(json);
|
||||
|
@ -22,9 +22,9 @@ TEST_F(DynamicJsonBuffer_Basic_Tests, InitialSizeIsZero) {
|
||||
|
||||
TEST_F(DynamicJsonBuffer_Basic_Tests, SizeIncreasesAfterAlloc) {
|
||||
buffer.alloc(1);
|
||||
ASSERT_LE(1, buffer.size());
|
||||
ASSERT_LE(1U, buffer.size());
|
||||
buffer.alloc(1);
|
||||
ASSERT_LE(2, buffer.size());
|
||||
ASSERT_LE(2U, buffer.size());
|
||||
}
|
||||
|
||||
TEST_F(DynamicJsonBuffer_Basic_Tests, ReturnDifferentPointer) {
|
||||
|
@ -7,17 +7,22 @@
|
||||
#include <gtest/gtest.h>
|
||||
#include <ArduinoJson.h>
|
||||
|
||||
class DynamicJsonBuffer_NoMemory_Tests : public ::testing::Test {
|
||||
class NoMemoryAllocator {
|
||||
public:
|
||||
void* allocate(size_t) { return NULL; }
|
||||
void deallocate(void*) {}
|
||||
};
|
||||
class NoMemoryAllocator {
|
||||
public:
|
||||
void* allocate(size_t) { return NULL; }
|
||||
void deallocate(void*) {}
|
||||
};
|
||||
|
||||
class DynamicJsonBuffer_NoMemory_Tests : public ::testing::Test {
|
||||
protected:
|
||||
Internals::BlockJsonBuffer<NoMemoryAllocator> _jsonBuffer;
|
||||
};
|
||||
|
||||
TEST_F(DynamicJsonBuffer_NoMemory_Tests, FixCodeCoverage) {
|
||||
// call this function to fix code coverage
|
||||
NoMemoryAllocator().deallocate(NULL);
|
||||
}
|
||||
|
||||
TEST_F(DynamicJsonBuffer_NoMemory_Tests, CreateArray) {
|
||||
ASSERT_FALSE(_jsonBuffer.createArray().success());
|
||||
}
|
||||
|
90
test/JsonArray_Add_Tests.cpp
Normal file
90
test/JsonArray_Add_Tests.cpp
Normal file
@ -0,0 +1,90 @@
|
||||
// Copyright Benoit Blanchon 2014-2015
|
||||
// MIT License
|
||||
//
|
||||
// Arduino JSON library
|
||||
// https://github.com/bblanchon/ArduinoJson
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
#define ARDUINOJSON_ENABLE_STD_STREAM
|
||||
#include <ArduinoJson.h>
|
||||
|
||||
class JsonArray_Add_Tests : public ::testing::Test {
|
||||
protected:
|
||||
JsonArray_Add_Tests() : _array(_jsonBuffer.createArray()) {}
|
||||
|
||||
DynamicJsonBuffer _jsonBuffer;
|
||||
JsonArray& _array;
|
||||
};
|
||||
|
||||
#define TEST_(name) TEST_F(JsonArray_Add_Tests, name)
|
||||
|
||||
TEST_(SizeIncreased_WhenValuesAreAdded) {
|
||||
_array.add("hello");
|
||||
EXPECT_EQ(1U, _array.size());
|
||||
}
|
||||
|
||||
TEST_(StoreInteger) {
|
||||
_array.add(123);
|
||||
EXPECT_EQ(123, _array[0].as<int>());
|
||||
EXPECT_TRUE(_array[0].is<int>());
|
||||
EXPECT_FALSE(_array[0].is<double>());
|
||||
}
|
||||
|
||||
TEST_(StoreDouble) {
|
||||
_array.add(123.45);
|
||||
EXPECT_EQ(123.45, _array[0].as<double>());
|
||||
EXPECT_TRUE(_array[0].is<double>());
|
||||
EXPECT_FALSE(_array[0].is<int>());
|
||||
}
|
||||
|
||||
TEST_(StoreBoolean) {
|
||||
_array.add(true);
|
||||
EXPECT_EQ(true, _array[0].as<bool>());
|
||||
EXPECT_TRUE(_array[0].is<bool>());
|
||||
EXPECT_FALSE(_array[0].is<int>());
|
||||
}
|
||||
|
||||
TEST_(StoreString) {
|
||||
_array.add("hello");
|
||||
EXPECT_STREQ("hello", _array[0].as<const char*>());
|
||||
EXPECT_TRUE(_array[0].is<const char*>());
|
||||
EXPECT_FALSE(_array[0].is<int>());
|
||||
}
|
||||
|
||||
TEST_(StoreNestedArray) {
|
||||
JsonArray& arr = _jsonBuffer.createArray();
|
||||
|
||||
_array.add(arr);
|
||||
|
||||
EXPECT_EQ(&arr, &_array[0].as<JsonArray&>());
|
||||
EXPECT_TRUE(_array[0].is<JsonArray&>());
|
||||
EXPECT_FALSE(_array[0].is<int>());
|
||||
}
|
||||
|
||||
TEST_(StoreNestedObject) {
|
||||
JsonObject& obj = _jsonBuffer.createObject();
|
||||
|
||||
_array.add(obj);
|
||||
|
||||
EXPECT_EQ(&obj, &_array[0].as<JsonObject&>());
|
||||
EXPECT_TRUE(_array[0].is<JsonObject&>());
|
||||
EXPECT_FALSE(_array[0].is<int>());
|
||||
}
|
||||
|
||||
TEST_(StoreArraySubscript) {
|
||||
JsonArray& arr = _jsonBuffer.createArray();
|
||||
arr.add("hello");
|
||||
|
||||
_array.add(arr[0]);
|
||||
|
||||
EXPECT_STREQ("hello", _array[0]);
|
||||
}
|
||||
|
||||
TEST_(StoreObjectSubscript) {
|
||||
JsonObject& obj = _jsonBuffer.createObject();
|
||||
obj["x"] = "hello";
|
||||
|
||||
_array.add(obj["x"]);
|
||||
|
||||
EXPECT_STREQ("hello", _array[0]);
|
||||
}
|
41
test/JsonArray_Basic_Tests.cpp
Normal file
41
test/JsonArray_Basic_Tests.cpp
Normal file
@ -0,0 +1,41 @@
|
||||
// Copyright Benoit Blanchon 2014-2015
|
||||
// MIT License
|
||||
//
|
||||
// Arduino JSON library
|
||||
// https://github.com/bblanchon/ArduinoJson
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
#define ARDUINOJSON_ENABLE_STD_STREAM
|
||||
#include <ArduinoJson.h>
|
||||
|
||||
#define TEST_(name) TEST(JsonArray_Basic_Tests, name)
|
||||
|
||||
TEST_(SuccessIsTrue) {
|
||||
DynamicJsonBuffer _jsonBuffer;
|
||||
JsonArray& array = _jsonBuffer.createArray();
|
||||
|
||||
EXPECT_TRUE(array.success());
|
||||
}
|
||||
|
||||
TEST_(InitialSizeIsZero) {
|
||||
DynamicJsonBuffer _jsonBuffer;
|
||||
JsonArray& array = _jsonBuffer.createArray();
|
||||
|
||||
EXPECT_EQ(0U, array.size());
|
||||
}
|
||||
|
||||
TEST_(CreateNestedArray) {
|
||||
DynamicJsonBuffer _jsonBuffer;
|
||||
JsonArray& array = _jsonBuffer.createArray();
|
||||
|
||||
JsonArray& arr = array.createNestedArray();
|
||||
EXPECT_EQ(&arr, &array[0].as<JsonArray&>());
|
||||
}
|
||||
|
||||
TEST_(CreateNestedObject) {
|
||||
DynamicJsonBuffer _jsonBuffer;
|
||||
JsonArray& array = _jsonBuffer.createArray();
|
||||
|
||||
JsonObject& obj = array.createNestedObject();
|
||||
EXPECT_EQ(&obj, &array[0].as<JsonObject&>());
|
||||
}
|
@ -1,180 +0,0 @@
|
||||
// Copyright Benoit Blanchon 2014-2015
|
||||
// MIT License
|
||||
//
|
||||
// Arduino JSON library
|
||||
// https://github.com/bblanchon/ArduinoJson
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
#include <ArduinoJson.h>
|
||||
|
||||
class JsonArray_Container_Tests : public ::testing::Test {
|
||||
protected:
|
||||
JsonArray_Container_Tests() : _array(_jsonBuffer.createArray()) {}
|
||||
|
||||
template <typename T>
|
||||
void firstMustEqual(T expected) {
|
||||
itemMustEqual(0, expected);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void secondMustEqual(T expected) {
|
||||
itemMustEqual(1, expected);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void firstMustReference(const T& expected) {
|
||||
itemMustReference(0, expected);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void secondMustReference(const T& expected) {
|
||||
itemMustReference(1, expected);
|
||||
}
|
||||
|
||||
void sizeMustBe(int expected) { EXPECT_EQ(expected, _array.size()); }
|
||||
|
||||
DynamicJsonBuffer _jsonBuffer;
|
||||
JsonArray& _array;
|
||||
|
||||
private:
|
||||
template <typename T>
|
||||
void itemMustEqual(int index, T expected) {
|
||||
EXPECT_EQ(expected, _array[index].as<T>());
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void itemMustReference(int index, const T& expected) {
|
||||
EXPECT_EQ(&expected, &_array[index].as<T&>());
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
void JsonArray_Container_Tests::itemMustEqual(int index, const char* expected) {
|
||||
EXPECT_STREQ(expected, _array[index].asString());
|
||||
}
|
||||
|
||||
TEST_F(JsonArray_Container_Tests, SuccessIsTrue) {
|
||||
EXPECT_TRUE(_array.success());
|
||||
}
|
||||
|
||||
TEST_F(JsonArray_Container_Tests, InitialSizeIsZero) { sizeMustBe(0); }
|
||||
|
||||
TEST_F(JsonArray_Container_Tests, Grow_WhenValuesAreAdded) {
|
||||
_array.add("hello");
|
||||
sizeMustBe(1);
|
||||
|
||||
_array.add("world");
|
||||
sizeMustBe(2);
|
||||
}
|
||||
|
||||
TEST_F(JsonArray_Container_Tests, DontGrow_WhenValuesAreReplaced) {
|
||||
_array.add("hello");
|
||||
_array[0] = "world";
|
||||
sizeMustBe(1);
|
||||
}
|
||||
|
||||
TEST_F(JsonArray_Container_Tests, CanStoreIntegers) {
|
||||
_array.add(123);
|
||||
_array.add(456);
|
||||
|
||||
firstMustEqual(123);
|
||||
secondMustEqual(456);
|
||||
}
|
||||
|
||||
TEST_F(JsonArray_Container_Tests, CanStoreDoubles) {
|
||||
_array.add(123.45);
|
||||
_array.add(456.78);
|
||||
|
||||
firstMustEqual(123.45);
|
||||
secondMustEqual(456.78);
|
||||
}
|
||||
|
||||
TEST_F(JsonArray_Container_Tests, CanStoreBooleans) {
|
||||
_array.add(true);
|
||||
_array.add(false);
|
||||
|
||||
firstMustEqual(true);
|
||||
secondMustEqual(false);
|
||||
}
|
||||
|
||||
TEST_F(JsonArray_Container_Tests, CanStoreStrings) {
|
||||
_array.add("hello");
|
||||
_array.add("world");
|
||||
|
||||
firstMustEqual("hello");
|
||||
secondMustEqual("world");
|
||||
}
|
||||
|
||||
TEST_F(JsonArray_Container_Tests, CanStoreNestedArrays) {
|
||||
JsonArray& inner_array1 = _jsonBuffer.createArray();
|
||||
JsonArray& inner_array2 = _jsonBuffer.createArray();
|
||||
|
||||
_array.add(inner_array1);
|
||||
_array.add(inner_array2);
|
||||
|
||||
firstMustReference(inner_array1);
|
||||
secondMustReference(inner_array2);
|
||||
}
|
||||
|
||||
TEST_F(JsonArray_Container_Tests, CanStoreNestedObjects) {
|
||||
JsonObject& innerObject1 = _jsonBuffer.createObject();
|
||||
JsonObject& innerObject2 = _jsonBuffer.createObject();
|
||||
|
||||
_array.add(innerObject1);
|
||||
_array.add(innerObject2);
|
||||
|
||||
firstMustReference(innerObject1);
|
||||
secondMustReference(innerObject2);
|
||||
}
|
||||
|
||||
TEST_F(JsonArray_Container_Tests, CanCreateNestedArrays) {
|
||||
JsonArray& inner_array1 = _array.createNestedArray();
|
||||
JsonArray& inner_array2 = _array.createNestedArray();
|
||||
|
||||
firstMustReference(inner_array1);
|
||||
secondMustReference(inner_array2);
|
||||
}
|
||||
|
||||
TEST_F(JsonArray_Container_Tests, CanCreateNestedObjects) {
|
||||
JsonObject& innerObject1 = _array.createNestedObject();
|
||||
JsonObject& innerObject2 = _array.createNestedObject();
|
||||
|
||||
firstMustReference(innerObject1);
|
||||
secondMustReference(innerObject2);
|
||||
}
|
||||
|
||||
TEST_F(JsonArray_Container_Tests, RemoveFirstElement) {
|
||||
_array.add("one");
|
||||
_array.add("two");
|
||||
_array.add("three");
|
||||
|
||||
_array.removeAt(0);
|
||||
|
||||
sizeMustBe(2);
|
||||
firstMustEqual("two");
|
||||
secondMustEqual("three");
|
||||
}
|
||||
|
||||
TEST_F(JsonArray_Container_Tests, RemoveMiddleElement) {
|
||||
_array.add("one");
|
||||
_array.add("two");
|
||||
_array.add("three");
|
||||
|
||||
_array.removeAt(1);
|
||||
|
||||
sizeMustBe(2);
|
||||
firstMustEqual("one");
|
||||
secondMustEqual("three");
|
||||
}
|
||||
|
||||
TEST_F(JsonArray_Container_Tests, RemoveLastElement) {
|
||||
_array.add("one");
|
||||
_array.add("two");
|
||||
_array.add("three");
|
||||
|
||||
_array.removeAt(2);
|
||||
|
||||
sizeMustBe(2);
|
||||
firstMustEqual("one");
|
||||
secondMustEqual("two");
|
||||
}
|
46
test/JsonArray_Remove_Tests.cpp
Normal file
46
test/JsonArray_Remove_Tests.cpp
Normal file
@ -0,0 +1,46 @@
|
||||
// Copyright Benoit Blanchon 2014-2015
|
||||
// MIT License
|
||||
//
|
||||
// Arduino JSON library
|
||||
// https://github.com/bblanchon/ArduinoJson
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
#include <ArduinoJson.h>
|
||||
|
||||
class JsonArray_Remove_Tests : public ::testing::Test {
|
||||
protected:
|
||||
JsonArray_Remove_Tests() : _array(_jsonBuffer.createArray()) {
|
||||
_array.add("one");
|
||||
_array.add("two");
|
||||
_array.add("three");
|
||||
}
|
||||
|
||||
DynamicJsonBuffer _jsonBuffer;
|
||||
JsonArray& _array;
|
||||
};
|
||||
|
||||
#define TEST_(name) TEST_F(JsonArray_Remove_Tests, name)
|
||||
|
||||
TEST_(RemoveFirstElement) {
|
||||
_array.removeAt(0);
|
||||
|
||||
EXPECT_EQ(2, _array.size());
|
||||
EXPECT_STREQ("two", _array[0]);
|
||||
EXPECT_STREQ("three", _array[1]);
|
||||
}
|
||||
|
||||
TEST_(RemoveMiddleElement) {
|
||||
_array.removeAt(1);
|
||||
|
||||
EXPECT_EQ(2, _array.size());
|
||||
EXPECT_STREQ("one", _array[0]);
|
||||
EXPECT_STREQ("three", _array[1]);
|
||||
}
|
||||
|
||||
TEST_(RemoveLastElement) {
|
||||
_array.removeAt(2);
|
||||
|
||||
EXPECT_EQ(2, _array.size());
|
||||
EXPECT_STREQ("one", _array[0]);
|
||||
EXPECT_STREQ("two", _array[1]);
|
||||
}
|
90
test/JsonArray_Set_Tests.cpp
Normal file
90
test/JsonArray_Set_Tests.cpp
Normal file
@ -0,0 +1,90 @@
|
||||
// Copyright Benoit Blanchon 2014-2015
|
||||
// MIT License
|
||||
//
|
||||
// Arduino JSON library
|
||||
// https://github.com/bblanchon/ArduinoJson
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
#define ARDUINOJSON_ENABLE_STD_STREAM
|
||||
#include <ArduinoJson.h>
|
||||
|
||||
class JsonArray_Set_Tests : public ::testing::Test {
|
||||
protected:
|
||||
JsonArray_Set_Tests() : _array(_jsonBuffer.createArray()) { _array.add(0); }
|
||||
|
||||
DynamicJsonBuffer _jsonBuffer;
|
||||
JsonArray& _array;
|
||||
};
|
||||
|
||||
#define TEST_(name) TEST_F(JsonArray_Set_Tests, name)
|
||||
|
||||
TEST_(SizeIsUnchanged) {
|
||||
_array.set(0, "hello");
|
||||
EXPECT_EQ(1U, _array.size());
|
||||
}
|
||||
|
||||
TEST_(StoreInteger) {
|
||||
_array.set(0, 123);
|
||||
EXPECT_EQ(123, _array[0].as<int>());
|
||||
EXPECT_TRUE(_array[0].is<int>());
|
||||
EXPECT_FALSE(_array[0].is<double>());
|
||||
}
|
||||
|
||||
TEST_(StoreDouble) {
|
||||
_array.set(0, 123.45);
|
||||
EXPECT_EQ(123.45, _array[0].as<double>());
|
||||
EXPECT_TRUE(_array[0].is<double>());
|
||||
EXPECT_FALSE(_array[0].is<int>());
|
||||
}
|
||||
|
||||
TEST_(StoreBoolean) {
|
||||
_array.set(0, true);
|
||||
EXPECT_EQ(true, _array[0].as<bool>());
|
||||
EXPECT_TRUE(_array[0].is<bool>());
|
||||
EXPECT_FALSE(_array[0].is<int>());
|
||||
}
|
||||
|
||||
TEST_(StoreString) {
|
||||
_array.set(0, "hello");
|
||||
EXPECT_STREQ("hello", _array[0].as<const char*>());
|
||||
EXPECT_TRUE(_array[0].is<const char*>());
|
||||
EXPECT_FALSE(_array[0].is<int>());
|
||||
}
|
||||
|
||||
TEST_(StoreNestedArray) {
|
||||
JsonArray& arr = _jsonBuffer.createArray();
|
||||
|
||||
_array.set(0, arr);
|
||||
|
||||
EXPECT_EQ(&arr, &_array[0].as<JsonArray&>());
|
||||
EXPECT_TRUE(_array[0].is<JsonArray&>());
|
||||
EXPECT_FALSE(_array[0].is<int>());
|
||||
}
|
||||
|
||||
TEST_(StoreNestedObject) {
|
||||
JsonObject& obj = _jsonBuffer.createObject();
|
||||
|
||||
_array.set(0, obj);
|
||||
|
||||
EXPECT_EQ(&obj, &_array[0].as<JsonObject&>());
|
||||
EXPECT_TRUE(_array[0].is<JsonObject&>());
|
||||
EXPECT_FALSE(_array[0].is<int>());
|
||||
}
|
||||
|
||||
TEST_(StoreArraySubscript) {
|
||||
JsonArray& arr = _jsonBuffer.createArray();
|
||||
arr.add("hello");
|
||||
|
||||
_array.set(0, arr[0]);
|
||||
|
||||
EXPECT_STREQ("hello", _array[0]);
|
||||
}
|
||||
|
||||
TEST_(StoreObjectSubscript) {
|
||||
JsonObject& obj = _jsonBuffer.createObject();
|
||||
obj["x"] = "hello";
|
||||
|
||||
_array.set(0, obj["x"]);
|
||||
|
||||
EXPECT_STREQ("hello", _array[0]);
|
||||
}
|
92
test/JsonArray_Subscript_Tests.cpp
Normal file
92
test/JsonArray_Subscript_Tests.cpp
Normal file
@ -0,0 +1,92 @@
|
||||
// Copyright Benoit Blanchon 2014-2015
|
||||
// MIT License
|
||||
//
|
||||
// Arduino JSON library
|
||||
// https://github.com/bblanchon/ArduinoJson
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
#define ARDUINOJSON_ENABLE_STD_STREAM
|
||||
#include <ArduinoJson.h>
|
||||
|
||||
class JsonArray_Subscript_Tests : public ::testing::Test {
|
||||
protected:
|
||||
JsonArray_Subscript_Tests() : _array(_jsonBuffer.createArray()) {
|
||||
_array.add(0);
|
||||
}
|
||||
|
||||
DynamicJsonBuffer _jsonBuffer;
|
||||
JsonArray& _array;
|
||||
};
|
||||
|
||||
#define TEST_(name) TEST_F(JsonArray_Subscript_Tests, name)
|
||||
|
||||
TEST_(SizeIsUnchanged) {
|
||||
_array[0] = "hello";
|
||||
EXPECT_EQ(1U, _array.size());
|
||||
}
|
||||
|
||||
TEST_(StoreInteger) {
|
||||
_array[0] = 123;
|
||||
EXPECT_EQ(123, _array[0].as<int>());
|
||||
EXPECT_TRUE(_array[0].is<int>());
|
||||
EXPECT_FALSE(_array[0].is<double>());
|
||||
}
|
||||
|
||||
TEST_(StoreDouble) {
|
||||
_array[0] = 123.45;
|
||||
EXPECT_EQ(123.45, _array[0].as<double>());
|
||||
EXPECT_TRUE(_array[0].is<double>());
|
||||
EXPECT_FALSE(_array[0].is<int>());
|
||||
}
|
||||
|
||||
TEST_(StoreBoolean) {
|
||||
_array[0] = true;
|
||||
EXPECT_EQ(true, _array[0].as<bool>());
|
||||
EXPECT_TRUE(_array[0].is<bool>());
|
||||
EXPECT_FALSE(_array[0].is<int>());
|
||||
}
|
||||
|
||||
TEST_(StoreString) {
|
||||
_array[0] = "hello";
|
||||
EXPECT_STREQ("hello", _array[0].as<const char*>());
|
||||
EXPECT_TRUE(_array[0].is<const char*>());
|
||||
EXPECT_FALSE(_array[0].is<int>());
|
||||
}
|
||||
|
||||
TEST_(StoreNestedArray) {
|
||||
JsonArray& arr = _jsonBuffer.createArray();
|
||||
|
||||
_array[0] = arr;
|
||||
|
||||
EXPECT_EQ(&arr, &_array[0].as<JsonArray&>());
|
||||
EXPECT_TRUE(_array[0].is<JsonArray&>());
|
||||
EXPECT_FALSE(_array[0].is<int>());
|
||||
}
|
||||
|
||||
TEST_(StoreNestedObject) {
|
||||
JsonObject& obj = _jsonBuffer.createObject();
|
||||
|
||||
_array[0] = obj;
|
||||
|
||||
EXPECT_EQ(&obj, &_array[0].as<JsonObject&>());
|
||||
EXPECT_TRUE(_array[0].is<JsonObject&>());
|
||||
EXPECT_FALSE(_array[0].is<int>());
|
||||
}
|
||||
|
||||
TEST_(StoreArraySubscript) {
|
||||
JsonArray& arr = _jsonBuffer.createArray();
|
||||
arr.add("hello");
|
||||
|
||||
_array[0] = arr[0];
|
||||
|
||||
EXPECT_STREQ("hello", _array[0]);
|
||||
}
|
||||
|
||||
TEST_(StoreObjectSubscript) {
|
||||
JsonObject& obj = _jsonBuffer.createObject();
|
||||
obj["x"] = "hello";
|
||||
|
||||
_array[0] = obj["x"];
|
||||
|
||||
EXPECT_STREQ("hello", _array[0]);
|
||||
}
|
24
test/JsonObject_Basic_Tests.cpp
Normal file
24
test/JsonObject_Basic_Tests.cpp
Normal file
@ -0,0 +1,24 @@
|
||||
// Copyright Benoit Blanchon 2014-2015
|
||||
// MIT License
|
||||
//
|
||||
// Arduino JSON library
|
||||
// https://github.com/bblanchon/ArduinoJson
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
#include <ArduinoJson.h>
|
||||
|
||||
#define TEST_(name) TEST(JsonObject_Basic_Tests, name)
|
||||
|
||||
TEST_(InitialSizeIsZero) {
|
||||
DynamicJsonBuffer _jsonBuffer;
|
||||
JsonObject& _object = _jsonBuffer.createObject();
|
||||
|
||||
EXPECT_EQ(0, _object.size());
|
||||
}
|
||||
|
||||
TEST_(SuccessIsTrue) {
|
||||
DynamicJsonBuffer _jsonBuffer;
|
||||
JsonObject& _object = _jsonBuffer.createObject();
|
||||
|
||||
EXPECT_TRUE(_object.success());
|
||||
}
|
@ -1,121 +0,0 @@
|
||||
// Copyright Benoit Blanchon 2014-2015
|
||||
// MIT License
|
||||
//
|
||||
// Arduino JSON library
|
||||
// https://github.com/bblanchon/ArduinoJson
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
#include <ArduinoJson.h>
|
||||
|
||||
class JsonObject_Container_Tests : public ::testing::Test {
|
||||
public:
|
||||
JsonObject_Container_Tests() : _object(_jsonBuffer.createObject()) {}
|
||||
|
||||
protected:
|
||||
DynamicJsonBuffer _jsonBuffer;
|
||||
JsonObject& _object;
|
||||
};
|
||||
|
||||
TEST_F(JsonObject_Container_Tests, InitialSizeIsZero) {
|
||||
EXPECT_EQ(0, _object.size());
|
||||
}
|
||||
|
||||
TEST_F(JsonObject_Container_Tests, Grow_WhenValuesAreAdded) {
|
||||
_object["hello"] = 1;
|
||||
EXPECT_EQ(1, _object.size());
|
||||
|
||||
_object.set("world", 2);
|
||||
EXPECT_EQ(2, _object.size());
|
||||
}
|
||||
|
||||
TEST_F(JsonObject_Container_Tests, DoNotGrow_WhenSameValueIsAdded) {
|
||||
_object["hello"] = 1;
|
||||
EXPECT_EQ(1, _object.size());
|
||||
|
||||
_object["hello"] = 2;
|
||||
EXPECT_EQ(1, _object.size());
|
||||
}
|
||||
|
||||
TEST_F(JsonObject_Container_Tests, Shrink_WhenValuesAreRemoved) {
|
||||
_object["hello"] = 1;
|
||||
_object["world"] = 2;
|
||||
|
||||
_object.remove("hello");
|
||||
EXPECT_EQ(1, _object.size());
|
||||
|
||||
_object.remove("world");
|
||||
EXPECT_EQ(0, _object.size());
|
||||
}
|
||||
|
||||
TEST_F(JsonObject_Container_Tests,
|
||||
DoNotShrink_WhenRemoveIsCalledWithAWrongKey) {
|
||||
_object["hello"] = 1;
|
||||
_object["world"] = 2;
|
||||
|
||||
_object.remove(":-P");
|
||||
|
||||
EXPECT_EQ(2, _object.size());
|
||||
}
|
||||
|
||||
TEST_F(JsonObject_Container_Tests, CanStoreIntegers) {
|
||||
_object["hello"] = 123;
|
||||
_object.set("world", 456);
|
||||
|
||||
EXPECT_EQ(123, _object["hello"].as<int>());
|
||||
EXPECT_EQ(456, _object["world"].as<int>());
|
||||
}
|
||||
|
||||
TEST_F(JsonObject_Container_Tests, CanStoreDoubles) {
|
||||
_object["hello"] = 123.45;
|
||||
_object.set("world", 456.78);
|
||||
|
||||
EXPECT_EQ(123.45, _object["hello"].as<double>());
|
||||
EXPECT_EQ(456.78, _object["world"].as<double>());
|
||||
}
|
||||
|
||||
TEST_F(JsonObject_Container_Tests, CanStoreBooleans) {
|
||||
_object["hello"] = true;
|
||||
_object.set("world", false);
|
||||
|
||||
EXPECT_TRUE(_object["hello"].as<bool>());
|
||||
EXPECT_FALSE(_object["world"].as<bool>());
|
||||
}
|
||||
|
||||
TEST_F(JsonObject_Container_Tests, CanStoreStrings) {
|
||||
_object["hello"] = "h3110";
|
||||
_object.set("world", "w0r1d");
|
||||
|
||||
EXPECT_STREQ("h3110", _object["hello"].as<const char*>());
|
||||
EXPECT_STREQ("w0r1d", _object["world"].as<const char*>());
|
||||
}
|
||||
|
||||
TEST_F(JsonObject_Container_Tests, CanStoreArrays) {
|
||||
JsonArray& array1 = _jsonBuffer.createArray();
|
||||
JsonArray& array2 = _jsonBuffer.createArray();
|
||||
|
||||
_object["hello"] = array1;
|
||||
_object.set("world", array2);
|
||||
|
||||
EXPECT_EQ(&array1, &_object["hello"].asArray());
|
||||
EXPECT_EQ(&array2, &_object["world"].asArray());
|
||||
}
|
||||
|
||||
TEST_F(JsonObject_Container_Tests, CanStoreObjects) {
|
||||
JsonObject& object1 = _jsonBuffer.createObject();
|
||||
JsonObject& object2 = _jsonBuffer.createObject();
|
||||
|
||||
_object["hello"] = object1;
|
||||
_object.set("world", object2);
|
||||
|
||||
EXPECT_EQ(&object1, &_object["hello"].asObject());
|
||||
EXPECT_EQ(&object2, &_object["world"].asObject());
|
||||
}
|
||||
|
||||
TEST_F(JsonObject_Container_Tests, ContainsKeyReturnsFalseForNonExistingKey) {
|
||||
EXPECT_FALSE(_object.containsKey("hello"));
|
||||
}
|
||||
|
||||
TEST_F(JsonObject_Container_Tests, ContainsKeyReturnsTrueForDefinedValue) {
|
||||
_object.set("hello", 42);
|
||||
EXPECT_TRUE(_object.containsKey("hello"));
|
||||
}
|
38
test/JsonObject_ContainsKey_Tests.cpp
Normal file
38
test/JsonObject_ContainsKey_Tests.cpp
Normal file
@ -0,0 +1,38 @@
|
||||
// Copyright Benoit Blanchon 2014-2015
|
||||
// MIT License
|
||||
//
|
||||
// Arduino JSON library
|
||||
// https://github.com/bblanchon/ArduinoJson
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
#include <ArduinoJson.h>
|
||||
|
||||
#define TEST_(name) TEST(JsonObject_Basic_Tests, name)
|
||||
|
||||
TEST_(ContainsKeyReturnsFalseForNonExistingKey) {
|
||||
DynamicJsonBuffer _jsonBuffer;
|
||||
JsonObject& _object = _jsonBuffer.createObject();
|
||||
|
||||
_object.set("hello", 42);
|
||||
|
||||
EXPECT_FALSE(_object.containsKey("world"));
|
||||
}
|
||||
|
||||
TEST_(ContainsKeyReturnsTrueForDefinedValue) {
|
||||
DynamicJsonBuffer _jsonBuffer;
|
||||
JsonObject& _object = _jsonBuffer.createObject();
|
||||
|
||||
_object.set("hello", 42);
|
||||
|
||||
EXPECT_TRUE(_object.containsKey("hello"));
|
||||
}
|
||||
|
||||
TEST_(ContainsKeyReturnsFalseAfterRemove) {
|
||||
DynamicJsonBuffer _jsonBuffer;
|
||||
JsonObject& _object = _jsonBuffer.createObject();
|
||||
|
||||
_object.set("hello", 42);
|
||||
_object.remove("hello");
|
||||
|
||||
EXPECT_FALSE(_object.containsKey("hello"));
|
||||
}
|
30
test/JsonObject_Remove_Tests.cpp
Normal file
30
test/JsonObject_Remove_Tests.cpp
Normal file
@ -0,0 +1,30 @@
|
||||
// Copyright Benoit Blanchon 2014-2015
|
||||
// MIT License
|
||||
//
|
||||
// Arduino JSON library
|
||||
// https://github.com/bblanchon/ArduinoJson
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
#include <ArduinoJson.h>
|
||||
|
||||
#define TEST_(name) TEST(JsonObject_Remove_Tests, name)
|
||||
|
||||
TEST_(SizeDecreased_WhenValuesAreRemoved) {
|
||||
DynamicJsonBuffer _jsonBuffer;
|
||||
JsonObject& _object = _jsonBuffer.createObject();
|
||||
_object["hello"] = 1;
|
||||
|
||||
_object.remove("hello");
|
||||
|
||||
EXPECT_EQ(0, _object.size());
|
||||
}
|
||||
|
||||
TEST_(SizeUntouched_WhenRemoveIsCalledWithAWrongKey) {
|
||||
DynamicJsonBuffer _jsonBuffer;
|
||||
JsonObject& _object = _jsonBuffer.createObject();
|
||||
_object["hello"] = 1;
|
||||
|
||||
_object.remove("world");
|
||||
|
||||
EXPECT_EQ(1, _object.size());
|
||||
}
|
101
test/JsonObject_Set_Tests.cpp
Normal file
101
test/JsonObject_Set_Tests.cpp
Normal file
@ -0,0 +1,101 @@
|
||||
// Copyright Benoit Blanchon 2014-2015
|
||||
// MIT License
|
||||
//
|
||||
// Arduino JSON library
|
||||
// https://github.com/bblanchon/ArduinoJson
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
#define ARDUINOJSON_ENABLE_STD_STREAM
|
||||
#include <ArduinoJson.h>
|
||||
|
||||
class JsonObject_Set_Tests : public ::testing::Test {
|
||||
public:
|
||||
JsonObject_Set_Tests() : _object(_jsonBuffer.createObject()) {}
|
||||
|
||||
protected:
|
||||
DynamicJsonBuffer _jsonBuffer;
|
||||
JsonObject& _object;
|
||||
};
|
||||
|
||||
#define TEST_(name) TEST_F(JsonObject_Set_Tests, name)
|
||||
|
||||
TEST_(SizeIncreased_WhenValuesAreAdded) {
|
||||
_object.set("hello", 42);
|
||||
EXPECT_EQ(1, _object.size());
|
||||
}
|
||||
|
||||
TEST_(SizeUntouched_WhenSameValueIsAdded) {
|
||||
_object["hello"] = 1;
|
||||
_object["hello"] = 2;
|
||||
EXPECT_EQ(1, _object.size());
|
||||
}
|
||||
|
||||
TEST_(StoreInteger) {
|
||||
_object.set("hello", 123);
|
||||
|
||||
EXPECT_EQ(123, _object["hello"].as<int>());
|
||||
EXPECT_TRUE(_object["hello"].is<int>());
|
||||
EXPECT_FALSE(_object["hello"].is<double>());
|
||||
}
|
||||
|
||||
TEST_(StoreDouble) {
|
||||
_object.set("hello", 123.45);
|
||||
|
||||
EXPECT_EQ(123.45, _object["hello"].as<double>());
|
||||
EXPECT_TRUE(_object["hello"].is<double>());
|
||||
EXPECT_FALSE(_object["hello"].is<long>());
|
||||
}
|
||||
|
||||
TEST_(StoreBoolean) {
|
||||
_object.set("hello", true);
|
||||
|
||||
EXPECT_TRUE(_object["hello"].as<bool>());
|
||||
EXPECT_TRUE(_object["hello"].is<bool>());
|
||||
EXPECT_FALSE(_object["hello"].is<long>());
|
||||
}
|
||||
|
||||
TEST_(StoreString) {
|
||||
_object.set("hello", "h3110");
|
||||
|
||||
EXPECT_STREQ("h3110", _object["hello"].as<const char*>());
|
||||
EXPECT_TRUE(_object["hello"].is<const char*>());
|
||||
EXPECT_FALSE(_object["hello"].is<long>());
|
||||
}
|
||||
|
||||
TEST_(StoreArray) {
|
||||
JsonArray& arr = _jsonBuffer.createArray();
|
||||
|
||||
_object.set("hello", arr);
|
||||
|
||||
EXPECT_EQ(&arr, &_object["hello"].asArray());
|
||||
EXPECT_TRUE(_object["hello"].is<JsonArray&>());
|
||||
EXPECT_FALSE(_object["hello"].is<JsonObject&>());
|
||||
}
|
||||
|
||||
TEST_(StoreObject) {
|
||||
JsonObject& obj = _jsonBuffer.createObject();
|
||||
|
||||
_object.set("hello", obj);
|
||||
|
||||
EXPECT_EQ(&obj, &_object["hello"].asObject());
|
||||
EXPECT_TRUE(_object["hello"].is<JsonObject&>());
|
||||
EXPECT_FALSE(_object["hello"].is<JsonArray&>());
|
||||
}
|
||||
|
||||
TEST_(StoreArraySubscript) {
|
||||
JsonArray& arr = _jsonBuffer.createArray();
|
||||
arr.add(42);
|
||||
|
||||
_object.set("a", arr[0]);
|
||||
|
||||
EXPECT_EQ(42, _object["a"]);
|
||||
}
|
||||
|
||||
TEST_(StoreObjectSubscript) {
|
||||
JsonObject& obj = _jsonBuffer.createObject();
|
||||
obj.set("x", 42);
|
||||
|
||||
_object.set("a", obj["x"]);
|
||||
|
||||
EXPECT_EQ(42, _object["a"]);
|
||||
}
|
101
test/JsonObject_Subscript_Tests.cpp
Normal file
101
test/JsonObject_Subscript_Tests.cpp
Normal file
@ -0,0 +1,101 @@
|
||||
// Copyright Benoit Blanchon 2014-2015
|
||||
// MIT License
|
||||
//
|
||||
// Arduino JSON library
|
||||
// https://github.com/bblanchon/ArduinoJson
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
#define ARDUINOJSON_ENABLE_STD_STREAM
|
||||
#include <ArduinoJson.h>
|
||||
|
||||
class JsonObject_Subscript_Tests : public ::testing::Test {
|
||||
public:
|
||||
JsonObject_Subscript_Tests() : _object(_jsonBuffer.createObject()) {}
|
||||
|
||||
protected:
|
||||
DynamicJsonBuffer _jsonBuffer;
|
||||
JsonObject& _object;
|
||||
};
|
||||
|
||||
#define TEST_(name) TEST_F(JsonObject_Subscript_Tests, name)
|
||||
|
||||
TEST_(SizeIncreased_WhenValuesAreAdded) {
|
||||
_object["hello"] = 1;
|
||||
EXPECT_EQ(1, _object.size());
|
||||
}
|
||||
|
||||
TEST_(SizeUntouched_WhenSameValueIsAdded) {
|
||||
_object["hello"] = 1;
|
||||
_object["hello"] = 2;
|
||||
EXPECT_EQ(1, _object.size());
|
||||
}
|
||||
|
||||
TEST_(StoreInteger) {
|
||||
_object["hello"] = 123;
|
||||
|
||||
EXPECT_EQ(123, _object["hello"].as<int>());
|
||||
EXPECT_TRUE(_object["hello"].is<int>());
|
||||
EXPECT_FALSE(_object["hello"].is<double>());
|
||||
}
|
||||
|
||||
TEST_(StoreDouble) {
|
||||
_object["hello"] = 123.45;
|
||||
|
||||
EXPECT_TRUE(_object["hello"].is<double>());
|
||||
EXPECT_FALSE(_object["hello"].is<long>());
|
||||
EXPECT_EQ(123.45, _object["hello"].as<double>());
|
||||
}
|
||||
|
||||
TEST_(StoreBoolean) {
|
||||
_object["hello"] = true;
|
||||
|
||||
EXPECT_TRUE(_object["hello"].is<bool>());
|
||||
EXPECT_FALSE(_object["hello"].is<long>());
|
||||
EXPECT_TRUE(_object["hello"].as<bool>());
|
||||
}
|
||||
|
||||
TEST_(StoreString) {
|
||||
_object["hello"] = "h3110";
|
||||
|
||||
EXPECT_TRUE(_object["hello"].is<const char*>());
|
||||
EXPECT_FALSE(_object["hello"].is<long>());
|
||||
EXPECT_STREQ("h3110", _object["hello"].as<const char*>());
|
||||
}
|
||||
|
||||
TEST_(StoreArray) {
|
||||
JsonArray& arr = _jsonBuffer.createArray();
|
||||
|
||||
_object["hello"] = arr;
|
||||
|
||||
EXPECT_EQ(&arr, &_object["hello"].asArray());
|
||||
EXPECT_TRUE(_object["hello"].is<JsonArray&>());
|
||||
EXPECT_FALSE(_object["hello"].is<JsonObject&>());
|
||||
}
|
||||
|
||||
TEST_(StoreObject) {
|
||||
JsonObject& obj = _jsonBuffer.createObject();
|
||||
|
||||
_object["hello"] = obj;
|
||||
|
||||
EXPECT_EQ(&obj, &_object["hello"].asObject());
|
||||
EXPECT_TRUE(_object["hello"].is<JsonObject&>());
|
||||
EXPECT_FALSE(_object["hello"].is<JsonArray&>());
|
||||
}
|
||||
|
||||
TEST_(StoreArraySubscript) {
|
||||
JsonArray& arr = _jsonBuffer.createArray();
|
||||
arr.add(42);
|
||||
|
||||
_object["a"] = arr[0];
|
||||
|
||||
EXPECT_EQ(42, _object["a"]);
|
||||
}
|
||||
|
||||
TEST_(StoreObjectSubscript) {
|
||||
JsonObject& obj = _jsonBuffer.createObject();
|
||||
obj.set("x", 42);
|
||||
|
||||
_object["a"] = obj["x"];
|
||||
|
||||
EXPECT_EQ(42, _object["a"]);
|
||||
}
|
@ -26,9 +26,9 @@ TEST_F(StaticJsonBuffer_Basic_Tests, InitialSizeIsZero) {
|
||||
|
||||
TEST_F(StaticJsonBuffer_Basic_Tests, GrowsAfterAlloc) {
|
||||
buffer.alloc(1);
|
||||
ASSERT_LE(1, buffer.size());
|
||||
ASSERT_LE(1U, buffer.size());
|
||||
buffer.alloc(1);
|
||||
ASSERT_LE(2, buffer.size());
|
||||
ASSERT_LE(2U, buffer.size());
|
||||
}
|
||||
|
||||
TEST_F(StaticJsonBuffer_Basic_Tests, DoesntGrowWhenFull) {
|
||||
|
Reference in New Issue
Block a user