Compare commits

...

2 Commits

Author SHA1 Message Date
dundargoc
cc323f19bf fixup: quick update, squash later 2024-09-08 00:05:38 +02:00
dundargoc
d8337b47d7 test: add termkey tests
unit testing is my passion
2024-09-07 18:30:07 +02:00

View File

@ -0,0 +1,98 @@
local t = require('test.unit.testutil')
local itp = t.gen_itp(it)
local termkey = t.cimport('./src/nvim/tui/termkey/termkey.h', './src/nvim/tui/termkey/termkey-internal.h')
describe('termkey', function()
itp('01base', function()
local tk = termkey.termkey_new_abstract("vt100", 0)
t.neq(tk, nil);
t.eq(termkey.termkey_get_buffer_size(tk), 256);
t.eq(tk.is_started, 1) -- tk->is_started true after construction
termkey.termkey_stop(tk);
t.neq(tk.is_started, 1) -- tk->is_started false after termkey_stop()
termkey.termkey_start(tk);
t.eq(tk.is_started, 1) -- tk->is_started true after termkey_start()
termkey.termkey_destroy(tk);
end)
itp('02getkey', function()
local tk = termkey.termkey_new_abstract("vt100", 0)
-- buffer free initially 256
t.eq(termkey.termkey_get_buffer_remaining(tk), 256)
local key = t.ffi.new('TermKeyKey')
t.eq(termkey.termkey_getkey(tk, key), termkey.TERMKEY_RES_NONE) -- getkey yields RES_NONE when empty
t.eq(termkey.termkey_push_bytes(tk, "h", 1), 1) -- push_bytes returns 1
t.eq(termkey.termkey_get_buffer_remaining(tk), 255) -- buffer free 255 after push_bytes
t.eq(termkey.termkey_getkey(tk, key), termkey.TERMKEY_RES_KEY) -- getkey yields RES_KEY after h
t.eq(key.type, termkey.TERMKEY_TYPE_UNICODE) -- key.type after h
t.eq(key.code.codepoint, 104) -- key.code.codepoint after h
t.eq(key.modifiers, 0) -- key.modifiers after h
-- is_str(key.utf8, "h", "key.utf8 after h");
-- is_int(termkey_get_buffer_remaining(tk), 256, "buffer free 256 after getkey");
--
-- is_int(termkey_getkey(tk, &key), TERMKEY_RES_NONE, "getkey yields RES_NONE a second time");
--
-- termkey_push_bytes(tk, "\x01", 1);
--
-- is_int(termkey_getkey(tk, &key), TERMKEY_RES_KEY, "getkey yields RES_KEY after C-a");
--
-- is_int(key.type, TERMKEY_TYPE_UNICODE, "key.type after C-a");
-- is_int(key.code.codepoint, 'a', "key.code.codepoint after C-a");
-- is_int(key.modifiers, TERMKEY_KEYMOD_CTRL, "key.modifiers after C-a");
--
-- termkey_push_bytes(tk, "\033OA", 3);
--
-- is_int(termkey_getkey(tk, &key), TERMKEY_RES_KEY, "getkey yields RES_KEY after Up");
--
-- is_int(key.type, TERMKEY_TYPE_KEYSYM, "key.type after Up");
-- is_int(key.code.sym, TERMKEY_SYM_UP, "key.code.sym after Up");
-- is_int(key.modifiers, 0, "key.modifiers after Up");
--
-- is_int(termkey_push_bytes(tk, "\033O", 2), 2, "push_bytes returns 2");
--
-- is_int(termkey_get_buffer_remaining(tk), 254, "buffer free 254 after partial write");
--
-- is_int(termkey_getkey(tk, &key), TERMKEY_RES_AGAIN, "getkey yields RES_AGAIN after partial write");
--
-- termkey_push_bytes(tk, "C", 1);
--
-- is_int(termkey_getkey(tk, &key), TERMKEY_RES_KEY, "getkey yields RES_KEY after Right completion");
--
-- is_int(key.type, TERMKEY_TYPE_KEYSYM, "key.type after Right");
-- is_int(key.code.sym, TERMKEY_SYM_RIGHT, "key.code.sym after Right");
-- is_int(key.modifiers, 0, "key.modifiers after Right");
--
-- is_int(termkey_get_buffer_remaining(tk), 256, "buffer free 256 after completion");
--
-- termkey_push_bytes(tk, "\033[27;5u", 7);
--
-- is_int(termkey_getkey(tk, &key), TERMKEY_RES_KEY, "getkey yields RES_KEY after Ctrl-Escape");
--
-- is_int(key.type, TERMKEY_TYPE_KEYSYM, "key.type after Ctrl-Escape");
-- is_int(key.code.sym, TERMKEY_SYM_ESCAPE, "key.code.sym after Ctrl-Escape");
-- is_int(key.modifiers, TERMKEY_KEYMOD_CTRL, "key.modifiers after Ctrl-Escape");
--
-- termkey_push_bytes(tk, "\0", 1);
--
-- is_int(termkey_getkey(tk, &key), TERMKEY_RES_KEY, "getkey yields RES_KEY after Ctrl-Space");
--
-- is_int(key.type, TERMKEY_TYPE_UNICODE, "key.type after Ctrl-Space");
-- is_int(key.code.codepoint, ' ', "key.code.codepoint after Ctrl-Space");
-- is_int(key.modifiers, TERMKEY_KEYMOD_CTRL, "key.modifiers after Ctrl-Space");
--
-- termkey_destroy(tk);
end)
end)