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);
}