diff options
Diffstat (limited to 'test/mode_test.c')
| -rw-r--r-- | test/mode_test.c | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/test/mode_test.c b/test/mode_test.c new file mode 100644 index 0000000..1a76ed9 --- /dev/null +++ b/test/mode_test.c @@ -0,0 +1,95 @@ +#include <assert.h> +#include <avr/io.h> + +#include "button.h" +#include "mode.h" +#include "rtc.h" +#include "stubbed/testutils.h" + +void before_each() { + button_inactive_for_ticks = 0; + current_digit_index = 0; + new_minutes = 0; + new_hours = 0; + current_mode = ModeDisplayTime; +} + +void after_each() {} + +void test_switch_to_set_time_mode() { + current_mode = ModeDisplayTime; + apply_button_state(ButtonLongPressed); + assert(current_mode == ModeSetTime); +} + +void test_switch_back_to_display_after_timeout_on_idle() { + current_mode = ModeSetTime; + apply_button_state(ButtonActive); // Start on active + + for (int i = 0; i < SET_MODE_TIMEOUT - 1; i++) { + apply_button_state(ButtonIdle); + assert(current_mode == ModeSetTime); + } + apply_button_state(ButtonIdle); + + // Go back to display mode after timeout + assert(current_mode == ModeDisplayTime); +} + +void test_extend_timeout_on_button_activity() { + current_mode = ModeSetTime; + apply_button_state(ButtonActive); // Start on active + + for (int i = 0; i < SET_MODE_TIMEOUT - 1; i++) { + apply_button_state(ButtonIdle); + assert(current_mode == ModeSetTime); + } + apply_button_state(ButtonActive); + apply_button_state(ButtonIdle); + + // Stay on set mode if interrupted with a button active state + assert(current_mode == ModeSetTime); +} + +void test_update_time() { + current_mode = ModeSetTime; + current_digit_index = 0; + new_hours = 12; + new_minutes = 34; + hours = 0; + minutes = 0; + + apply_button_state(ButtonPressed); + assert(new_hours == 22); + assert(new_minutes == 34); + + apply_button_state(ButtonLongPressed); // Next digit + apply_button_state(ButtonPressed); + assert(new_hours == 23); + assert(new_minutes == 34); + + apply_button_state(ButtonLongPressed); // Next digit + apply_button_state(ButtonPressed); + assert(new_hours == 23); + assert(new_minutes == 44); + + apply_button_state(ButtonLongPressed); // Next digit + apply_button_state(ButtonPressed); + assert(new_hours == 23); + assert(new_minutes == 45); + + assert(hours == 0); + assert(minutes == 0); + apply_button_state(ButtonLongPressed); // Apply new time to rtc + assert(hours == 23); + assert(minutes == 45); +} + +int main() { + TEST test_switch_to_set_time_mode(); + TEST test_switch_back_to_display_after_timeout_on_idle(); + TEST test_extend_timeout_on_button_activity(); + TEST test_update_time(); + return 0; +} + |
