예제 #1
0
        public void Source_Sets_DisplayStart_And_Position_To_Zero_If_Greater_Than_Source_Length()
        {
            var hv = new HexView(LoadStream())
            {
                Width = 10, Height = 5
            };

            Application.Top.Add(hv);
            Application.Begin(Application.Top);

            Assert.True(hv.ProcessKey(new KeyEvent(Key.End, new KeyModifiers())));
            Assert.Equal(62, hv.DisplayStart);
            Assert.Equal(64, hv.Position);

            hv.Source = new MemoryStream();
            Assert.Equal(0, hv.DisplayStart);
            Assert.Equal(0, hv.Position - 1);

            hv.Source = LoadStream();
            hv.Width  = Dim.Fill();
            hv.Height = Dim.Fill();
            Application.Top.LayoutSubviews();
            Assert.Equal(0, hv.DisplayStart);
            Assert.Equal(0, hv.Position - 1);

            Assert.True(hv.ProcessKey(new KeyEvent(Key.End, new KeyModifiers())));
            Assert.Equal(0, hv.DisplayStart);
            Assert.Equal(64, hv.Position);

            hv.Source = new MemoryStream();
            Assert.Equal(0, hv.DisplayStart);
            Assert.Equal(0, hv.Position - 1);
        }
예제 #2
0
        public void Position_Using_Encoding_Default()
        {
            var hv = new HexView(LoadStream())
            {
                Width = 20, Height = 20
            };

            Assert.Equal(63, hv.Source.Length);
            Assert.Equal(63, hv.Source.Position);
            Assert.Equal(1, hv.Position);

            // left side needed to press twice
            Assert.True(hv.ProcessKey(new KeyEvent(Key.CursorRight, new KeyModifiers())));
            Assert.Equal(63, hv.Source.Position);
            Assert.Equal(1, hv.Position);
            Assert.True(hv.ProcessKey(new KeyEvent(Key.CursorRight, new KeyModifiers())));
            Assert.Equal(63, hv.Source.Position);
            Assert.Equal(2, hv.Position);

            // right side only needed to press one time
            Assert.True(hv.ProcessKey(new KeyEvent(Key.Enter, new KeyModifiers())));
            Assert.Equal(63, hv.Source.Position);
            Assert.Equal(2, hv.Position);
            Assert.True(hv.ProcessKey(new KeyEvent(Key.CursorLeft, new KeyModifiers())));
            Assert.Equal(63, hv.Source.Position);
            Assert.Equal(1, hv.Position);

            // last position is equal to the source length
            Assert.True(hv.ProcessKey(new KeyEvent(Key.End, new KeyModifiers())));
            Assert.Equal(63, hv.Source.Position);
            Assert.Equal(64, hv.Position);
            Assert.Equal(hv.Position - 1, hv.Source.Length);
        }
예제 #3
0
        public void DiscardEdits_Method()
        {
            var hv = new HexView(LoadStream(true))
            {
                Width = 20, Height = 20
            };

            Assert.True(hv.ProcessKey(new KeyEvent(Key.D4, new KeyModifiers())));
            Assert.True(hv.ProcessKey(new KeyEvent(Key.D1, new KeyModifiers())));
            Assert.Single(hv.Edits);
            Assert.Equal(65, hv.Edits.ToList() [0].Value);
            Assert.Equal('A', (char)hv.Edits.ToList() [0].Value);
            Assert.Equal(126, hv.Source.Length);

            hv.DiscardEdits();
            Assert.Empty(hv.Edits);
        }
예제 #4
0
        public void Edited_Event()
        {
            var hv = new HexView(LoadStream(true))
            {
                Width = 20, Height = 20
            };
            KeyValuePair <long, byte> keyValuePair = default;

            hv.Edited += (e) => keyValuePair = e;

            Assert.True(hv.ProcessKey(new KeyEvent(Key.D4, new KeyModifiers())));
            Assert.True(hv.ProcessKey(new KeyEvent(Key.D6, new KeyModifiers())));

            Assert.Equal(0, (int)keyValuePair.Key);
            Assert.Equal(70, (int)keyValuePair.Value);
            Assert.Equal('F', (char)keyValuePair.Value);
        }
예제 #5
0
        public void DisplayStart_Source()
        {
            var hv = new HexView(LoadStream(true))
            {
                Width  = 20,
                Height = 20
            };

            Assert.Equal(0, hv.DisplayStart);

            Assert.True(hv.ProcessKey(new KeyEvent(Key.PageDown, new KeyModifiers())));
            Assert.Equal(4 * hv.Frame.Height, hv.DisplayStart);
            Assert.Equal(hv.Source.Length, hv.Source.Position);

            Assert.True(hv.ProcessKey(new KeyEvent(Key.End, new KeyModifiers())));
            // already on last page and so the DisplayStart is the same as before
            Assert.Equal(4 * hv.Frame.Height, hv.DisplayStart);
            Assert.Equal(hv.Source.Length, hv.Source.Position);
        }
예제 #6
0
        public void PositionChanged_Event()
        {
            var hv = new HexView(LoadStream())
            {
                Width = Dim.Fill(), Height = Dim.Fill()
            };

            HexView.HexViewEventArgs hexViewEventArgs = null;
            hv.PositionChanged += (e) => hexViewEventArgs = e;
            Application.Top.Add(hv);
            Application.Begin(Application.Top);

            Assert.True(hv.ProcessKey(new KeyEvent(Key.CursorRight, new KeyModifiers())));                 // left side must press twice
            Assert.True(hv.ProcessKey(new KeyEvent(Key.CursorRight, new KeyModifiers())));
            Assert.True(hv.ProcessKey(new KeyEvent(Key.CursorDown, new KeyModifiers())));

            Assert.Equal(12, hexViewEventArgs.BytesPerLine);
            Assert.Equal(new Point(2, 2), hexViewEventArgs.CursorPosition);
            Assert.Equal(14, hexViewEventArgs.Position);
        }
예제 #7
0
        public void CursorPosition_Encoding_Default()
        {
            var hv = new HexView(LoadStream())
            {
                Width = Dim.Fill(), Height = Dim.Fill()
            };

            Application.Top.Add(hv);
            Application.Begin(Application.Top);

            Assert.Equal(new Point(1, 1), hv.CursorPosition);

            Assert.True(hv.ProcessKey(new KeyEvent(Key.Enter, new KeyModifiers())));
            Assert.True(hv.ProcessKey(new KeyEvent(Key.CursorRight | Key.CtrlMask, new KeyModifiers())));
            Assert.Equal(hv.CursorPosition.X, hv.BytesPerLine);
            Assert.True(hv.ProcessKey(new KeyEvent(Key.Home, new KeyModifiers())));

            Assert.True(hv.ProcessKey(new KeyEvent(Key.CursorRight, new KeyModifiers())));
            Assert.Equal(new Point(2, 1), hv.CursorPosition);

            Assert.True(hv.ProcessKey(new KeyEvent(Key.CursorDown, new KeyModifiers())));
            Assert.Equal(new Point(2, 2), hv.CursorPosition);

            Assert.True(hv.ProcessKey(new KeyEvent(Key.End, new KeyModifiers())));
            var col    = hv.CursorPosition.X;
            var line   = hv.CursorPosition.Y;
            var offset = (line - 1) * (hv.BytesPerLine - col);

            Assert.Equal(hv.Position, col * line + offset);
        }
예제 #8
0
        public void ApplyEdits_With_Argument()
        {
            byte [] buffer   = Encoding.Default.GetBytes("Fest");
            var     original = new MemoryStream();

            original.Write(buffer, 0, buffer.Length);
            original.Flush();
            var copy = new MemoryStream();

            original.Position = 0;
            original.CopyTo(copy);
            copy.Flush();
            var hv = new HexView(copy)
            {
                Width = Dim.Fill(), Height = Dim.Fill()
            };

            byte [] readBuffer = new byte [hv.Source.Length];
            hv.Source.Position = 0;
            hv.Source.Read(readBuffer);
            Assert.Equal("Fest", Encoding.Default.GetString(readBuffer));

            Assert.True(hv.ProcessKey(new KeyEvent(Key.D5, new KeyModifiers())));
            Assert.True(hv.ProcessKey(new KeyEvent(Key.D4, new KeyModifiers())));
            readBuffer [hv.Edits.ToList() [0].Key] = hv.Edits.ToList() [0].Value;
            Assert.Equal("Test", Encoding.Default.GetString(readBuffer));

            hv.ApplyEdits(original);
            original.Position = 0;
            original.Read(buffer);
            copy.Position = 0;
            copy.Read(readBuffer);
            Assert.Equal("Test", Encoding.Default.GetString(buffer));
            Assert.Equal("Test", Encoding.Default.GetString(readBuffer));
            Assert.Equal(Encoding.Default.GetString(buffer), Encoding.Default.GetString(readBuffer));
        }
예제 #9
0
        public void AllowEdits_Edits_ApplyEdits()
        {
            var hv = new HexView(LoadStream(true))
            {
                Width  = 20,
                Height = 20
            };

            Assert.Empty(hv.Edits);
            hv.AllowEdits = false;
            Assert.True(hv.ProcessKey(new KeyEvent(Key.Home, new KeyModifiers())));
            Assert.False(hv.ProcessKey(new KeyEvent(Key.A, new KeyModifiers())));
            Assert.Empty(hv.Edits);
            Assert.Equal(126, hv.Source.Length);

            hv.AllowEdits = true;
            Assert.True(hv.ProcessKey(new KeyEvent(Key.D4, new KeyModifiers())));
            Assert.True(hv.ProcessKey(new KeyEvent(Key.D1, new KeyModifiers())));
            Assert.Single(hv.Edits);
            Assert.Equal(65, hv.Edits.ToList() [0].Value);
            Assert.Equal('A', (char)hv.Edits.ToList() [0].Value);
            Assert.Equal(126, hv.Source.Length);

            // Appends byte
            Assert.True(hv.ProcessKey(new KeyEvent(Key.End, new KeyModifiers())));
            Assert.True(hv.ProcessKey(new KeyEvent(Key.D4, new KeyModifiers())));
            Assert.True(hv.ProcessKey(new KeyEvent(Key.D2, new KeyModifiers())));
            Assert.Equal(2, hv.Edits.Count);
            Assert.Equal(66, hv.Edits.ToList() [1].Value);
            Assert.Equal('B', (char)hv.Edits.ToList() [1].Value);
            Assert.Equal(126, hv.Source.Length);

            hv.ApplyEdits();
            Assert.Empty(hv.Edits);
            Assert.Equal(127, hv.Source.Length);
        }
예제 #10
0
        public void KeyBindings_Command()
        {
            var hv = new HexView(LoadStream())
            {
                Width = 20, Height = 10
            };

            Application.Top.Add(hv);
            Application.Begin(Application.Top);

            Assert.Equal(63, hv.Source.Length);
            Assert.Equal(1, hv.Position);
            Assert.Equal(4, hv.BytesPerLine);

            // right side only needed to press one time
            Assert.True(hv.ProcessKey(new KeyEvent(Key.Enter, new KeyModifiers())));

            Assert.True(hv.ProcessKey(new KeyEvent(Key.CursorRight, new KeyModifiers())));
            Assert.Equal(2, hv.Position);

            Assert.True(hv.ProcessKey(new KeyEvent(Key.CursorLeft, new KeyModifiers())));
            Assert.Equal(1, hv.Position);

            Assert.True(hv.ProcessKey(new KeyEvent(Key.CursorDown, new KeyModifiers())));
            Assert.Equal(5, hv.Position);

            Assert.True(hv.ProcessKey(new KeyEvent(Key.CursorUp, new KeyModifiers())));
            Assert.Equal(1, hv.Position);

            Assert.True(hv.ProcessKey(new KeyEvent(Key.V | Key.CtrlMask, new KeyModifiers())));
            Assert.Equal(41, hv.Position);

            Assert.True(hv.ProcessKey(new KeyEvent('v' + Key.AltMask, new KeyModifiers())));
            Assert.Equal(1, hv.Position);

            Assert.True(hv.ProcessKey(new KeyEvent(Key.PageDown, new KeyModifiers())));
            Assert.Equal(41, hv.Position);

            Assert.True(hv.ProcessKey(new KeyEvent(Key.PageUp, new KeyModifiers())));
            Assert.Equal(1, hv.Position);

            Assert.True(hv.ProcessKey(new KeyEvent(Key.End, new KeyModifiers())));
            Assert.Equal(64, hv.Position);

            Assert.True(hv.ProcessKey(new KeyEvent(Key.Home, new KeyModifiers())));
            Assert.Equal(1, hv.Position);

            Assert.True(hv.ProcessKey(new KeyEvent(Key.CursorRight | Key.CtrlMask, new KeyModifiers())));
            Assert.Equal(4, hv.Position);

            Assert.True(hv.ProcessKey(new KeyEvent(Key.CursorLeft | Key.CtrlMask, new KeyModifiers())));
            Assert.Equal(1, hv.Position);

            Assert.True(hv.ProcessKey(new KeyEvent(Key.CursorDown | Key.CtrlMask, new KeyModifiers())));
            Assert.Equal(37, hv.Position);

            Assert.True(hv.ProcessKey(new KeyEvent(Key.CursorUp | Key.CtrlMask, new KeyModifiers())));
            Assert.Equal(1, hv.Position);
        }