From 091672f57ba57b745a51202b38af61bd240d1084 Mon Sep 17 00:00:00 2001 From: Thijs Schreijer Date: Sun, 13 Apr 2025 22:22:46 +0200 Subject: fix(terminal): readansi now properly handles +key key-presses (#62) Also; documents the internal buffer and retry behaviour of readansi --- spec/04-term_spec.lua | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) (limited to 'spec') diff --git a/spec/04-term_spec.lua b/spec/04-term_spec.lua index b3de461..0ce0033 100644 --- a/spec/04-term_spec.lua +++ b/spec/04-term_spec.lua @@ -928,10 +928,31 @@ describe("Terminal:", function() end) + it("reads ANSI escape sequences, just an 'O' ( key press)", function() + setbuffer("\27O") + assert.are.same({"\27O", "ansi"}, {system.readansi(0)}) + end) + + + it("reads +key key presses; +", function() + setbuffer("\27a\27b\27c\27d") + assert.are.same({"\27a", "ansi"}, {system.readansi(0)}) + assert.are.same({"\27b", "ansi"}, {system.readansi(0)}) + assert.are.same({"\27c", "ansi"}, {system.readansi(0)}) + assert.are.same({"\27d", "ansi"}, {system.readansi(0)}) + end) + + + it("reads [ key press; +", function() + setbuffer("\27\27\27\27") + assert.are.same({"\27\27", "ansi"}, {system.readansi(0)}) + assert.are.same({"\27\27", "ansi"}, {system.readansi(0)}) + end) + + it("returns a single character if no sequence is found", function() - setbuffer("\27\27[A") + setbuffer("\27") assert.are.same({"\27", "char"}, {system.readansi(0)}) - assert.are.same({"\27[A", "ansi"}, {system.readansi(0)}) end) @@ -945,6 +966,22 @@ describe("Terminal:", function() assert.is.near(1, timing, 0.5) -- this also works for MacOS in CI end) + + it("incomplete ANSI sequences will be completed on next call", function() + setbuffer("\27[") + assert.are.same({nil, "timeout", "\27["}, {system.readansi(0)}) + setbuffer("A") + assert.are.same({"\27[A", "ansi"}, {system.readansi(0)}) + end) + + + it("incomplete UTF8 sequences will be completed on next call", function() + setbuffer(string.char(240, 159)) + assert.are.same({nil, "timeout", string.char(240, 159)}, {system.readansi(0)}) + setbuffer(string.char(154, 128)) + assert.are.same({"🚀", "char"}, {system.readansi(0)}) + end) + end) end) -- cgit v1.2.3-55-g6feb