93 lines
3.8 KiB
C
93 lines
3.8 KiB
C
#include "driver/gpio.h"
|
||
#include "unity.h"
|
||
#include "unity_test_utils.h"
|
||
#include "relay_chn.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();
|
||
} |