Exemplo n.º 1
0
        public void EraseAbove()
        {
            var t = new VirtualTerminalController();
            var d = new DataConsumer(t);

            t.ResizeView(5, 5);
            t.ScreenAlignmentTest();
            t.SetCursorPosition(4, 2);
            t.EraseAbove();

            Assert.Equal(ExpectedEraseAbove, t.GetScreenText());

            t.ScreenAlignmentTest();
            PushToTerminal(d, "\u001B#8\u001B[1J");
            Assert.Equal(ExpectedEraseAbove, t.GetScreenText());
        }
Exemplo n.º 2
0
        public void CursorBackwardTabs()
        {
            var t = new VirtualTerminalController();

            t.ResizeView(80, 25);

            var d = new DataConsumer(t);

            Push(d, "\t   \t       \t        \t".CHT().CHT(2).CBT());
            Assert.Equal(0, t.ViewPort.CursorPosition.Row);
            Assert.Equal(56, t.ViewPort.CursorPosition.Column);

            Push(d, "".CBT(2));
            Assert.Equal(0, t.ViewPort.CursorPosition.Row);
            Assert.Equal(40, t.ViewPort.CursorPosition.Column);
        }
Exemplo n.º 3
0
        public void ScrollFullUp()
        {
            var t = new VirtualTerminalController();
            var d = new DataConsumer(t);

            t.ResizeView(5, 5);
            t.ScreenAlignmentTest();

            PushToTerminal(d, "AAAAABBBBBCCCCCDDDDDEEEEEFFFF");
            t.ReverseIndex();
            t.ReverseIndex();
            t.ReverseIndex();
            t.ReverseIndex();
            t.ReverseIndex();
            Assert.Equal(ExpectedScrollUp, t.GetScreenText());
        }
Exemplo n.º 4
0
        public void Backspace()
        {
            var t = new VirtualTerminalController();
            var d = new DataConsumer(t);

            t.ResizeView(200, 100);
            PushToTerminal(d, "12345\u001b[D\u001b[D\b0");

            Assert.Equal("12045 ", t.GetVisibleChars(0, 0, 6));

            t = new VirtualTerminalController();
            t.ResizeView(200, 100);
            PushToTerminal(d, "12345\u001b[D\u001b[D\b");

            Assert.Equal("12345 ", t.GetVisibleChars(0, 0, 6));
        }
Exemplo n.º 5
0
        public void MoveCursorPastEndOfScreen()
        {
            var t = new VirtualTerminalController();
            var d = new DataConsumer(t);

            t.ResizeView(41, 18);
            t.TestPatternScrollingDiagonalLower();

            // \e[?1l
            Push(d, "".DECRST(1));  // Ps = 1  -> Normal Cursor Keys (DECCKM).
            // \e>
            Push(d, "".DECKPNM());  // Normal keypad
            // \e[19;1H
            Push(d, "".CUP(19, 1));

            Assert.True(IsCursor(t, 17, 0));
        }
Exemplo n.º 6
0
        public void Low()
        {
            string s;
            var    t = new VirtualTerminalController();
            var    d = new DataConsumer(t);

            t.ResizeView(80, 25);
            t.TestPatternScrollingDiagonalLower();

            // PUSH "ABC"
            //   putglyph 0x41 1 0,0
            //   putglyph 0x42 1 0,1
            //   putglyph 0x43 1 0,2
            Push(d, "ABC");
            s = t.GetVisibleChars(0, 0, 81);
            Assert.Equal(ExpectLow, s);
        }
Exemplo n.º 7
0
        public void SS3()
        {
            string s;
            var    t = new VirtualTerminalController();
            var    d = new DataConsumer(t);

            t.ResizeView(80, 25);
            t.TestPatternScrollingDiagonalUpper();

            // PUSH "a\x{8f}aa"
            //   putglyph 0x61 1 0,12
            //   putglyph 0x2592 1 0,13
            //   putglyph 0x61 1 0,14
            Push(d, "".DesignateG3('0').T("a").SS3('a').T("a"));
            s = t.GetVisibleChars(0, 0, 81);
            Assert.Equal(ExpectDesignateAndShiftBack, s);
        }
Exemplo n.º 8
0
        public void Utf8SplitWrites()
        {
            string s;
            var    t = new VirtualTerminalController();
            var    d = new DataConsumer(t);

            t.ResizeView(80, 25);
            t.TestPatternScrollingDiagonalLower();

            // PUSH "\xC3"
            // PUSH "\x81"
            //   putglyph 0xc1 1 0,0
            d.Push(new byte[] { 0xC3 });
            d.Push(new byte[] { 0x81 });
            s = t.GetVisibleChars(0, 0, 81);
            Assert.Equal(ExpectUtf8SplitWrites, s);
        }
Exemplo n.º 9
0
        public void AutoWrap80()
        {
            string s;
            var    t = new VirtualTerminalController();

            t.Debugging = true;
            var d = new DataConsumer(t);

            t.ResizeView(80, 25);

            Push(d, "Test of autowrap, mixing control and print characters.\r");
            Push(d, "\r\n");
            Push(d, "The left/right margins should have letters in order:\r");
            Push(d, "\r\n");
            Push(d, "".STBM(3, 21).EnableDECOM());

            for (char ch = 'A'; ch <= 'Z'; ch++)
            {
                switch ((ch - 'A') % 4)
                {
                case 0:
                    Push(d, "".CUP(19, 1).T(ch.ToString()).CUP(19, 80).T(char.ToLower(ch).ToString()).CR().LF());
                    Push(d, "".CUP(18, 80).T(char.ToLower(ch).ToString()));
                    break;

                case 1:
                    Push(d, ch.ToString().CUP(19, 80).T(char.ToLower(ch).ToString() + "\b \b").CR().LF());
                    break;

                case 2:
                    Push(d, "".CUP(19, 80).T(ch.ToString() + "\b\b\t\t" + char.ToLower(ch).ToString()));
                    Push(d, "".CUP(19, 2).T("\b" + ch.ToString()).CR().LF());
                    break;

                case 3:
                    Push(d, "".CUP(19, 80).CR().LF());
                    Push(d, "".CUP(18, 1).T(ch.ToString()).CUP(18, 80).T(char.ToLower(ch).ToString()));
                    break;
                }
            }

            Push(d, "".DisableDECOM().STBM().CUP(22, 1).T("Push <RETURN>"));

            s = t.GetScreenText();
            Assert.Equal(ExpectAutoWrap80, s);
        }
Exemplo n.º 10
0
        public void OneThirtyTwoColumnMode()
        {
            var t = new VirtualTerminalController();
            var d = new DataConsumer(t);

            t.ResizeView(5, 5);
            PushToTerminal(d, "\u001b[?3h");

            Assert.Equal(132, t.Columns);
            Assert.Equal(5, t.Rows);

            for (var i = 0; i < 16; i++)
            {
                PushToTerminal(d, "0123456789");
            }

            Assert.Equal(Expected132ColumnMode, t.GetScreenText());
        }
Exemplo n.º 11
0
        public void HorizontalTabSet()
        {
            string s;
            var    t = new VirtualTerminalController();
            var    d = new DataConsumer(t);

            t.ResizeView(80, 25);
            t.TestPatternScrollingDiagonalLower();

            // PUSH "\e[5G\eH"
            // PUSH "\e[G\tX"
            //   putglyph 0x58 1 0,4
            //   ?cursor = 0,5
            Push(d, "".CHA(5).HTS().CHA().T("\tX"));
            s = t.GetVisibleChars(0, 0, 81);
            Assert.Equal(ExpectHorizontalTabSet, s);
            Assert.True(IsCursor(t, 0, 5));
        }
Exemplo n.º 12
0
        public void EightiethPhantom()
        {
            string s;
            var    t = new VirtualTerminalController();
            var    d = new DataConsumer(t);

            t.ResizeView(80, 25);
            t.TestPatternScrollingDiagonalLower();

            //PUSH "\e[79G"
            //PUSH "A"
            //  putglyph 0x41 1 0,79
            //  ?cursor = 0,79
            Push(d, "".CHA(80).T("A"));
            s = t.GetVisibleChars(0, 0, 81);
            Assert.Equal(ExpectEightiethPhantom, s);
            Assert.True(IsCursor(t, 0, 79));
        }
Exemplo n.º 13
0
        public void OriginModeWithoutScrollRegion()
        {
            var t = new VirtualTerminalController();
            var d = new DataConsumer(t);

            t.ResizeView(80, 25);
            t.TestPatternScrollingDiagonalLower();

            // PUSH "\e[5;15r"
            // PUSH "\e[H"
            //   ?cursor = 0,0
            Push(d, "".STBM(5, 15).CUP());
            Assert.True(IsCursor(t, 0, 0));

            // PUSH "\e[?6h"
            // PUSH "\e[?69h"
            // PUSH "\e[20;60s"
            // PUSH "\e[H"
            //   ?cursor = 4,19
            //
            // PUSH "\e[?69l"
            Push(d, "".EnableDECOM().EnableLRMM().LRMM(20, 60).CUP());
            Assert.True(IsCursor(t, 4, 19));

            // PUSH "\e[?69l"
            Push(d, "".DisableLRMM());

            // PUSH "\e[H"
            // PUSH "\e[10A"
            //   ?cursor = 4,0
            Push(d, "".CUP().CUU(10));
            Assert.True(IsCursor(t, 4, 0));

            // PUSH "\e[20B"
            //   ?cursor = 14,0
            Push(d, "".CUD(20));
            Assert.True(IsCursor(t, 14, 0));

            // PUSH "\e[?6l"
            // PUSH "\e[r\e[?6h"
            //   ?cursor = 0,0
            Push(d, "".DisableDECOM().STBM().EnableDECOM());
            Assert.True(IsCursor(t, 0, 0));
        }
Exemplo n.º 14
0
        public void CombiningAcrossBuffers()
        {
            string s;
            var    t = new VirtualTerminalController();
            var    d = new DataConsumer(t);

            t.ResizeView(80, 25);
            t.TestPatternScrollingDiagonalLower();

            // RESET
            // PUSH "e"
            //   putglyph 0x65 1 0,0
            d.Push(new byte[] { (byte)'e' });
            s = t.GetVisibleChars(0, 0, 81);
            Assert.Equal(ExpectCombiningAcrossBuffersEOnly, s);

            // PUSH "\xCC\x81Z"
            //   putglyph 0x65,0x301 1 0,0
            //   putglyph 0x5a 1 0,1
            d.Push(new byte[] { 0xCC, 0x81, (byte)'Z' });
            s = t.GetVisibleChars(0, 0, 81);
            Assert.Equal(ExpectCombiningUtf8Chars, s);

            // RESET
            // PUSH "e"
            //   putglyph 0x65 1 0,0
            t.FullReset();
            t.TestPatternScrollingDiagonalLower();
            d.Push(new byte[] { (byte)'e' });
            s = t.GetVisibleChars(0, 0, 81);
            Assert.Equal(ExpectCombiningAcrossBuffersEOnly, s);

            // PUSH "\xCC\x81"
            //   putglyph 0x65,0x301 1 0,0
            d.Push(new byte[] { 0xCC, 0x81 });
            s = t.GetVisibleChars(0, 0, 81);
            Assert.Equal(ExpectDiacriticalEOnly, s);

            // PUSH "\xCC\x82"
            //   putglyph 0x65,0x301,0x302 1 0,0
            d.Push(new byte[] { 0xCC, 0x82 });
            s = t.GetVisibleChars(0, 0, 81);
            Assert.Equal(ExpectDoubleDiacriticalE, s);
        }
Exemplo n.º 15
0
        public void ScrollRegionDown()
        {
            var t = new VirtualTerminalController();
            var d = new DataConsumer(t);

            t.ResizeView(5, 5);
            t.ScreenAlignmentTest();

            PushToTerminal(d, "AAAAABBBBBCCCCCDDDDDEEEEE");
            t.SetScrollingRegion(2, 4);
            t.EnableOriginMode(true);
            t.NewLine();
            t.NewLine();
            t.NewLine();

            string text = t.GetScreenText();

            Assert.Equal(ExpectedScrollRegionDown, text);
        }
Exemplo n.º 16
0
        public void InsertLineLowerRegionTop()
        {
            var t = new VirtualTerminalController();
            var d = new DataConsumer(t);

            t.ResizeView(5, 5);
            t.ScreenAlignmentTest();

            PushToTerminal(d, "AAAAABBBBBCCCCCDDDDDEEEEE");
            t.SetScrollingRegion(3, 5);
            t.EnableOriginMode(true);
            t.SetCursorPosition(1, 1);
            t.InsertLines(2);

            string text = t.GetScreenText();

            Assert.Equal(ExpectedScrollInsertLineLowerRegionTop, text);
            Assert.Equal(5, t.Buffer.Count);
        }
Exemplo n.º 17
0
        public void OriginModeWithDECSLRM()
        {
            var t = new VirtualTerminalController();
            var d = new DataConsumer(t);

            t.ResizeView(80, 25);
            t.TestPatternScrollingDiagonalLower();

            // PUSH "\e[5;15r"
            // PUSH "\e[H"
            //   ?cursor = 0,0
            Push(d, "".STBM(5, 15).CUP());
            Assert.True(IsCursor(t, 0, 0));

            // PUSH "\e[3;3H"
            //   ?cursor = 2,2
            Push(d, "".CUP(3, 3));
            Assert.True(IsCursor(t, 2, 2));

            // PUSH "\e[?6h"
            // PUSH "\e[H"
            //   ?cursor = 4,0
            Push(d, "".EnableDECOM().CUP());
            Assert.True(IsCursor(t, 4, 0));

            // PUSH "\e[3;3H"
            //   ?cursor = 6,2
            Push(d, "".CUP(3, 3));
            Assert.True(IsCursor(t, 6, 2));

            // PUSH "\e[?6h"
            // PUSH "\e[?69h"
            // PUSH "\e[20;60s"
            // PUSH "\e[H"
            //   ?cursor = 4,19
            //
            // PUSH "\e[?69l"
            Push(d, "".EnableDECOM().EnableLRMM().LRMM(20, 60).CUP());
            Assert.True(IsCursor(t, 4, 19));

            Push(d, "".DisableLRMM());
        }
Exemplo n.º 18
0
        public void SingleWidthSingleHeight()
        {
            string s;
            var    t = new VirtualTerminalController();
            var    d = new DataConsumer(t);

            t.ResizeView(80, 25);
            t.TestPatternScrollingDiagonalLower();

            // PUSH "\e#5"
            // PUSH "Hello"
            //   putglyph 0x48 1 0,0
            //   putglyph 0x65 1 0,1
            //   putglyph 0x6c 1 0,2
            //   putglyph 0x6c 1 0,3
            //   putglyph 0x6f 1 0,4
            Push(d, "".DECSWL().T("Hello"));
            s = t.GetVisibleChars(0, 0, 81);
            Assert.Equal(ExpectSingleWidthSingleHeight, s);
        }
Exemplo n.º 19
0
        public void DECSCAProtected()
        {
            string s;
            var    t = new VirtualTerminalController();
            var    d = new DataConsumer(t);

            t.ResizeView(80, 25);
            t.TestPatternScrollingDiagonalLower();

            // PUSH "A\e[1\"qB\e[2\"qC"
            //   putglyph 0x41 1 0,0
            //   putglyph 0x42 1 0,1 prot
            //   putglyph 0x43 1 0,2
            Push(d, "A".DECSCA(1).T("B").DECSCA(2).T("C"));
            s = t.GetVisibleChars(0, 0, 81);
            Assert.Equal(ExpectLow, s);
            Assert.False(t.IsProtected(0, 0));
            Assert.True(t.IsProtected(0, 1));
            Assert.False(t.IsProtected(0, 2));
        }
Exemplo n.º 20
0
        public void CursorHorizontalAbsolute()
        {
            var t = new VirtualTerminalController();

            t.ResizeView(80, 25);

            var d = new DataConsumer(t);

            Push(d, "".LF());
            Assert.Equal(1, t.ViewPort.CursorPosition.Row);
            Assert.Equal(0, t.ViewPort.CursorPosition.Column);

            Push(d, "".CHA(20));
            Assert.Equal(1, t.ViewPort.CursorPosition.Row);
            Assert.Equal(19, t.ViewPort.CursorPosition.Column);

            Push(d, "".CHA());
            Assert.Equal(1, t.ViewPort.CursorPosition.Row);
            Assert.Equal(0, t.ViewPort.CursorPosition.Column);
        }
Exemplo n.º 21
0
        public void CursorPosition()
        {
            var t = new VirtualTerminalController();

            t.ResizeView(80, 25);

            var d = new DataConsumer(t);

            Push(d, "".CUP(10, 5));
            Assert.Equal(9, t.ViewPort.CursorPosition.Row);
            Assert.Equal(4, t.ViewPort.CursorPosition.Column);

            Push(d, "".CUP(8));
            Assert.Equal(7, t.ViewPort.CursorPosition.Row);
            Assert.Equal(0, t.ViewPort.CursorPosition.Column);

            Push(d, "".CUP());
            Assert.Equal(0, t.ViewPort.CursorPosition.Row);
            Assert.Equal(0, t.ViewPort.CursorPosition.Column);
        }
Exemplo n.º 22
0
        public void CursorForward()
        {
            var t = new VirtualTerminalController();

            t.ResizeView(80, 25);

            var d = new DataConsumer(t);

            Push(d, "".CUD());
            Assert.Equal(1, t.ViewPort.CursorPosition.Row);
            Assert.Equal(0, t.ViewPort.CursorPosition.Column);

            Push(d, "".CUD(3));
            Assert.Equal(4, t.ViewPort.CursorPosition.Row);
            Assert.Equal(0, t.ViewPort.CursorPosition.Column);

            Push(d, "".CUD(0));
            Assert.Equal(5, t.ViewPort.CursorPosition.Row);
            Assert.Equal(0, t.ViewPort.CursorPosition.Column);
        }
Exemplo n.º 23
0
        public void Title()
        {
            var t = new VirtualTerminalController();
            var d = new DataConsumer(t);

            t.ResizeView(80, 25);
            t.TestPatternScrollingDiagonalLower();

            string windowTitle = "";

            t.WindowTitleChanged += (sender, args) =>
            {
                windowTitle = args.Text;
            };

            // !Title
            // PUSH "\e]2;Here is my title\a"
            //   settermprop 4 "Here is my title"
            Push(d, "".ChangeWindowTitle("Here is my title"));
            Assert.Equal("Here is my title", windowTitle);
        }
Exemplo n.º 24
0
        public VirtualTerminal()
        {
            InitializeComponent();

            this.controller     = new VirtualTerminalController();
            this.controllerSink = new DataConsumer(this.controller);

            this.DoubleBuffered = true;
            this.Font           = new Font(TerminalFont.FontFamily, 9.75f);

            this.controller.ShowCursor(true);
            this.controller.SendData += (sender, args) =>
            {
                OnInput(new InputEventArgs(Encoding.UTF8.GetString(args.Data)));
            };

            this.Disposed += (sender, args) =>
            {
                this.caret?.Dispose();
            };
        }
Exemplo n.º 25
0
        public void MouseInSimpleButtonReportMode()
        {
            var t = new VirtualTerminalController();
            var d = new DataConsumer(t);

            t.ResizeView(64, 18);
            t.TestPatternScrollingDiagonalLower();

            string output = "";

            t.SendData += (sender, args) =>
            {
                output = Encoding.ASCII.GetString(args.Data);
            };

            // PUSH "\e[?1000h"
            //   settermprop 8 1
            Push(d, "".DECSET(1000));
            Push(d, "".DecDECRQM(1000));
            Assert.Equal("".DecDECRQMResponse(1000, 1), output);
        }
Exemplo n.º 26
0
        public void NonSelectiveErasure()
        {
            string s;
            var    t = new VirtualTerminalController();
            var    d = new DataConsumer(t);

            t.ResizeView(80, 25);
            t.TestPatternScrollingDiagonalLower();

            // PUSH "A\e[1\"qB\e[\"qC"
            //   ?screen_chars 0,0,1,3 = 0x41,0x42,0x43
            Push(d, "A".DECSCA(1).T("B").DECSCA().T("C"));
            s = t.GetVisibleChars(0, 0, 81);
            Assert.Equal(ExpectBeforeErasure, s);

            // PUSH "\e[G\e[J"
            //   ?screen_chars 0,0,1,3 =
            Push(d, "".CHA().EL());
            s = t.GetVisibleChars(0, 0, 81);
            Assert.Equal(ExpectAfterNonSelectiveErasure, s);
        }
Exemplo n.º 27
0
        public void TabStopsAfterResize()
        {
            string s;
            var    t = new VirtualTerminalController();
            var    d = new DataConsumer(t);

            t.ResizeView(100, 30);
            t.TestPatternScrollingDiagonalLower();

            // # Should be 100/8 = 12 tabstops
            // PUSH "\tX"
            //   putglyph 0x58 1 0,8
            // PUSH "\tX"
            //   putglyph 0x58 1 0,16
            // PUSH "\tX"
            //   putglyph 0x58 1 0,24
            // PUSH "\tX"
            //   putglyph 0x58 1 0,32
            // PUSH "\tX"
            //   putglyph 0x58 1 0,40
            // PUSH "\tX"
            //   putglyph 0x58 1 0,48
            // PUSH "\tX"
            //   putglyph 0x58 1 0,56
            // PUSH "\tX"
            //   putglyph 0x58 1 0,64
            // PUSH "\tX"
            //   putglyph 0x58 1 0,72
            // PUSH "\tX"
            //   putglyph 0x58 1 0,80
            // PUSH "\tX"
            //   putglyph 0x58 1 0,88
            // PUSH "\tX"
            //   putglyph 0x58 1 0,96
            //   ?cursor = 0,97
            Push(d, "\tX\tX\tX\tX\tX\tX\tX\tX\tX\tX\tX\tX");
            s = t.GetVisibleChars(0, 0, 101);
            Assert.Equal(ExpectedTabStopsAfterResize, s);
            Assert.True(IsCursor(t, 0, 97));
        }
Exemplo n.º 28
0
        public void SeventyNinthColumn()
        {
            string s;
            var    t = new VirtualTerminalController();
            var    d = new DataConsumer(t);

            t.ResizeView(80, 25);
            t.TestPatternScrollingDiagonalLower();

            //PUSH "\e[75G"
            //PUSH "A"x5
            //  putglyph 0x41 1 0,74
            //  putglyph 0x41 1 0,75
            //  putglyph 0x41 1 0,76
            //  putglyph 0x41 1 0,77
            //  putglyph 0x41 1 0,78
            //  ?cursor = 0,79
            Push(d, "".CHA(75).T("AAAAA"));
            s = t.GetVisibleChars(0, 0, 81);
            Assert.Equal(ExpectSeventyNinthColumn, s);
            Assert.True(IsCursor(t, 0, 79));
        }
Exemplo n.º 29
0
        public void TabClearAll()
        {
            string s;
            var    t = new VirtualTerminalController();
            var    d = new DataConsumer(t);

            t.ResizeView(80, 25);
            t.TestPatternScrollingDiagonalLower();

            // PUSH "\e[3g\e[50G\eH\e[G"
            //   ?cursor = 0,0
            Push(d, "".TBC(3).CHA(50).HTS().CHA());
            Assert.True(IsCursor(t, 0, 0));

            // PUSH "\tX"
            //   putglyph 0x58 1 0,49
            //   ?cursor = 0,50
            Push(d, "\tX");
            s = t.GetVisibleChars(0, 0, 81);
            Assert.Equal(ExpectedTabClearAll, s);
            Assert.True(IsCursor(t, 0, 50));
        }
Exemplo n.º 30
0
        public void MixedASCIIAndUtf8()
        {
            string s;
            var    t = new VirtualTerminalController();
            var    d = new DataConsumer(t);

            t.ResizeView(80, 25);
            t.TestPatternScrollingDiagonalUpper();

            // RESET
            // PUSH "\e(B"
            // PUSH "AB\xc4\x88D"
            //   putglyph 0x0041 1 0,0
            //   putglyph 0x0042 1 0,1
            //   putglyph 0x0108 1 0,2
            //   putglyph 0x0044 1 0,3
            Push(d, "".DesignateG0('B').T("AB"));
            d.Push(new byte[] { 0xc4, 0x88 });
            Push(d, "D");
            s = t.GetVisibleChars(0, 0, 81);
            Assert.Equal(ExpectMixedASCIIAndUtf8, s);
        }