Files
arduino-home-assistant/tests/SerializerArrayTest/SerializerArrayTest.ino
T
Dawid Chyrzyński 6cf4f11580 HASelect improvements (#221)
* added getCurrentOption method to the HASelect

* final fixes, tests

* added support for publishing None state in the HASelect

* update select.ino

* update docs
2024-02-05 20:44:29 +01:00

110 lines
3.3 KiB
Arduino

#include <AUnit.h>
#include <ArduinoHA.h>
#define assertJson(expectedJson, array) \
const __FlashStringHelper* expectedJsonP = F(expectedJson); \
memset(tmpBuffer, 0, sizeof(tmpBuffer)); \
assertTrue(array.serialize(tmpBuffer)); \
assertEqual(tmpBuffer, expectedJsonP); \
assertEqual((uint16_t)strlen_P(reinterpret_cast<const char *>(expectedJsonP)), array.calculateSize());
using aunit::TestRunner;
char tmpBuffer[32];
AHA_TEST(SerializerArrayTest, empty_array) {
HASerializerArray array(0);
assertEqual(0, array.getItemsNb());
assertJson("[]", array);
}
AHA_TEST(SerializerArrayTest, single_element_progmem) {
HASerializerArray array(1);
bool result = array.add(HANameProperty);
assertTrue(result);
assertEqual(1, array.getItemsNb());
assertEqual((uintptr_t)HANameProperty, (uintptr_t)&(*array.getItems()[0]));
assertJson("[\"name\"]", array);
}
AHA_TEST(SerializerArrayTest, multiple_elements_progmem) {
HASerializerArray array(3);
assertTrue(array.add(HANameProperty));
assertTrue(array.add(HADeviceManufacturerProperty));
assertTrue(array.add(HAUniqueIdProperty));
assertEqual(3, array.getItemsNb());
HASerializerArray::ItemType* items = array.getItems();
assertEqual((uintptr_t)HANameProperty, (uintptr_t)&(*items[0]));
assertEqual((uintptr_t)HADeviceManufacturerProperty, (uintptr_t)&(*items[1]));
assertEqual((uintptr_t)HAUniqueIdProperty, (uintptr_t)&(*items[2]));
assertJson("[\"name\",\"mf\",\"uniq_id\"]", array);
}
AHA_TEST(SerializerArrayTest, size_overflow_progmem) {
HASerializerArray array(1);
assertTrue(array.add(HANameProperty));
assertFalse(array.add(HAUniqueIdProperty));
assertEqual(1, array.getItemsNb());
assertEqual((uintptr_t)HANameProperty, (uintptr_t)&(*array.getItems()[0]));
assertJson("[\"name\"]", array);
}
AHA_TEST(SerializerArrayTest, single_element_ram) {
const char* item = "test";
HASerializerArray array(1, false);
bool result = array.add(item);
assertTrue(result);
assertEqual(1, array.getItemsNb());
assertEqual((uintptr_t)item, (uintptr_t)&(*array.getItem(0)));
assertEqual((uintptr_t)item, (uintptr_t)&(*array.getItems()[0]));
assertJson("[\"test\"]", array);
}
AHA_TEST(SerializerArrayTest, multiple_elements_ram) {
const char* item0 = "item0";
const char* item1 = "item1";
const char* item2 = "item2";
HASerializerArray array(3, false);
assertTrue(array.add(item0));
assertTrue(array.add(item1));
assertTrue(array.add(item2));
assertEqual(3, array.getItemsNb());
HASerializerArray::ItemType* items = array.getItems();
assertEqual((uintptr_t)nullptr, (uintptr_t)&(*array.getItem(-1)));
assertEqual((uintptr_t)nullptr, (uintptr_t)&(*array.getItem(3)));
assertEqual((uintptr_t)item0, (uintptr_t)&(*array.getItem(0)));
assertEqual((uintptr_t)item0, (uintptr_t)&(*items[0]));
assertEqual((uintptr_t)item1, (uintptr_t)&(*array.getItem(1)));
assertEqual((uintptr_t)item1, (uintptr_t)&(*items[1]));
assertEqual((uintptr_t)item2, (uintptr_t)&(*array.getItem(2)));
assertEqual((uintptr_t)item2, (uintptr_t)&(*items[2]));
assertJson("[\"item0\",\"item1\",\"item2\"]", array);
}
void setup()
{
delay(1000);
Serial.begin(115200);
while (!Serial);
}
void loop()
{
TestRunner::run();
delay(1);
}