Epic refactoring in progress

This commit is contained in:
Benoit Blanchon
2014-10-28 17:58:46 +01:00
parent 61218f12fd
commit 10ab95522d
10 changed files with 38 additions and 30 deletions

View File

@ -11,6 +11,7 @@
namespace ArduinoJson {
namespace Internals {
// TODO: copy from JsonArrayIterator
class JsonArrayConstIterator {
public:
explicit JsonArrayConstIterator(JsonArrayNode *node) : _node(node) {}

View File

@ -39,6 +39,8 @@ class JsonArrayImpl {
private:
JsonArrayImpl(JsonBuffer *buffer) : _buffer(buffer), _firstNode(NULL) {}
inline void addNode(JsonArrayNode *node);
JsonBuffer *_buffer;
Internals::JsonArrayNode *_firstNode;
};

View File

@ -29,8 +29,10 @@ class JsonArrayIterator {
}
JsonArrayIterator &operator++() {
if (_node) {
_node = _node->next;
updateValue();
}
return *this;
}

View File

@ -25,7 +25,7 @@ class JsonObjectIterator {
}
JsonObjectIterator &operator++() {
_pair._node = _pair._node->next;
if (_pair._node) _pair._node = _pair._node->next;
return *this;
}

View File

@ -24,7 +24,7 @@ class JsonObjectNode {
JsonObjectNode* next;
private:
JsonObjectNode(const char* k) : key(k) {}
JsonObjectNode(const char* k) : key(k), next(NULL) {}
};
}
}

View File

@ -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) {

View File

@ -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;

View File

@ -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++) {

View File

@ -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);
}

View File

@ -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);