Exemple #1
0
        public void TestNext()
        {
            var dosKey = new Doskey(10);

            dosKey.Record("in1");
            dosKey.Record("in2");
            dosKey.Record("in3");
            var record1 = dosKey.TryGetPrev();
            var record2 = dosKey.TryGetPrev();
            var record3 = dosKey.TryGetPrev();
            var record4 = dosKey.TryGetPrev();

            var record5 = dosKey.TryGetNext();
            var record6 = dosKey.TryGetNext();
            var record7 = dosKey.TryGetNext();
            var record8 = dosKey.TryGetNext();

            Assert.AreEqual("in3", record1);
            Assert.AreEqual("in2", record2);
            Assert.AreEqual("in1", record3);
            Assert.AreEqual(null, record4);
            Assert.AreEqual("in2", record5);
            Assert.AreEqual("in3", record6);
            Assert.AreEqual(null, record7);
            Assert.AreEqual(null, record8);
        }
Exemple #2
0
        private string[] _HandlerInput(Stack <char> chars)
        {
            var keyInfo = System.Console.ReadKey(true);

            // Ignore if Alt or Ctrl is pressed.
            if ((keyInfo.Modifiers & ConsoleModifiers.Alt) == ConsoleModifiers.Alt)
            {
                return(null);
            }

            if ((keyInfo.Modifiers & ConsoleModifiers.Control) == ConsoleModifiers.Control)
            {
                return(null);
            }

            // Ignore if KeyChar value is \u0000.

            // Ignore tab key.
            if (keyInfo.Key == ConsoleKey.DownArrow)
            {
                var message = _Doskey.TryGetNext();
                if (message != null)
                {
                    _ResetLine(chars, message);
                }
            }

            if (keyInfo.Key == ConsoleKey.UpArrow)
            {
                var message = _Doskey.TryGetPrev();

                if (message != null)
                {
                    _ResetLine(chars, message);
                }
            }

            if (keyInfo.KeyChar == '\u0000')
            {
                return(null);
            }

            if (keyInfo.Key == ConsoleKey.Tab)
            {
                return(null);
            }

            if (keyInfo.Key == ConsoleKey.Escape)
            {
                return(null);
            }

            if (keyInfo.Key == ConsoleKey.Backspace)
            {
                if (chars.Count() > 0)
                {
                    chars.Pop();
                    _Viewer.Write("\b \b");
                }
            }
            else if (keyInfo.Key == ConsoleKey.Enter)
            {
                var commands = new string(chars.Reverse().ToArray());
                commands = commands.Trim();
                if (commands.Length > 0)
                {
                    chars.Clear();

                    _Viewer.Write("\n");

                    _Doskey.Record(commands);
                    return(commands.Split(
                               new[]
                    {
                        ' '
                    },
                               StringSplitOptions.RemoveEmptyEntries));
                }

                return(null);
            }
            else
            {
                chars.Push(keyInfo.KeyChar);
                _Viewer.Write(keyInfo.KeyChar.ToString());
            }

            return(null);
        }
Exemple #3
0
        public void TestPrevLimit()
        {
            var dosKey = new Doskey(2);

            dosKey.Record("in1");
            dosKey.Record("in2");
            dosKey.Record("in3");
            var record1 = dosKey.TryGetPrev();
            var record2 = dosKey.TryGetPrev();
            var record3 = dosKey.TryGetPrev();
            var record4 = dosKey.TryGetPrev();

            Assert.AreEqual("in3", record1);
            Assert.AreEqual("in2", record2);
            Assert.AreEqual(null, record3);
            Assert.AreEqual(null, record4);
        }