Files
arduino-home-assistant/test/test_entities_numeric/test_main.cpp
T
alex b9f4fd7f4b Per-entity availability, deferred discovery publish, suggested precision
- 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
2026-05-05 17:47:55 +10:00

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