5.1 Unit Test Example
/* tests/test_terminal.c */
#include "d3tui.h"
#include "d3tui_test.h"
void test_terminal_create(void) {
d3tui_term_config_t config = {
.width = 80,
.height = 25,
.scrollback_lines = 100,
.default_fg = 7,
.default_bg = 0
};
d3tui_terminal_t *term = d3tui_term_create(&config);
d3tui_assert_not_null(term, "Terminal creation failed");
uint16_t width, height;
d3tui_term_get_size(term, &width, &height);
d3tui_assert_equal(width, 80, "Width mismatch");
d3tui_assert_equal(height, 25, "Height mismatch");
d3tui_term_destroy(term);
}
void test_terminal_input(void) {
d3tui_terminal_t *term = d3tui_term_create(NULL);
// Test basic input
d3tui_term_input(term, (const uint8_t *)"Hello", 5);
const d3tui_cell_t *cell = d3tui_term_get_cell(term, 0, 0);
d3tui_assert_equal(cell->codepoint, 'H', "First character mismatch");
cell = d3tui_term_get_cell(term, 0, 1);
d3tui_assert_equal(cell->codepoint, 'e', "Second character mismatch");
d3tui_term_destroy(term);
}
void test_terminal_escape_sequences(void) {
d3tui_terminal_t *term = d3tui_term_create(NULL);
// Test cursor movement
d3tui_term_input(term, (const uint8_t *)"\x1B[5;10H", 6); // Move to row 5, col 10
uint16_t row, col;
d3tui_term_get_cursor(term, &row, &col);
d3tui_assert_equal(row, 4, "Cursor row mismatch (0-indexed)"); // 5-1 = 4
d3tui_assert_equal(col, 9, "Cursor col mismatch (0-indexed)"); // 10-1 = 9
// Test clear screen
d3tui_term_input(term, (const uint8_t *)"\x1B[2J", 4);
cell = d3tui_term_get_cell(term, 0, 0);
d3tui_assert_equal(cell->codepoint, ' ', "Screen not cleared");
d3tui_term_destroy(term);
}