diff options
author | Mike Krüger <mikkrg@microsoft.com> | 2018-03-16 13:28:23 +0300 |
---|---|---|
committer | Mike Krüger <mikkrg@microsoft.com> | 2018-03-16 13:47:58 +0300 |
commit | beb162b6f3c1c4a0e8f1b7dbe43493a90596108f (patch) | |
tree | ca02c0daa8dd10ad6bf4f624b701dca07891acd5 /main/src/core/MonoDevelop.TextEditor.Tests/Mono.TextEditor.Tests/DiffTrackerTests.cs | |
parent | 051fc25edef553f509a7bf26a02c4b40f4e47dc8 (diff) |
[SourceEditor] Fixed diff tracker.
It's now underpinned with a test suite as well.
Diffstat (limited to 'main/src/core/MonoDevelop.TextEditor.Tests/Mono.TextEditor.Tests/DiffTrackerTests.cs')
-rw-r--r-- | main/src/core/MonoDevelop.TextEditor.Tests/Mono.TextEditor.Tests/DiffTrackerTests.cs | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/main/src/core/MonoDevelop.TextEditor.Tests/Mono.TextEditor.Tests/DiffTrackerTests.cs b/main/src/core/MonoDevelop.TextEditor.Tests/Mono.TextEditor.Tests/DiffTrackerTests.cs new file mode 100644 index 0000000000..4cc2648f66 --- /dev/null +++ b/main/src/core/MonoDevelop.TextEditor.Tests/Mono.TextEditor.Tests/DiffTrackerTests.cs @@ -0,0 +1,112 @@ +// +// DiffTrackerTests.cs +// +// Author: +// Mike Krüger <mikkrg@microsoft.com> +// +// 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; +using System.Collections.Generic; +using NUnit.Framework; +using System.Linq; +using Mono.TextEditor.Utils; +using System.Text; + +namespace Mono.TextEditor.Tests +{ + [TestFixture] + public class DiffTrackerTests + { + static TextDocument GetDocument () + { + TextDocument doc = new TextDocument (); + StringBuilder sb = new StringBuilder (); + for (int i = 0; i < 10; i++) + sb.AppendLine ("1234567890"); + doc.Text = sb.ToString (); + doc.DiffTracker.SetBaseDocument (doc.CreateDocumentSnapshot ()); + + return doc; + } + + [Test] + public void TestInsertChanged () + { + var doc = GetDocument (); + Assert.AreEqual (TextDocument.LineState.Unchanged, doc.DiffTracker.GetLineState (doc.GetLine (5))); + doc.InsertText (doc.GetLine (5).Offset, "Hello"); + Assert.AreEqual (TextDocument.LineState.Dirty, doc.DiffTracker.GetLineState (doc.GetLine (5))); + } + + [Test] + public void TestRemoveChanged () + { + var doc = GetDocument (); + Assert.AreEqual (TextDocument.LineState.Unchanged, doc.DiffTracker.GetLineState (doc.GetLine (5))); + doc.RemoveText (doc.GetLine (5).Offset, 1); + Assert.AreEqual (TextDocument.LineState.Dirty, doc.DiffTracker.GetLineState (doc.GetLine (5))); + } + + [Test] + public void TestInsertLine () + { + var doc = GetDocument (); + Assert.AreEqual (TextDocument.LineState.Unchanged, doc.DiffTracker.GetLineState (doc.GetLine (5))); + doc.InsertText (doc.GetLine (5).Offset, "Hello\n"); + Assert.AreEqual (TextDocument.LineState.Dirty, doc.DiffTracker.GetLineState (doc.GetLine (5))); + } + + [Test] + public void TestRemoveLine () + { + var doc = GetDocument (); + Assert.AreEqual (TextDocument.LineState.Unchanged, doc.DiffTracker.GetLineState (doc.GetLine (5))); + doc.RemoveText (doc.GetLine (5).Offset, doc.GetLine (5).LengthIncludingDelimiter); + Assert.AreEqual (TextDocument.LineState.Dirty, doc.DiffTracker.GetLineState (doc.GetLine (5))); + } + + [Test] + public void TestLowerLineChangeOnInsert () + { + var doc = GetDocument (); + Assert.AreEqual (TextDocument.LineState.Unchanged, doc.DiffTracker.GetLineState (doc.GetLine (5))); + doc.InsertText (doc.GetLine (7).Offset, "Hello\n"); + doc.InsertText (doc.GetLine (5).Offset, "Hello\n"); + Assert.AreEqual (TextDocument.LineState.Dirty, doc.DiffTracker.GetLineState (doc.GetLine (5))); + Assert.AreEqual (TextDocument.LineState.Unchanged, doc.DiffTracker.GetLineState (doc.GetLine (7))); + Assert.AreEqual (TextDocument.LineState.Dirty, doc.DiffTracker.GetLineState (doc.GetLine (8))); + } + + + [Test] + public void TestLowerLineChangeOnRemove () + { + var doc = GetDocument (); + Assert.AreEqual (TextDocument.LineState.Unchanged, doc.DiffTracker.GetLineState (doc.GetLine (5))); + doc.InsertText (doc.GetLine (7).Offset, "Hello\n"); + doc.RemoveText (doc.GetLine (5).Offset, doc.GetLine (5).LengthIncludingDelimiter); + Assert.AreEqual (TextDocument.LineState.Dirty, doc.DiffTracker.GetLineState (doc.GetLine (5))); + Assert.AreEqual (TextDocument.LineState.Unchanged, doc.DiffTracker.GetLineState (doc.GetLine (7))); + Assert.AreEqual (TextDocument.LineState.Dirty, doc.DiffTracker.GetLineState (doc.GetLine (6))); + } + + } +} |