diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/hist_test.c | 6 | ||||
| -rw-r--r-- | tests/input_test.c | 41 |
2 files changed, 43 insertions, 4 deletions
diff --git a/tests/hist_test.c b/tests/hist_test.c index f05c279..d772c5a 100644 --- a/tests/hist_test.c +++ b/tests/hist_test.c @@ -638,9 +638,8 @@ static void test_fuzz_rows(void) static void test_large_wide_count(void) { struct hist h; - struct hist_view view; + struct hist_view view = {0}; assert(term_hist_init(&h, 600, 4 * HIST_PAGE_SIZE)); - term_hist_view_init(&view); struct cell row[4] = { dc('A'), dc(0x65e5), dc(0), dc('B') }; row[1].flags = CELL_WIDE; row[2].flags = CELL_TRAIL; @@ -669,9 +668,8 @@ static void test_large_wide_count(void) static void test_view_after_prefix_eviction(void) { struct hist h; - struct hist_view view; + struct hist_view view = {0}; assert(term_hist_init(&h, 10, 2 * HIST_PAGE_SIZE)); - term_hist_view_init(&view); char bytes[1000]; for (int i = 0; i < 100; i++) { memset(bytes, 'A' + i % 26, sizeof(bytes)); diff --git a/tests/input_test.c b/tests/input_test.c index 78dad07..e3a6b8b 100644 --- a/tests/input_test.c +++ b/tests/input_test.c @@ -372,6 +372,47 @@ int main(void) r = term_input_encode_paste(&plain, "a\nb", 3, buf, 3); assert(r.status == TERM_INPUT_BYTES && r.len == 3 && !memcmp(buf, "a\rb", 3)); } + { + mode(TERM_KEYBOARD_ALL_KEYS | TERM_KEYBOARD_EVENT_TYPES); + K(.key = TERM_KEY_NUM_LOCK); expect("\033[57360;129u"); + K(.key = TERM_KEY_NUM_LOCK, .action = TERM_KEY_REPEAT, + .mods = TERM_MOD_NUM); expect("\033[57360;129:2u"); + K(.key = TERM_KEY_NUM_LOCK, .action = TERM_KEY_RELEASE, + .mods = TERM_MOD_NUM); expect("\033[57360;129:3u"); + K(.key = TERM_KEY_NUM_LOCK, .mods = TERM_MOD_NUM); expect("\033[57360;1u"); + K(.key = TERM_KEY_SCROLL_LOCK); expect("\033[57359;1u"); + } + + { + /* UTF-8 writes must report overflow without crossing the capacity. */ + struct term_key_event key = { .action = TERM_KEY_PRESS, .text = 0x4e2d }; + struct term_mouse_event mouse = { + .kind = TERM_MOUSE_PRESS, .button = TERM_MOUSE_BUTTON_PRIMARY, + .pos = { .x = 190, .y = 95 }, + }; + struct term_modes modes = { + .mouse = TERM_MOUSE_ANY, .mouse_encoding = TERM_MOUSE_ENC_UTF8, + .grid = { .x = 256, .y = 128 }, + }; + static const char *const want[] = { "\xe4\xb8\xad", "\033[M \xc3\x9f\xc2\x80" }; + char buf[16]; + for (size_t which = 0; which < 2; which++) { + size_t len = strlen(want[which]); + for (size_t cap = 0; cap <= len + 1; cap++) { + memset(buf, '!', sizeof(buf)); + struct term_input_result r = which == 0 + ? term_input_encode_key(NULL, &key, &modes, buf, cap) + : term_input_encode_mouse(&mouse, &modes, buf, cap); + assert(buf[cap] == '!'); + if (cap < len) { + assert(r.status == TERM_INPUT_BUFFER_FULL && r.len == 0); + } else { + assert(r.status == TERM_INPUT_BYTES && r.len == len); + assert(!memcmp(buf, want[which], len)); + } + } + } + } puts("PASS: terminal key, mouse, and paste encoding"); return 0; } |
