public void TestMapControlChars()
        {
            var            map = new WindowsAnsiCharMap();
            ConsoleKeyInfo processedKey;

            // Enter (Ctrl+J)
            map.ProcessKey(new ConsoleKeyInfo('\x0D', 0, false, false, false));
            Assert.AreEqual(true, map.KeyAvailable);
            processedKey = map.ReadKey();
            Assert.AreEqual(processedKey.Key, ConsoleKey.Enter);
            Assert.AreEqual(processedKey.Modifiers, (ConsoleModifiers)0);
            Assert.AreEqual(false, map.KeyAvailable);

            // Ctrl+C
            map.ProcessKey(new ConsoleKeyInfo('\x03', 0, false, false, false));
            processedKey = map.ReadKey();
            Assert.AreEqual(processedKey.Key, ConsoleKey.C);
            Assert.AreEqual(processedKey.Modifiers, ConsoleModifiers.Control);
        }
Example #2
0
        public void MapControlChars()
        {
            var map = new WindowsAnsiCharMap();

            // Enter (Ctrl+J)
            map.ProcessKey(new ConsoleKeyInfo('\x0D', 0, false, false, false));
            Assert.True(map.KeyAvailable);
            var processedKey = map.ReadKey();

            Assert.Equal(ConsoleKey.Enter, processedKey.Key);
            Assert.Equal((ConsoleModifiers)0, processedKey.Modifiers);
            Assert.False(map.KeyAvailable);

            // Ctrl+C
            map.ProcessKey(new ConsoleKeyInfo('\x03', 0, false, false, false));
            processedKey = map.ReadKey();
            Assert.Equal(ConsoleKey.C, processedKey.Key);
            Assert.Equal(ConsoleModifiers.Control, processedKey.Modifiers);
        }
        public void TestAltSequences()
        {
            var            map = new WindowsAnsiCharMap(1000);
            ConsoleKeyInfo processedKey;

            // ^[[ = Alt+[
            CheckEscapeInput(map, default(ConsoleKeyInfo), StringToCKI("\x1b["), true);
            processedKey = map.ReadKey();
            Assert.AreEqual('[', processedKey.KeyChar);
            Assert.AreEqual(ConsoleModifiers.Alt, processedKey.Modifiers);
            Assert.AreEqual(false, map.KeyAvailable);

            // ^[j = Alt+j
            CheckEscapeInput(map, default(ConsoleKeyInfo), StringToCKI("\x1bj"), true);
            processedKey = map.ReadKey();
            Assert.AreEqual('j', processedKey.KeyChar);
            Assert.AreEqual(ConsoleModifiers.Alt, processedKey.Modifiers);
            Assert.AreEqual(false, map.KeyAvailable);

            // ^[X = Alt+X
            // Currently shift is not set for capitals, so just check the alt
            // parts to allow that behavior to change without breaking this test.
            CheckEscapeInput(map, default(ConsoleKeyInfo), StringToCKI("\x1bX"), true);
            processedKey = map.ReadKey();
            Assert.AreEqual('X', processedKey.KeyChar);
            Assert.AreEqual(ConsoleModifiers.Alt, processedKey.Modifiers & ConsoleModifiers.Alt);
            Assert.AreEqual(false, map.KeyAvailable);

            // ^[^A = Alt+Ctrl+A
            CheckEscapeInput(map, default(ConsoleKeyInfo), StringToCKI("\x1b\x01"), true);
            processedKey = map.ReadKey();
            Assert.AreEqual('\x01', processedKey.KeyChar);
            Assert.AreEqual(ConsoleModifiers.Alt | ConsoleModifiers.Control, processedKey.Modifiers);
            Assert.AreEqual(false, map.KeyAvailable);

            // This is a "tricky" one since ^[O can start a sequence and the second
            // escape needs to cancel sequence processing, make an Alt+O available,
            // and after that has been read make Esc available.
            // ^[O^[ = Alt+O Esc
            var consoleKeys = StringToCKI("\x1bO\x1b");

            foreach (var ck in consoleKeys)
            {
                map.ProcessKey(ck);
            }
            Assert.AreEqual(true, map.KeyAvailable);
            processedKey = map.ReadKey();
            // Alt+O
            Assert.AreEqual('O', processedKey.KeyChar);
            Assert.AreEqual(ConsoleModifiers.Alt, processedKey.Modifiers);
            // Make the map stop looking for an escape sequence.
            map.EscapeTimeout = 0;
            // Esc
            Assert.AreEqual(true, map.KeyAvailable);
            Assert.AreEqual('\x1b', map.ReadKey().KeyChar);
            Assert.AreEqual(false, map.KeyAvailable);
            map.EscapeTimeout = 1000;

            // ^[^[ = Esc Esc, not Alt+Esc.
            consoleKeys = StringToCKI("\x1b\x1b");
            foreach (var ck in consoleKeys)
            {
                map.ProcessKey(ck);
            }
            Assert.AreEqual(true, map.KeyAvailable);
            map.ReadKey();
            map.EscapeTimeout = 0;
            Assert.AreEqual(true, map.KeyAvailable);
            map.ReadKey();
        }