Restructure the whole project tree so that the component can be unit tested. Also update some cmake files to update the modified paths, update test cases etc.
104 lines
4.1 KiB
C
104 lines
4.1 KiB
C
#include "driver/gpio.h"
|
||
#include "unity.h"
|
||
#include "unity_test_utils.h"
|
||
#include "relay_chn.h"
|
||
#include <esp_log.h>
|
||
#include <freertos/FreeRTOS.h>
|
||
#include <freertos/task.h>
|
||
|
||
|
||
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();
|
||
} |