Преглед на файлове

Test that DynamicJsonBuffer.size() is the sum of all blocks

Benoit Blanchon преди 11 години
родител
ревизия
13e907c894
променени са 2 файла, в които са добавени 13 реда и са изтрити 6 реда
  1. 7 4
      include/ArduinoJson/DynamicJsonBuffer.hpp
  2. 6 2
      test/DynamicJsonBuffer_Basic_Tests.cpp

+ 7 - 4
include/ArduinoJson/DynamicJsonBuffer.hpp

@@ -15,11 +15,13 @@ namespace ArduinoJson {
 // more suitable for embedded systems.
 class DynamicJsonBuffer : public JsonBuffer {
  public:
-  explicit DynamicJsonBuffer() : _next(NULL), _size(0) {}
+  DynamicJsonBuffer() : _next(NULL), _size(0) {}
 
-  size_t size() const { return _size; }
+  ~DynamicJsonBuffer() { delete _next; }
 
-  size_t blockCount() const { return _next ? _next->blockCount() + 1 : 1; }
+  size_t size() const { return _size + (_next ? _next->size() : 0); }
+
+  size_t blockCount() const { return 1 + (_next ? _next->blockCount() : 0); }
 
   static const size_t BLOCK_CAPACITY = 32;
 
@@ -43,10 +45,11 @@ class DynamicJsonBuffer : public JsonBuffer {
     _size += bytes;
     return p;
   }
+
   bool canAllocInOtherBlocks(size_t bytes) const {
     // by design a DynamicJsonBuffer can't alloc a block bigger than
     // BLOCK_CAPACITY
-    return bytes < BLOCK_CAPACITY;
+    return bytes <= BLOCK_CAPACITY;
   }
 
   void* allocInOtherBlocks(size_t bytes) {

+ 6 - 2
test/DynamicJsonBuffer_Basic_Tests.cpp

@@ -29,6 +29,8 @@ TEST_F(DynamicJsonBuffer_Basic_Tests, SizeIncreasesAfterAlloc) {
   ASSERT_EQ(1, buffer.size());
   buffer.alloc(1);
   ASSERT_EQ(2, buffer.size());
+  buffer.alloc(DynamicJsonBuffer::BLOCK_CAPACITY);
+  ASSERT_EQ(2 + DynamicJsonBuffer::BLOCK_CAPACITY, buffer.size());
 }
 
 TEST_F(DynamicJsonBuffer_Basic_Tests, BlockCountDoesntChangeWhenNotFull) {
@@ -43,8 +45,10 @@ TEST_F(DynamicJsonBuffer_Basic_Tests, BlockCountChangesWhenFull) {
 }
 
 TEST_F(DynamicJsonBuffer_Basic_Tests, CanAllocLessThanBlockCapacity) {
-  void* p = buffer.alloc(DynamicJsonBuffer::BLOCK_CAPACITY);
-  ASSERT_TRUE(p);
+  void* p1 = buffer.alloc(DynamicJsonBuffer::BLOCK_CAPACITY);
+  ASSERT_TRUE(p1);
+  void* p2 = buffer.alloc(DynamicJsonBuffer::BLOCK_CAPACITY);
+  ASSERT_TRUE(p2);
 }
 
 TEST_F(DynamicJsonBuffer_Basic_Tests, CantAllocMoreThanBlockCapacity) {