// // TextViewTests.cs // // Author: // Mike Krüger // // Copyright (c) 2018 Microsoft Corporation. All rights reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System.IO; using System.Text; using System.Linq; using NUnit.Framework; using Mono.TextEditor.Utils; using System.Reflection; using MonoDevelop.Core.Text; using MonoDevelop.Ide.Editor.Highlighting; using MonoDevelop.Ide.Editor; using System; using System.Threading; using System.Threading.Tasks; using System.Collections.Generic; namespace Mono.TextEditor.Tests { [TestFixture] public class TextViewTests { class TestSyntaxMode : ISyntaxHighlighting { public event EventHandler HighlightingStateChanged; public void Dispose () { } public Task GetHighlightedLineAsync (IDocumentLine line, CancellationToken cancellationToken) { var segments = new List (); for (int i = 0; i < line.Length;i++){ if (i > 0 && i == line.Length - 1) { segments.Add (new ColoredSegment (i, 2, ScopeStack.Empty)); break; } segments.Add (new ColoredSegment (i, 1, ScopeStack.Empty)); } return Task.FromResult (new HighlightedLine (line, segments)); } public Task GetScopeStackAsync (int offset, CancellationToken cancellationToken) { return Task.FromResult (ScopeStack.Empty); } } [Test] public void TestFirstTimeUpdate () { var editor = new MonoTextEditor (); editor.GetTextEditorData ().Document.SyntaxMode = new TestSyntaxMode (); editor.Text = @"1 2 3 4 5"; editor.Caret.Location = new DocumentLocation (2, 1); editor.InsertAtCaret ("a"); Assert.IsTrue (editor.TextViewMargin.SpanUpdater.HasUpdatedMultilineSpan); } [Test] public void TestSubsequentUpdate () { var editor = new MonoTextEditor (); editor.GetTextEditorData ().Document.SyntaxMode = new TestSyntaxMode (); editor.Text = @"1 2 3 4 5"; editor.Caret.Location = new DocumentLocation (2, 1); editor.InsertAtCaret ("a"); Assert.IsTrue (editor.TextViewMargin.SpanUpdater.HasUpdatedMultilineSpan); editor.InsertAtCaret ("a"); Assert.IsFalse (editor.TextViewMargin.SpanUpdater.HasUpdatedMultilineSpan); } [Test] public void TestBackspace () { var editor = new MonoTextEditor (); editor.GetTextEditorData ().Document.SyntaxMode = new TestSyntaxMode (); editor.Text = @"1 2 3 4 5"; editor.Caret.Location = new DocumentLocation (2, 1); editor.InsertAtCaret ("a"); Assert.IsTrue (editor.TextViewMargin.SpanUpdater.HasUpdatedMultilineSpan); DeleteActions.Backspace (editor.GetTextEditorData ()); Assert.IsTrue (editor.TextViewMargin.SpanUpdater.HasUpdatedMultilineSpan); } [Test] public void TestDeleteNoUpdate () { var editor = new MonoTextEditor (); editor.GetTextEditorData ().Document.SyntaxMode = new TestSyntaxMode (); editor.Text = @"1 2 3 4 5"; editor.Caret.Location = new DocumentLocation (2, 1); DeleteActions.Delete (editor.GetTextEditorData ()); Assert.IsFalse (editor.TextViewMargin.SpanUpdater.HasUpdatedMultilineSpan); } } }