forked from bblanchon/ArduinoJson
Epic refactoring in progress
This commit is contained in:
@ -11,6 +11,7 @@
|
|||||||
namespace ArduinoJson {
|
namespace ArduinoJson {
|
||||||
namespace Internals {
|
namespace Internals {
|
||||||
|
|
||||||
|
// TODO: copy from JsonArrayIterator
|
||||||
class JsonArrayConstIterator {
|
class JsonArrayConstIterator {
|
||||||
public:
|
public:
|
||||||
explicit JsonArrayConstIterator(JsonArrayNode *node) : _node(node) {}
|
explicit JsonArrayConstIterator(JsonArrayNode *node) : _node(node) {}
|
||||||
|
@ -39,6 +39,8 @@ class JsonArrayImpl {
|
|||||||
private:
|
private:
|
||||||
JsonArrayImpl(JsonBuffer *buffer) : _buffer(buffer), _firstNode(NULL) {}
|
JsonArrayImpl(JsonBuffer *buffer) : _buffer(buffer), _firstNode(NULL) {}
|
||||||
|
|
||||||
|
inline void addNode(JsonArrayNode *node);
|
||||||
|
|
||||||
JsonBuffer *_buffer;
|
JsonBuffer *_buffer;
|
||||||
Internals::JsonArrayNode *_firstNode;
|
Internals::JsonArrayNode *_firstNode;
|
||||||
};
|
};
|
||||||
|
@ -29,8 +29,10 @@ class JsonArrayIterator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
JsonArrayIterator &operator++() {
|
JsonArrayIterator &operator++() {
|
||||||
|
if (_node) {
|
||||||
_node = _node->next;
|
_node = _node->next;
|
||||||
updateValue();
|
updateValue();
|
||||||
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ class JsonObjectIterator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
JsonObjectIterator &operator++() {
|
JsonObjectIterator &operator++() {
|
||||||
_pair._node = _pair._node->next;
|
if (_pair._node) _pair._node = _pair._node->next;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ class JsonObjectNode {
|
|||||||
JsonObjectNode* next;
|
JsonObjectNode* next;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
JsonObjectNode(const char* k) : key(k) {}
|
JsonObjectNode(const char* k) : key(k), next(NULL) {}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,9 +17,11 @@ class StaticJsonBuffer : public JsonBuffer {
|
|||||||
|
|
||||||
virtual ~StaticJsonBuffer() {}
|
virtual ~StaticJsonBuffer() {}
|
||||||
|
|
||||||
int capacity() { return CAPACITY; }
|
int capacity() const { return CAPACITY; }
|
||||||
|
|
||||||
int size() { return _size; }
|
int size() const { return _size; }
|
||||||
|
|
||||||
|
void clear() { _size = 0; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void* alloc(size_t size) {
|
virtual void* alloc(size_t size) {
|
||||||
|
@ -27,19 +27,28 @@ int JsonArrayImpl::size() const {
|
|||||||
JsonValueImpl *JsonArrayImpl::operator[](int index) const {
|
JsonValueImpl *JsonArrayImpl::operator[](int index) const {
|
||||||
JsonArrayNode *node = _firstNode;
|
JsonArrayNode *node = _firstNode;
|
||||||
while (node && index--) node = node->next;
|
while (node && index--) node = node->next;
|
||||||
|
return node ? &node->value : NULL;
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonValueImpl *JsonArrayImpl::add() {
|
JsonValueImpl *JsonArrayImpl::add() {
|
||||||
if (_buffer) return NULL;
|
|
||||||
|
|
||||||
JsonArrayNode *node = JsonArrayNode::createFrom(_buffer);
|
JsonArrayNode *node = JsonArrayNode::createFrom(_buffer);
|
||||||
if (!node) return NULL;
|
if (!node) return NULL;
|
||||||
|
|
||||||
|
addNode(node);
|
||||||
|
|
||||||
return &node->value;
|
return &node->value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void JsonArrayImpl::addNode(JsonArrayNode *newNode) {
|
||||||
|
if (_firstNode) {
|
||||||
|
JsonArrayNode *lastNode = _firstNode;
|
||||||
|
while (lastNode->next) lastNode = lastNode->next;
|
||||||
|
lastNode->next = newNode;
|
||||||
|
} else {
|
||||||
|
_firstNode = newNode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
JsonArrayImpl *JsonArrayImpl::createNestedArray() {
|
JsonArrayImpl *JsonArrayImpl::createNestedArray() {
|
||||||
JsonValueImpl *value = add();
|
JsonValueImpl *value = add();
|
||||||
if (!value) return NULL;
|
if (!value) return NULL;
|
||||||
|
@ -42,7 +42,7 @@ class Issue10 : public testing::Test {
|
|||||||
};
|
};
|
||||||
|
|
||||||
TEST_F(Issue10, PopulateArrayByAddingAnObject) {
|
TEST_F(Issue10, PopulateArrayByAddingAnObject) {
|
||||||
StaticJsonBuffer<20> json;
|
StaticJsonBuffer<200> json;
|
||||||
JsonArray array = json.createArray();
|
JsonArray array = json.createArray();
|
||||||
|
|
||||||
for (int i = 0; i < 2; i++) {
|
for (int i = 0; i < 2; i++) {
|
||||||
@ -59,7 +59,7 @@ TEST_F(Issue10, PopulateArrayByAddingAnObject) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(Issue10, PopulateArrayByCreatingNestedObjects) {
|
TEST_F(Issue10, PopulateArrayByCreatingNestedObjects) {
|
||||||
StaticJsonBuffer<20> json;
|
StaticJsonBuffer<200> json;
|
||||||
JsonArray array = json.createArray();
|
JsonArray array = json.createArray();
|
||||||
|
|
||||||
for (int i = 0; i < 2; i++) {
|
for (int i = 0; i < 2; i++) {
|
||||||
|
@ -15,9 +15,10 @@ using namespace ArduinoJson;
|
|||||||
|
|
||||||
class JsonArray_Container_Tests : public ::testing::Test {
|
class JsonArray_Container_Tests : public ::testing::Test {
|
||||||
protected:
|
protected:
|
||||||
virtual void SetUp() { array = json.createArray(); }
|
virtual void SetUp() {
|
||||||
|
json.clear();
|
||||||
void nodeCountMustBe(int expected) { EXPECT_EQ(expected, json.size()); }
|
array = json.createArray();
|
||||||
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
void firstElementMustBe(T expected) {
|
void firstElementMustBe(T expected) {
|
||||||
@ -31,7 +32,7 @@ class JsonArray_Container_Tests : public ::testing::Test {
|
|||||||
|
|
||||||
void sizeMustBe(int expected) { EXPECT_EQ(expected, array.size()); }
|
void sizeMustBe(int expected) { EXPECT_EQ(expected, array.size()); }
|
||||||
|
|
||||||
StaticJsonBuffer<42> json;
|
StaticJsonBuffer<256> json;
|
||||||
JsonArray array;
|
JsonArray array;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -41,19 +42,18 @@ class JsonArray_Container_Tests : public ::testing::Test {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
TEST_F(JsonArray_Container_Tests, InitialSizeIsZero) {
|
TEST_F(JsonArray_Container_Tests, SuccessIsTrue) {
|
||||||
sizeMustBe(0);
|
EXPECT_TRUE(array.success());
|
||||||
nodeCountMustBe(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(JsonArray_Container_Tests, InitialSizeIsZero) { sizeMustBe(0); }
|
||||||
|
|
||||||
TEST_F(JsonArray_Container_Tests, Grow_WhenValuesAreAdded) {
|
TEST_F(JsonArray_Container_Tests, Grow_WhenValuesAreAdded) {
|
||||||
array.add("hello");
|
array.add("hello");
|
||||||
sizeMustBe(1);
|
sizeMustBe(1);
|
||||||
nodeCountMustBe(2);
|
|
||||||
|
|
||||||
array.add("world");
|
array.add("world");
|
||||||
sizeMustBe(2);
|
sizeMustBe(2);
|
||||||
nodeCountMustBe(3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(JsonArray_Container_Tests, CanStoreIntegers) {
|
TEST_F(JsonArray_Container_Tests, CanStoreIntegers) {
|
||||||
@ -62,7 +62,6 @@ TEST_F(JsonArray_Container_Tests, CanStoreIntegers) {
|
|||||||
|
|
||||||
firstElementMustBe(123);
|
firstElementMustBe(123);
|
||||||
secondElementMustBe(456);
|
secondElementMustBe(456);
|
||||||
nodeCountMustBe(3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(JsonArray_Container_Tests, CanStoreDoubles) {
|
TEST_F(JsonArray_Container_Tests, CanStoreDoubles) {
|
||||||
@ -71,7 +70,6 @@ TEST_F(JsonArray_Container_Tests, CanStoreDoubles) {
|
|||||||
|
|
||||||
firstElementMustBe(123.45);
|
firstElementMustBe(123.45);
|
||||||
secondElementMustBe(456.78);
|
secondElementMustBe(456.78);
|
||||||
nodeCountMustBe(3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(JsonArray_Container_Tests, CanStoreBooleans) {
|
TEST_F(JsonArray_Container_Tests, CanStoreBooleans) {
|
||||||
@ -80,7 +78,6 @@ TEST_F(JsonArray_Container_Tests, CanStoreBooleans) {
|
|||||||
|
|
||||||
firstElementMustBe(true);
|
firstElementMustBe(true);
|
||||||
secondElementMustBe(false);
|
secondElementMustBe(false);
|
||||||
nodeCountMustBe(3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(JsonArray_Container_Tests, CanStoreStrings) {
|
TEST_F(JsonArray_Container_Tests, CanStoreStrings) {
|
||||||
@ -92,7 +89,6 @@ TEST_F(JsonArray_Container_Tests, CanStoreStrings) {
|
|||||||
|
|
||||||
firstElementMustBe(firstString);
|
firstElementMustBe(firstString);
|
||||||
secondElementMustBe(secondString);
|
secondElementMustBe(secondString);
|
||||||
nodeCountMustBe(3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(JsonArray_Container_Tests, CanStoreNestedArrays) {
|
TEST_F(JsonArray_Container_Tests, CanStoreNestedArrays) {
|
||||||
@ -104,7 +100,6 @@ TEST_F(JsonArray_Container_Tests, CanStoreNestedArrays) {
|
|||||||
|
|
||||||
firstElementMustBe(innerarray1);
|
firstElementMustBe(innerarray1);
|
||||||
secondElementMustBe(innerarray2);
|
secondElementMustBe(innerarray2);
|
||||||
nodeCountMustBe(1 + 3 + 3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(JsonArray_Container_Tests, CanStoreNestedObjects) {
|
TEST_F(JsonArray_Container_Tests, CanStoreNestedObjects) {
|
||||||
@ -116,7 +111,6 @@ TEST_F(JsonArray_Container_Tests, CanStoreNestedObjects) {
|
|||||||
|
|
||||||
firstElementMustBe(innerObject1);
|
firstElementMustBe(innerObject1);
|
||||||
secondElementMustBe(innerObject2);
|
secondElementMustBe(innerObject2);
|
||||||
nodeCountMustBe(1 + 3 + 3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(JsonArray_Container_Tests, CanCreateNestedArrays) {
|
TEST_F(JsonArray_Container_Tests, CanCreateNestedArrays) {
|
||||||
@ -125,7 +119,6 @@ TEST_F(JsonArray_Container_Tests, CanCreateNestedArrays) {
|
|||||||
|
|
||||||
firstElementMustBe(innerarray1);
|
firstElementMustBe(innerarray1);
|
||||||
secondElementMustBe(innerarray2);
|
secondElementMustBe(innerarray2);
|
||||||
nodeCountMustBe(1 + 1 + 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(JsonArray_Container_Tests, CanCreateNestedObjects) {
|
TEST_F(JsonArray_Container_Tests, CanCreateNestedObjects) {
|
||||||
@ -134,5 +127,4 @@ TEST_F(JsonArray_Container_Tests, CanCreateNestedObjects) {
|
|||||||
|
|
||||||
firstElementMustBe(innerObject1);
|
firstElementMustBe(innerObject1);
|
||||||
secondElementMustBe(innerObject2);
|
secondElementMustBe(innerObject2);
|
||||||
nodeCountMustBe(3);
|
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
using namespace ArduinoJson;
|
using namespace ArduinoJson;
|
||||||
|
|
||||||
TEST(JsonArray_Iterator_Test, SimpleTest) {
|
TEST(JsonArray_Iterator_Test, SimpleTest) {
|
||||||
StaticJsonBuffer<42> jsonBuffer;
|
StaticJsonBuffer<100> jsonBuffer;
|
||||||
|
|
||||||
JsonArray array = jsonBuffer.createArray();
|
JsonArray array = jsonBuffer.createArray();
|
||||||
array.add(12);
|
array.add(12);
|
||||||
|
Reference in New Issue
Block a user