From 308689594bf564be4e036a27170433431504d6cf Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Sat, 10 Jan 2026 19:50:37 -0800 Subject: [PATCH] tests: add some simple input tests --- source/dcell/parser.d | 44 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/source/dcell/parser.d b/source/dcell/parser.d index 2262f09..0fc6a2d 100644 --- a/source/dcell/parser.d +++ b/source/dcell/parser.d @@ -1067,6 +1067,30 @@ private: } } + // Test for Win32 Input Mode + unittest + { + Parser p = new Parser(); + + // simple key down ("A") + assert(p.parse("\x1b[65;0;65;1;0;1_")); + + auto ev = p.events(); + assert(ev.length == 1); + assert(ev[0].type == EventType.key); + assert(ev[0].key.key == Key.graph); + assert(ev[0].key.ch == 'A'); + assert(ev[0].key.mod == Modifiers.none); + + // ignore key up event + assert(p.parse("\x1b[65;0;65;0;0;1_")); + assert(p.events().length == 0); + + // ignore lone modifier (ctrl) + assert(p.parse("\x1b[17;0;0;1;8;1_")); + assert(p.events().length == 0); + } + // calculate the modifiers from the CSI modifier parameter. Modifiers calcModifier(int n) pure nothrow @safe @nogc { @@ -1258,5 +1282,25 @@ private: assert(ev[0].type == EventType.key); assert(ev[0].key.key == Key.graph); assert(ev[0].key.ch == '€'); + + // SOS (no event) + assert(p.parse(['\x1b', 'X', 'p', '\x1b', '\\'])); + assert(p.events().length == 0); + assert(p.empty()); + + // PM (no event) + assert(p.parse(['\x1b', '^', 'p', '\x1b', '\\'])); + assert(p.events().length == 0); + assert(p.empty()); + + // PM (terminate by BEL) + assert(p.parse(['\x1b', '^', 'p', '\x07'])); + assert(p.events().length == 0); + assert(p.empty()); + + // APC (no event) + assert(p.parse(['\x1b', '_', 'p', '\x1b', '\\'])); + assert(p.events().length == 0); + assert(p.empty()); } }