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