#include "driver/gpio.h" #include "unity.h" #include "unity_test_utils.h" #include "relay_chn.h" #include #include #include const gpio_num_t gpio_map[] = {GPIO_NUM_4, GPIO_NUM_5, GPIO_NUM_18, GPIO_NUM_19}; const uint8_t gpio_count = sizeof(gpio_map) / sizeof(gpio_map[0]); const uint8_t relay_chn_count = gpio_count / 2; void setUp(void) { // Her testten önce çalışacak kod // relay_chn_create'i burada çağırarak her testin temiz bir başlangıç yapmasını sağlayalım. TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); // Tüm röleleri başlangıçta durdur (temiz bir durum için) for (uint8_t i = 0; i < relay_chn_count; i++) { relay_chn_stop(i); } vTaskDelay(pdMS_TO_TICKS(100)); // Rölelerin stabilize olması için kısa bir gecikme } void tearDown(void) { // Her testten sonra çalışacak kod (isteğe bağlı, genellikle cleanup için) // Örneğin, GPIO'ları de-initialize edebilirsin, ama relay_chn'in buna ihtiyacı yoksa boş bırakabilirsin. // Ancak her test sonunda tüm rölelerin kapalı olduğundan emin olmak iyi bir pratik. for (uint8_t i = 0; i < relay_chn_count; i++) { relay_chn_stop(i); } vTaskDelay(pdMS_TO_TICKS(100)); } TEST_CASE("Relay channels run forward and update state", "[relay_chn][forward]") { // Test forward run on all channels for (uint8_t i = 0; i < relay_chn_count; i++) { TEST_ASSERT_EQUAL(RELAY_CHN_STATE_STOPPED, relay_chn_get_state(i)); relay_chn_run_forward(i); // Run the channel forward TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(i)); relay_chn_stop(i); // Stop the channel TEST_ASSERT_EQUAL(RELAY_CHN_STATE_STOPPED, relay_chn_get_state(i)); relay_chn_flip_direction(i); // Flip the direction TEST_ASSERT_EQUAL(RELAY_CHN_DIRECTION_FLIPPED, relay_chn_get_direction(i)); relay_chn_run_forward(i); // Run the channel forward TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(i)); relay_chn_stop(i); // Stop the channel TEST_ASSERT_EQUAL(RELAY_CHN_STATE_STOPPED, relay_chn_get_state(i)); } } TEST_CASE("Relay channels run reverse and update state", "[relay_chn][reverse]") { // Test reverse run on all channels for (uint8_t i = 0; i < relay_chn_count; i++) { TEST_ASSERT_EQUAL(RELAY_CHN_STATE_STOPPED, relay_chn_get_state(i)); relay_chn_run_reverse(i); // Run the channel reverse TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(i)); relay_chn_stop(i); // Stop the channel TEST_ASSERT_EQUAL(RELAY_CHN_STATE_STOPPED, relay_chn_get_state(i)); relay_chn_flip_direction(i); // Flip the direction TEST_ASSERT_EQUAL(RELAY_CHN_DIRECTION_FLIPPED, relay_chn_get_direction(i)); relay_chn_run_reverse(i); // Run the channel forward TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(i)); relay_chn_stop(i); // Stop the channel TEST_ASSERT_EQUAL(RELAY_CHN_STATE_STOPPED, relay_chn_get_state(i)); } } static void check_channels_state_unchanged(void) { for (uint8_t i = 0; i < relay_chn_count; i++) { TEST_ASSERT_EQUAL(RELAY_CHN_STATE_STOPPED, relay_chn_get_state(i)); TEST_ASSERT_EQUAL(RELAY_CHN_DIRECTION_DEFAULT, relay_chn_get_direction(i)); } } TEST_CASE("Relay channels do not change state for invalid channel", "[relay_chn][invalid]") { // Test invalid channel run relay_chn_run_forward(relay_chn_count); // İlk geçersiz kanal (index out of bounds) check_channels_state_unchanged(); // Tüm geçerli kanalların durumu değişmemeli relay_chn_run_reverse(relay_chn_count); check_channels_state_unchanged(); relay_chn_stop(relay_chn_count); check_channels_state_unchanged(); relay_chn_flip_direction(relay_chn_count); check_channels_state_unchanged(); } void app_main(void) { ESP_LOGI("APP_MAIN", "Starting relay_chn unit tests..."); unity_run_all_tests(); ESP_LOGI("APP_MAIN", "All relay_chn tests completed. Restarting in 10 seconds..."); vTaskDelay(pdMS_TO_TICKS(10000)); esp_restart(); }