mirror of
https://github.com/alexhopeoconnor/arduino-home-assistant.git
synced 2026-10-04 02:48:13 +10:00
- Add HAAvailabilityConfig for per-entity availability_topic and payloads - Defer discovery until MQTT connected; publish availability after discovery - HASensor/HANumber: optional suggested_display_precision in discovery - HASerializer/HADictionary: extend for new keys; update device types and mocks - Docs and examples reflect availability and precision usage - Tests updated for discovery and availability behavior - Ignore .cursor/ in repo root
264 lines
14 KiB
C++
264 lines
14 KiB
C++
#include <unity.h>
|
|
#include <Arduino.h>
|
|
#include "test_main.h"
|
|
|
|
static TestCase tests[] = {
|
|
TEST_ENTRY(test_NumberTest_availability),
|
|
TEST_ENTRY(test_NumberTest_command_none),
|
|
TEST_ENTRY(test_NumberTest_command_number_float_p1),
|
|
TEST_ENTRY(test_NumberTest_command_number_float_p2),
|
|
TEST_ENTRY(test_NumberTest_command_number_float_p3),
|
|
TEST_ENTRY(test_NumberTest_command_number_invalid),
|
|
TEST_ENTRY(test_NumberTest_command_number_signed),
|
|
TEST_ENTRY(test_NumberTest_command_number_unsigned),
|
|
TEST_ENTRY(test_NumberTest_command_number_zero),
|
|
TEST_ENTRY(test_NumberTest_command_subscription),
|
|
TEST_ENTRY(test_NumberTest_callback_publish_is_deferred_until_after_dispatch),
|
|
TEST_ENTRY(test_NumberTest_current_state_setter_getter_float),
|
|
TEST_ENTRY(test_NumberTest_current_state_setter_getter_int16),
|
|
TEST_ENTRY(test_NumberTest_current_state_setter_getter_int32),
|
|
TEST_ENTRY(test_NumberTest_current_state_setter_getter_int8),
|
|
TEST_ENTRY(test_NumberTest_current_state_setter_getter_uint16),
|
|
TEST_ENTRY(test_NumberTest_current_state_setter_getter_uint32),
|
|
TEST_ENTRY(test_NumberTest_current_state_setter_getter_uint8),
|
|
TEST_ENTRY(test_NumberTest_default_entity_id_setter),
|
|
TEST_ENTRY(test_NumberTest_default_params),
|
|
TEST_ENTRY(test_NumberTest_device_class),
|
|
TEST_ENTRY(test_NumberTest_different_number_command),
|
|
TEST_ENTRY(test_NumberTest_empty_unit_of_measurement_is_ignored),
|
|
TEST_ENTRY(test_NumberTest_entity_category_setter),
|
|
TEST_ENTRY(test_NumberTest_extended_unique_id),
|
|
TEST_ENTRY(test_NumberTest_icon_setter),
|
|
TEST_ENTRY(test_NumberTest_invalid_unique_id),
|
|
TEST_ENTRY(test_NumberTest_max_setter_p0),
|
|
TEST_ENTRY(test_NumberTest_max_setter_p1),
|
|
TEST_ENTRY(test_NumberTest_max_setter_p2),
|
|
TEST_ENTRY(test_NumberTest_max_setter_p3),
|
|
TEST_ENTRY(test_NumberTest_min_can_equal_max),
|
|
TEST_ENTRY(test_NumberTest_min_setter_p0),
|
|
TEST_ENTRY(test_NumberTest_min_setter_p1),
|
|
TEST_ENTRY(test_NumberTest_min_setter_p2),
|
|
TEST_ENTRY(test_NumberTest_min_setter_p3),
|
|
TEST_ENTRY(test_NumberTest_mode_setter_box),
|
|
TEST_ENTRY(test_NumberTest_mode_setter_slider),
|
|
TEST_ENTRY(test_NumberTest_name_setter),
|
|
TEST_ENTRY(test_NumberTest_object_id_setter),
|
|
TEST_ENTRY(test_NumberTest_optimistic_setter),
|
|
TEST_ENTRY(test_NumberTest_publish_nothing_if_retained),
|
|
TEST_ENTRY(test_NumberTest_publish_state_none),
|
|
TEST_ENTRY(test_NumberTest_retain_setter),
|
|
TEST_ENTRY(test_NumberTest_set_state_float_p1),
|
|
TEST_ENTRY(test_NumberTest_set_state_float_p2),
|
|
TEST_ENTRY(test_NumberTest_set_state_float_p3),
|
|
TEST_ENTRY(test_NumberTest_set_state_int16),
|
|
TEST_ENTRY(test_NumberTest_set_state_int32),
|
|
TEST_ENTRY(test_NumberTest_set_state_int8),
|
|
TEST_ENTRY(test_NumberTest_set_state_uint16),
|
|
TEST_ENTRY(test_NumberTest_set_state_uint32),
|
|
TEST_ENTRY(test_NumberTest_set_state_uint8),
|
|
TEST_ENTRY(test_NumberTest_step_setter_p0),
|
|
TEST_ENTRY(test_NumberTest_step_setter_p1),
|
|
TEST_ENTRY(test_NumberTest_step_setter_p2),
|
|
TEST_ENTRY(test_NumberTest_step_setter_p3),
|
|
TEST_ENTRY(test_NumberTest_unit_of_measurement_setter),
|
|
TEST_ENTRY(test_NumberTest_update_min_max_step_before_connect),
|
|
TEST_ENTRY(test_NumberTest_update_min_max_step_republishes_config),
|
|
TEST_ENTRY(test_NumberTest_update_min_max_step_republishes_device_discovery_when_enabled),
|
|
TEST_ENTRY(test_NumericTest_calculate_float_p1_large),
|
|
TEST_ENTRY(test_NumericTest_calculate_float_p1_medium),
|
|
TEST_ENTRY(test_NumericTest_calculate_float_p1_small),
|
|
TEST_ENTRY(test_NumericTest_calculate_float_p1_unsigned),
|
|
TEST_ENTRY(test_NumericTest_calculate_float_p1_zero),
|
|
TEST_ENTRY(test_NumericTest_calculate_float_p1_zero_signed),
|
|
TEST_ENTRY(test_NumericTest_calculate_float_p1_zero_unsigned),
|
|
TEST_ENTRY(test_NumericTest_calculate_float_p2_large),
|
|
TEST_ENTRY(test_NumericTest_calculate_float_p2_medium),
|
|
TEST_ENTRY(test_NumericTest_calculate_float_p2_small),
|
|
TEST_ENTRY(test_NumericTest_calculate_float_p2_unsigned),
|
|
TEST_ENTRY(test_NumericTest_calculate_float_p2_zero),
|
|
TEST_ENTRY(test_NumericTest_calculate_float_p2_zero_signed),
|
|
TEST_ENTRY(test_NumericTest_calculate_float_p2_zero_unsigned),
|
|
TEST_ENTRY(test_NumericTest_calculate_float_p2_zero_with_padding),
|
|
TEST_ENTRY(test_NumericTest_calculate_float_p3_large),
|
|
TEST_ENTRY(test_NumericTest_calculate_float_p3_medium),
|
|
TEST_ENTRY(test_NumericTest_calculate_float_p3_small),
|
|
TEST_ENTRY(test_NumericTest_calculate_float_p3_unsigned),
|
|
TEST_ENTRY(test_NumericTest_calculate_float_p3_zero),
|
|
TEST_ENTRY(test_NumericTest_calculate_float_p3_zero_signed),
|
|
TEST_ENTRY(test_NumericTest_calculate_float_p3_zero_unsigned),
|
|
TEST_ENTRY(test_NumericTest_calculate_float_p3_zero_with_padding),
|
|
TEST_ENTRY(test_NumericTest_calculate_number_signed_four_digits),
|
|
TEST_ENTRY(test_NumericTest_calculate_number_signed_one_digit),
|
|
TEST_ENTRY(test_NumericTest_calculate_number_signed_three_digits),
|
|
TEST_ENTRY(test_NumericTest_calculate_number_signed_two_digits),
|
|
TEST_ENTRY(test_NumericTest_calculate_number_unsigned_four_digits),
|
|
TEST_ENTRY(test_NumericTest_calculate_number_unsigned_one_digit),
|
|
TEST_ENTRY(test_NumericTest_calculate_number_unsigned_three_digits),
|
|
TEST_ENTRY(test_NumericTest_calculate_number_unsigned_two_digits),
|
|
TEST_ENTRY(test_NumericTest_calculate_number_zero),
|
|
TEST_ENTRY(test_NumericTest_number_to_float_1),
|
|
TEST_ENTRY(test_NumericTest_number_to_float_2),
|
|
TEST_ENTRY(test_NumericTest_number_to_float_3),
|
|
TEST_ENTRY(test_NumericTest_number_to_float_4),
|
|
TEST_ENTRY(test_NumericTest_number_to_float_5),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_float_p0_large),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_float_p0_signed),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_float_p0_small),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_float_p0_zero),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_float_p1_large),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_float_p1_medium),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_float_p1_signed),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_float_p1_small),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_float_p1_zero),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_float_p1_zero_decimal),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_float_p1_zero_decimal_signed),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_float_p2_large),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_float_p2_medium),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_float_p2_signed),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_float_p2_small),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_float_p2_zero),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_float_p2_zero_decimal),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_float_p2_zero_decimal_signed),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_float_p2_zero_with_padding),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_float_p3_large),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_float_p3_medium),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_float_p3_signed),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_float_p3_small),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_float_p3_zero),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_float_p3_zero_decimal),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_float_p3_zero_decimal_signed),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_float_p3_zero_with_padding),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_int16_p0),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_int16_p1),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_int16_p2),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_int16_p3),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_int32_p0),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_int32_p1),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_int32_p2),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_int32_p3),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_int8_p0),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_int8_p1),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_int8_p2),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_int8_p3),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_uint16_p0),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_uint16_p1),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_uint16_p2),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_uint16_p3),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_uint32_p0),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_uint32_p1),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_uint32_p2),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_uint32_p3),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_uint8_p0),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_uint8_p1),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_uint8_p2),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_uint8_p3),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_zero_p0),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_zero_p1),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_zero_p2),
|
|
TEST_ENTRY(test_NumericTest_number_to_str_zero_p3),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_invalid_0),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_invalid_1),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_invalid_2),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_invalid_3),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_max),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_min),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_null),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_signed_0),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_signed_1),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_signed_10),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_signed_11),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_signed_12),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_signed_13),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_signed_14),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_signed_15),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_signed_2),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_signed_3),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_signed_4),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_signed_5),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_signed_6),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_signed_7),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_signed_8),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_signed_9),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_signed_overflow),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_unsigned_0),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_unsigned_1),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_unsigned_10),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_unsigned_11),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_unsigned_12),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_unsigned_13),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_unsigned_14),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_unsigned_15),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_unsigned_2),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_unsigned_3),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_unsigned_4),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_unsigned_5),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_unsigned_6),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_unsigned_7),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_unsigned_8),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_unsigned_9),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_unsigned_overflow),
|
|
TEST_ENTRY(test_NumericTest_str_to_number_zero),
|
|
TEST_ENTRY(test_SelectTest_availability),
|
|
TEST_ENTRY(test_SelectTest_command_option_first),
|
|
TEST_ENTRY(test_SelectTest_command_option_last),
|
|
TEST_ENTRY(test_SelectTest_command_option_middle),
|
|
TEST_ENTRY(test_SelectTest_command_option_non_existing),
|
|
TEST_ENTRY(test_SelectTest_command_subscription),
|
|
TEST_ENTRY(test_SelectTest_current_state_getter),
|
|
TEST_ENTRY(test_SelectTest_different_select_command),
|
|
TEST_ENTRY(test_SelectTest_extended_unique_id),
|
|
TEST_ENTRY(test_SelectTest_icon_setter),
|
|
TEST_ENTRY(test_SelectTest_invalid_options_empty),
|
|
TEST_ENTRY(test_SelectTest_invalid_options_nullptr),
|
|
TEST_ENTRY(test_SelectTest_invalid_unique_id),
|
|
TEST_ENTRY(test_SelectTest_long_options_string_over_255_chars),
|
|
TEST_ENTRY(test_SelectTest_multiple_options),
|
|
TEST_ENTRY(test_SelectTest_name_setter),
|
|
TEST_ENTRY(test_SelectTest_no_options),
|
|
TEST_ENTRY(test_SelectTest_object_id_setter),
|
|
TEST_ENTRY(test_SelectTest_optimistic_setter),
|
|
TEST_ENTRY(test_SelectTest_publish_last_known_state),
|
|
TEST_ENTRY(test_SelectTest_publish_nothing_if_retained),
|
|
TEST_ENTRY(test_SelectTest_publish_state_debounce),
|
|
TEST_ENTRY(test_SelectTest_publish_state_debounce_skip),
|
|
TEST_ENTRY(test_SelectTest_publish_state_first),
|
|
TEST_ENTRY(test_SelectTest_publish_state_last),
|
|
TEST_ENTRY(test_SelectTest_publish_state_none),
|
|
TEST_ENTRY(test_SelectTest_publish_state_only),
|
|
TEST_ENTRY(test_SelectTest_retain_setter),
|
|
TEST_ENTRY(test_SelectTest_single_option),
|
|
TEST_ENTRY(test_SelectTest_callback_publish_is_deferred_until_after_dispatch),
|
|
};
|
|
|
|
static const size_t TEST_COUNT = sizeof(tests) / sizeof(tests[0]);
|
|
static size_t next_index = 0;
|
|
static bool begun = false;
|
|
|
|
void setUp(void) { }
|
|
void tearDown(void) { }
|
|
|
|
void setup()
|
|
{
|
|
Serial.begin(115200);
|
|
delay(500);
|
|
UNITY_BEGIN();
|
|
begun = true;
|
|
}
|
|
|
|
void loop()
|
|
{
|
|
if (begun && next_index < TEST_COUNT) {
|
|
TestCase& t = tests[next_index];
|
|
Serial.print("\n[TEST] ");
|
|
Serial.println(t.name);
|
|
UnityDefaultTestRun(t.fn, t.name, t.line);
|
|
next_index++;
|
|
return;
|
|
}
|
|
|
|
if (begun && next_index >= TEST_COUNT) {
|
|
UNITY_END();
|
|
begun = false;
|
|
}
|
|
}
|