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