Files
alex 40b98a38ee Migrate unit tests to PlatformIO Unity
Replace the legacy tests/ tree (AUnit, EpoxyDuino, Make, AUniter) with
PlatformIO Unity suites under test/, shared helpers, and platformio.ini.
Remove AUnitHelpers and drop the AUnit include from ArduinoHA test builds.
Refresh docs to Markdown-only and document the test workflow in CHANGELOG.
2026-04-19 23:24:28 +10:00

336 lines
17 KiB
C++

#include <unity.h>
#include <Arduino.h>
#include "test_main.h"
static TestCase tests[] = {
TEST_ENTRY(test_CameraTest_availability),
TEST_ENTRY(test_CameraTest_default_entity_id_setter),
TEST_ENTRY(test_CameraTest_default_params),
TEST_ENTRY(test_CameraTest_device_discovery_payload),
TEST_ENTRY(test_CameraTest_encoding_base64),
TEST_ENTRY(test_CameraTest_entity_category_setter),
TEST_ENTRY(test_CameraTest_extended_unique_id),
TEST_ENTRY(test_CameraTest_icon_setter),
TEST_ENTRY(test_CameraTest_invalid_unique_id),
TEST_ENTRY(test_CameraTest_name_setter),
TEST_ENTRY(test_CameraTest_object_id_setter),
TEST_ENTRY(test_CameraTest_publish_image),
TEST_ENTRY(test_CameraTest_publish_nullptr),
TEST_ENTRY(test_CoverTest_availability),
TEST_ENTRY(test_CoverTest_command_close),
TEST_ENTRY(test_CoverTest_command_invalid),
TEST_ENTRY(test_CoverTest_command_open),
TEST_ENTRY(test_CoverTest_command_stop),
TEST_ENTRY(test_CoverTest_command_subscription),
TEST_ENTRY(test_CoverTest_current_position_setter),
TEST_ENTRY(test_CoverTest_current_state_setter),
TEST_ENTRY(test_CoverTest_default_entity_id_setter),
TEST_ENTRY(test_CoverTest_default_params),
TEST_ENTRY(test_CoverTest_default_params_with_position),
TEST_ENTRY(test_CoverTest_device_class),
TEST_ENTRY(test_CoverTest_device_discovery_payload),
TEST_ENTRY(test_CoverTest_different_cover_command),
TEST_ENTRY(test_CoverTest_entity_category_setter),
TEST_ENTRY(test_CoverTest_extended_unique_id),
TEST_ENTRY(test_CoverTest_icon_setter),
TEST_ENTRY(test_CoverTest_invalid_unique_id),
TEST_ENTRY(test_CoverTest_name_setter),
TEST_ENTRY(test_CoverTest_object_id_setter),
TEST_ENTRY(test_CoverTest_optimistic_setter),
TEST_ENTRY(test_CoverTest_publish_last_known_state),
TEST_ENTRY(test_CoverTest_publish_last_known_state_with_position),
TEST_ENTRY(test_CoverTest_publish_nothing_if_retained),
TEST_ENTRY(test_CoverTest_publish_position),
TEST_ENTRY(test_CoverTest_publish_position_debounce),
TEST_ENTRY(test_CoverTest_publish_position_debounce_skip),
TEST_ENTRY(test_CoverTest_publish_position_max),
TEST_ENTRY(test_CoverTest_publish_state_closed),
TEST_ENTRY(test_CoverTest_publish_state_closing),
TEST_ENTRY(test_CoverTest_publish_state_debounce),
TEST_ENTRY(test_CoverTest_publish_state_debounce_skip),
TEST_ENTRY(test_CoverTest_publish_state_open),
TEST_ENTRY(test_CoverTest_publish_state_opening),
TEST_ENTRY(test_CoverTest_publish_state_stopped),
TEST_ENTRY(test_CoverTest_retain_setter),
TEST_ENTRY(test_FanTest_availability),
TEST_ENTRY(test_FanTest_current_speed_setter),
TEST_ENTRY(test_FanTest_current_state_setter),
TEST_ENTRY(test_FanTest_default_entity_id_setter),
TEST_ENTRY(test_FanTest_default_params),
TEST_ENTRY(test_FanTest_default_params_with_speed),
TEST_ENTRY(test_FanTest_device_discovery_payload),
TEST_ENTRY(test_FanTest_entity_category_setter),
TEST_ENTRY(test_FanTest_extended_unique_id),
TEST_ENTRY(test_FanTest_icon_setter),
TEST_ENTRY(test_FanTest_invalid_unique_id),
TEST_ENTRY(test_FanTest_name_setter),
TEST_ENTRY(test_FanTest_object_id_setter),
TEST_ENTRY(test_FanTest_optimistic_setter),
TEST_ENTRY(test_FanTest_publish_last_known_speed),
TEST_ENTRY(test_FanTest_publish_last_known_state),
TEST_ENTRY(test_FanTest_publish_nothing_if_retained),
TEST_ENTRY(test_FanTest_publish_nothing_if_speed_feature_is_disabled),
TEST_ENTRY(test_FanTest_publish_speed),
TEST_ENTRY(test_FanTest_publish_speed_debounce),
TEST_ENTRY(test_FanTest_publish_speed_debounce_skip),
TEST_ENTRY(test_FanTest_publish_state),
TEST_ENTRY(test_FanTest_publish_state_debounce),
TEST_ENTRY(test_FanTest_publish_state_debounce_skip),
TEST_ENTRY(test_FanTest_retain_setter),
TEST_ENTRY(test_FanTest_speed_command_different_fan),
TEST_ENTRY(test_FanTest_speed_command_half),
TEST_ENTRY(test_FanTest_speed_command_in_range),
TEST_ENTRY(test_FanTest_speed_command_invalid),
TEST_ENTRY(test_FanTest_speed_command_max),
TEST_ENTRY(test_FanTest_speed_command_subscription),
TEST_ENTRY(test_FanTest_speed_range_setter),
TEST_ENTRY(test_FanTest_speed_range_setter_feature_disabled),
TEST_ENTRY(test_FanTest_state_command_different_fan),
TEST_ENTRY(test_FanTest_state_command_off),
TEST_ENTRY(test_FanTest_state_command_on),
TEST_ENTRY(test_FanTest_state_command_subscription),
TEST_ENTRY(test_HVACTest_aux_command_different_fan),
TEST_ENTRY(test_HVACTest_aux_command_subscription),
TEST_ENTRY(test_HVACTest_aux_state_command_off),
TEST_ENTRY(test_HVACTest_aux_state_command_on),
TEST_ENTRY(test_HVACTest_availability),
TEST_ENTRY(test_HVACTest_config_with_action),
TEST_ENTRY(test_HVACTest_config_with_aux),
TEST_ENTRY(test_HVACTest_config_with_fan),
TEST_ENTRY(test_HVACTest_config_with_modes),
TEST_ENTRY(test_HVACTest_config_with_power),
TEST_ENTRY(test_HVACTest_config_with_swing),
TEST_ENTRY(test_HVACTest_config_with_target_temperature_p1),
TEST_ENTRY(test_HVACTest_config_with_target_temperature_p2),
TEST_ENTRY(test_HVACTest_config_with_target_temperature_p3),
TEST_ENTRY(test_HVACTest_default_entity_id_setter),
TEST_ENTRY(test_HVACTest_default_params),
TEST_ENTRY(test_HVACTest_device_discovery_payload),
TEST_ENTRY(test_HVACTest_entity_category_setter),
TEST_ENTRY(test_HVACTest_extended_unique_id),
TEST_ENTRY(test_HVACTest_fan_mode_command_auto),
TEST_ENTRY(test_HVACTest_fan_mode_command_different),
TEST_ENTRY(test_HVACTest_fan_mode_command_high),
TEST_ENTRY(test_HVACTest_fan_mode_command_invalid),
TEST_ENTRY(test_HVACTest_fan_mode_command_low),
TEST_ENTRY(test_HVACTest_fan_mode_command_medium),
TEST_ENTRY(test_HVACTest_fan_mode_command_subscription),
TEST_ENTRY(test_HVACTest_fan_modes_setter_auto_only),
TEST_ENTRY(test_HVACTest_fan_modes_setter_high_only),
TEST_ENTRY(test_HVACTest_fan_modes_setter_low_only),
TEST_ENTRY(test_HVACTest_fan_modes_setter_medium_only),
TEST_ENTRY(test_HVACTest_fan_modes_setter_mixed),
TEST_ENTRY(test_HVACTest_icon_setter),
TEST_ENTRY(test_HVACTest_invalid_unique_id),
TEST_ENTRY(test_HVACTest_max_temp_setter),
TEST_ENTRY(test_HVACTest_max_temp_setter_p2),
TEST_ENTRY(test_HVACTest_min_temp_setter),
TEST_ENTRY(test_HVACTest_min_temp_setter_p2),
TEST_ENTRY(test_HVACTest_mode_command_auto),
TEST_ENTRY(test_HVACTest_mode_command_cool),
TEST_ENTRY(test_HVACTest_mode_command_dry),
TEST_ENTRY(test_HVACTest_mode_command_fan_only),
TEST_ENTRY(test_HVACTest_mode_command_heat),
TEST_ENTRY(test_HVACTest_mode_command_off),
TEST_ENTRY(test_HVACTest_mode_command_subscription),
TEST_ENTRY(test_HVACTest_modes_setter_auto_only),
TEST_ENTRY(test_HVACTest_modes_setter_cool_only),
TEST_ENTRY(test_HVACTest_modes_setter_dry_only),
TEST_ENTRY(test_HVACTest_modes_setter_fan_only_only),
TEST_ENTRY(test_HVACTest_modes_setter_heat_only),
TEST_ENTRY(test_HVACTest_modes_setter_mixed),
TEST_ENTRY(test_HVACTest_modes_setter_off_only),
TEST_ENTRY(test_HVACTest_name_setter),
TEST_ENTRY(test_HVACTest_object_id_setter),
TEST_ENTRY(test_HVACTest_power_command_different),
TEST_ENTRY(test_HVACTest_power_command_off),
TEST_ENTRY(test_HVACTest_power_command_on),
TEST_ENTRY(test_HVACTest_power_command_subscription),
TEST_ENTRY(test_HVACTest_publish_action_cooling),
TEST_ENTRY(test_HVACTest_publish_action_debounce),
TEST_ENTRY(test_HVACTest_publish_action_debounce_skip),
TEST_ENTRY(test_HVACTest_publish_action_drying),
TEST_ENTRY(test_HVACTest_publish_action_fan),
TEST_ENTRY(test_HVACTest_publish_action_heating),
TEST_ENTRY(test_HVACTest_publish_action_idle),
TEST_ENTRY(test_HVACTest_publish_action_off),
TEST_ENTRY(test_HVACTest_publish_action_on_connect),
TEST_ENTRY(test_HVACTest_publish_aux_state_debounce),
TEST_ENTRY(test_HVACTest_publish_aux_state_debounce_skip),
TEST_ENTRY(test_HVACTest_publish_aux_state_on),
TEST_ENTRY(test_HVACTest_publish_aux_state_on_connect),
TEST_ENTRY(test_HVACTest_publish_current_temperature),
TEST_ENTRY(test_HVACTest_publish_current_temperature_debounce),
TEST_ENTRY(test_HVACTest_publish_current_temperature_debounce_skip),
TEST_ENTRY(test_HVACTest_publish_current_temperature_on_connect),
TEST_ENTRY(test_HVACTest_publish_current_temperature_p2),
TEST_ENTRY(test_HVACTest_publish_current_temperature_p3),
TEST_ENTRY(test_HVACTest_publish_fan_mode_auto),
TEST_ENTRY(test_HVACTest_publish_fan_mode_debounce),
TEST_ENTRY(test_HVACTest_publish_fan_mode_debounce_skip),
TEST_ENTRY(test_HVACTest_publish_fan_mode_high),
TEST_ENTRY(test_HVACTest_publish_fan_mode_low),
TEST_ENTRY(test_HVACTest_publish_fan_mode_medium),
TEST_ENTRY(test_HVACTest_publish_fan_mode_on_connect),
TEST_ENTRY(test_HVACTest_publish_mode_auto),
TEST_ENTRY(test_HVACTest_publish_mode_cool),
TEST_ENTRY(test_HVACTest_publish_mode_dry),
TEST_ENTRY(test_HVACTest_publish_mode_fan_only),
TEST_ENTRY(test_HVACTest_publish_mode_heat),
TEST_ENTRY(test_HVACTest_publish_mode_off),
TEST_ENTRY(test_HVACTest_publish_mode_on_connect),
TEST_ENTRY(test_HVACTest_publish_nothing_if_retained),
TEST_ENTRY(test_HVACTest_publish_swing_mode_debounce),
TEST_ENTRY(test_HVACTest_publish_swing_mode_debounce_skip),
TEST_ENTRY(test_HVACTest_publish_swing_mode_off),
TEST_ENTRY(test_HVACTest_publish_swing_mode_on),
TEST_ENTRY(test_HVACTest_publish_swing_mode_on_connect),
TEST_ENTRY(test_HVACTest_publish_target_temperature),
TEST_ENTRY(test_HVACTest_publish_target_temperature_debounce),
TEST_ENTRY(test_HVACTest_publish_target_temperature_debounce_skip),
TEST_ENTRY(test_HVACTest_publish_target_temperature_on_connect),
TEST_ENTRY(test_HVACTest_publish_target_temperature_p2),
TEST_ENTRY(test_HVACTest_publish_target_temperature_p3),
TEST_ENTRY(test_HVACTest_retain_setter),
TEST_ENTRY(test_HVACTest_swing_mode_command_different),
TEST_ENTRY(test_HVACTest_swing_mode_command_invalid),
TEST_ENTRY(test_HVACTest_swing_mode_command_off),
TEST_ENTRY(test_HVACTest_swing_mode_command_on),
TEST_ENTRY(test_HVACTest_swing_mode_command_subscription),
TEST_ENTRY(test_HVACTest_swing_modes_setter_off_only),
TEST_ENTRY(test_HVACTest_swing_modes_setter_on_only),
TEST_ENTRY(test_HVACTest_target_temperature_command_different),
TEST_ENTRY(test_HVACTest_target_temperature_command_invalid),
TEST_ENTRY(test_HVACTest_target_temperature_command_p1),
TEST_ENTRY(test_HVACTest_target_temperature_command_p2),
TEST_ENTRY(test_HVACTest_target_temperature_command_p3),
TEST_ENTRY(test_HVACTest_target_temperature_command_subscription),
TEST_ENTRY(test_HVACTest_temperature_unit_c_setter),
TEST_ENTRY(test_HVACTest_temperature_unit_f_setter),
TEST_ENTRY(test_HVACTest_temp_step_setter),
TEST_ENTRY(test_HVACTest_temp_step_setter_p2),
TEST_ENTRY(test_LightTest_availability),
TEST_ENTRY(test_LightTest_brightness_command_different_light),
TEST_ENTRY(test_LightTest_brightness_command_invalid),
TEST_ENTRY(test_LightTest_brightness_command_max),
TEST_ENTRY(test_LightTest_brightness_command_min),
TEST_ENTRY(test_LightTest_brightness_command_overflow),
TEST_ENTRY(test_LightTest_brightness_command_subscription),
TEST_ENTRY(test_LightTest_brightness_scale_feature_disabled),
TEST_ENTRY(test_LightTest_brightness_scale_setter),
TEST_ENTRY(test_LightTest_color_temperature_command),
TEST_ENTRY(test_LightTest_color_temperature_command_different_light),
TEST_ENTRY(test_LightTest_color_temperature_command_invalid),
TEST_ENTRY(test_LightTest_color_temperature_command_max),
TEST_ENTRY(test_LightTest_color_temperature_command_min),
TEST_ENTRY(test_LightTest_color_temperature_command_subscription),
TEST_ENTRY(test_LightTest_color_temperature_range_setter),
TEST_ENTRY(test_LightTest_color_temperature_range_setter_feature_disabled),
TEST_ENTRY(test_LightTest_current_brightness_setter),
TEST_ENTRY(test_LightTest_current_color_temperature_setter),
TEST_ENTRY(test_LightTest_current_rgb_color_setter),
TEST_ENTRY(test_LightTest_current_state_setter),
TEST_ENTRY(test_LightTest_default_params),
TEST_ENTRY(test_LightTest_default_params_with_brightness),
TEST_ENTRY(test_LightTest_default_params_with_brightness_and_color_temp),
TEST_ENTRY(test_LightTest_default_params_with_color_temp),
TEST_ENTRY(test_LightTest_default_params_with_rgb),
TEST_ENTRY(test_LightTest_extended_unique_id),
TEST_ENTRY(test_LightTest_icon_setter),
TEST_ENTRY(test_LightTest_invalid_unique_id),
TEST_ENTRY(test_LightTest_name_setter),
TEST_ENTRY(test_LightTest_object_id_setter),
TEST_ENTRY(test_LightTest_optimistic_setter),
TEST_ENTRY(test_LightTest_publish_brightness),
TEST_ENTRY(test_LightTest_publish_brightness_debounce),
TEST_ENTRY(test_LightTest_publish_brightness_debounce_skip),
TEST_ENTRY(test_LightTest_publish_color_temperature),
TEST_ENTRY(test_LightTest_publish_color_temperature_debounce),
TEST_ENTRY(test_LightTest_publish_color_temperature_debounce_skip),
TEST_ENTRY(test_LightTest_publish_last_known_brightness),
TEST_ENTRY(test_LightTest_publish_last_known_color_temperature),
TEST_ENTRY(test_LightTest_publish_last_known_rgb_color),
TEST_ENTRY(test_LightTest_publish_last_known_state),
TEST_ENTRY(test_LightTest_publish_nothing_if_brightness_feature_is_disabled),
TEST_ENTRY(test_LightTest_publish_nothing_if_color_temperature_feature_is_disabled),
TEST_ENTRY(test_LightTest_publish_nothing_if_retained),
TEST_ENTRY(test_LightTest_publish_rgb_color),
TEST_ENTRY(test_LightTest_publish_rgb_color_debounce),
TEST_ENTRY(test_LightTest_publish_rgb_color_debounce_skip),
TEST_ENTRY(test_LightTest_publish_state),
TEST_ENTRY(test_LightTest_publish_state_debounce),
TEST_ENTRY(test_LightTest_publish_state_debounce_skip),
TEST_ENTRY(test_LightTest_retain_setter),
TEST_ENTRY(test_LightTest_rgb_color_command_different_light),
TEST_ENTRY(test_LightTest_rgb_color_invalid_1_command),
TEST_ENTRY(test_LightTest_rgb_color_invalid_2_command),
TEST_ENTRY(test_LightTest_rgb_color_invalid_3_command),
TEST_ENTRY(test_LightTest_rgb_color_invalid_4_command),
TEST_ENTRY(test_LightTest_rgb_color_invalid_5_command),
TEST_ENTRY(test_LightTest_rgb_color_invalid_6_command),
TEST_ENTRY(test_LightTest_rgb_color_max_command),
TEST_ENTRY(test_LightTest_rgb_color_min_command),
TEST_ENTRY(test_LightTest_rgb_color_mix_command),
TEST_ENTRY(test_LightTest_rgb_color_small_command),
TEST_ENTRY(test_LightTest_rgb_command_subscription),
TEST_ENTRY(test_LightTest_state_command_different_light),
TEST_ENTRY(test_LightTest_state_command_off),
TEST_ENTRY(test_LightTest_state_command_on),
TEST_ENTRY(test_LightTest_state_command_subscription),
TEST_ENTRY(test_LockTest_availability),
TEST_ENTRY(test_LockTest_command_invalid),
TEST_ENTRY(test_LockTest_command_lock),
TEST_ENTRY(test_LockTest_command_open),
TEST_ENTRY(test_LockTest_command_subscription),
TEST_ENTRY(test_LockTest_command_unlock),
TEST_ENTRY(test_LockTest_current_state_setter),
TEST_ENTRY(test_LockTest_default_entity_id_setter),
TEST_ENTRY(test_LockTest_default_params),
TEST_ENTRY(test_LockTest_device_discovery_payload),
TEST_ENTRY(test_LockTest_different_lock_command),
TEST_ENTRY(test_LockTest_entity_category_setter),
TEST_ENTRY(test_LockTest_extended_unique_id),
TEST_ENTRY(test_LockTest_icon_setter),
TEST_ENTRY(test_LockTest_invalid_unique_id),
TEST_ENTRY(test_LockTest_name_setter),
TEST_ENTRY(test_LockTest_object_id_setter),
TEST_ENTRY(test_LockTest_optimistic_setter),
TEST_ENTRY(test_LockTest_publish_last_known_state),
TEST_ENTRY(test_LockTest_publish_nothing_if_retained),
TEST_ENTRY(test_LockTest_publish_state_locked),
TEST_ENTRY(test_LockTest_publish_state_unlocked),
TEST_ENTRY(test_LockTest_retain_setter),
};
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;
}
}