/AvalonEdit/ICSharpCode.AvalonEdit.Tests/Document/LineManagerTests.cs
C# | 531 lines | 472 code | 57 blank | 2 comment | 2 complexity | 4dabca3c5b6e5d70b2716a8c7798bb9d MD5 | raw file
- // Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
- // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
- using System;
- using System.Collections.Generic;
- using NUnit.Framework;
- namespace ICSharpCode.AvalonEdit.Document
- {
- [TestFixture]
- public class LineManagerTests
- {
- TextDocument document;
-
- [SetUp]
- public void SetUp()
- {
- document = new TextDocument();
- }
-
- [Test]
- public void CheckEmptyDocument()
- {
- Assert.AreEqual("", document.Text);
- Assert.AreEqual(0, document.TextLength);
- Assert.AreEqual(1, document.LineCount);
- }
-
- [Test]
- public void CheckClearingDocument()
- {
- document.Text = "Hello,\nWorld!";
- Assert.AreEqual(2, document.LineCount);
- document.Text = "";
- Assert.AreEqual("", document.Text);
- Assert.AreEqual(0, document.TextLength);
- Assert.AreEqual(1, document.LineCount);
- }
-
- [Test]
- public void CheckGetLineInEmptyDocument()
- {
- Assert.AreEqual(1, document.Lines.Count);
- List<DocumentLine> lines = new List<DocumentLine>(document.Lines);
- Assert.AreEqual(1, lines.Count);
- DocumentLine line = document.Lines[0];
- Assert.AreSame(line, lines[0]);
- Assert.AreSame(line, document.GetLineByNumber(1));
- Assert.AreSame(line, document.GetLineByOffset(0));
- }
-
- [Test]
- public void CheckLineSegmentInEmptyDocument()
- {
- DocumentLine line = document.GetLineByNumber(1);
- Assert.AreEqual(1, line.LineNumber);
- Assert.AreEqual(0, line.Offset);
- Assert.IsFalse(line.IsDeleted);
- Assert.AreEqual(0, line.Length);
- Assert.AreEqual(0, line.TotalLength);
- Assert.AreEqual(0, line.DelimiterLength);
- }
-
- [Test]
- public void LineIndexOfTest()
- {
- DocumentLine line = document.GetLineByNumber(1);
- Assert.AreEqual(0, document.Lines.IndexOf(line));
- DocumentLine lineFromOtherDocument = new TextDocument().GetLineByNumber(1);
- Assert.AreEqual(-1, document.Lines.IndexOf(lineFromOtherDocument));
- document.Text = "a\nb\nc";
- DocumentLine middleLine = document.GetLineByNumber(2);
- Assert.AreEqual(1, document.Lines.IndexOf(middleLine));
- document.Remove(1, 3);
- Assert.IsTrue(middleLine.IsDeleted);
- Assert.AreEqual(-1, document.Lines.IndexOf(middleLine));
- }
-
- [Test]
- public void InsertInEmptyDocument()
- {
- document.Insert(0, "a");
- Assert.AreEqual(document.LineCount, 1);
- DocumentLine line = document.GetLineByNumber(1);
- Assert.AreEqual("a", document.GetText(line));
- }
-
- [Test]
- public void SetText()
- {
- document.Text = "a";
- Assert.AreEqual(document.LineCount, 1);
- DocumentLine line = document.GetLineByNumber(1);
- Assert.AreEqual("a", document.GetText(line));
- }
-
- [Test]
- public void InsertNothing()
- {
- document.Insert(0, "");
- Assert.AreEqual(document.LineCount, 1);
- Assert.AreEqual(document.TextLength, 0);
- }
-
- [Test, ExpectedException(typeof(ArgumentNullException))]
- public void InsertNull()
- {
- document.Insert(0, null);
- }
-
- [Test, ExpectedException(typeof(ArgumentNullException))]
- public void SetTextNull()
- {
- document.Text = null;
- }
-
- [Test]
- public void RemoveNothing()
- {
- document.Remove(0, 0);
- Assert.AreEqual(document.LineCount, 1);
- Assert.AreEqual(document.TextLength, 0);
- }
-
- [Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
- public void GetCharAt0EmptyDocument()
- {
- document.GetCharAt(0);
- }
-
- [Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
- public void GetCharAtNegativeOffset()
- {
- document.Text = "a\nb";
- document.GetCharAt(-1);
- }
-
- [Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
- public void GetCharAtEndOffset()
- {
- document.Text = "a\nb";
- document.GetCharAt(document.TextLength);
- }
-
- [Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
- public void InsertAtNegativeOffset()
- {
- document.Text = "a\nb";
- document.Insert(-1, "text");
- }
-
- [Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
- public void InsertAfterEndOffset()
- {
- document.Text = "a\nb";
- document.Insert(4, "text");
- }
-
- [Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
- public void RemoveNegativeAmount()
- {
- document.Text = "abcd";
- document.Remove(2, -1);
- }
-
- [Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
- public void RemoveTooMuch()
- {
- document.Text = "abcd";
- document.Remove(2, 10);
- }
-
- [Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
- public void GetLineByNumberNegative()
- {
- document.Text = "a\nb";
- document.GetLineByNumber(-1);
- }
-
- [Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
- public void GetLineByNumberTooHigh()
- {
- document.Text = "a\nb";
- document.GetLineByNumber(3);
- }
-
- [Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
- public void GetLineByOffsetNegative()
- {
- document.Text = "a\nb";
- document.GetLineByOffset(-1);
- }
-
-
- [Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
- public void GetLineByOffsetToHigh()
- {
- document.Text = "a\nb";
- document.GetLineByOffset(10);
- }
-
- [Test]
- public void InsertAtEndOffset()
- {
- document.Text = "a\nb";
- CheckDocumentLines("a",
- "b");
- document.Insert(3, "text");
- CheckDocumentLines("a",
- "btext");
- }
-
- [Test]
- public void GetCharAt()
- {
- document.Text = "a\r\nb";
- Assert.AreEqual('a', document.GetCharAt(0));
- Assert.AreEqual('\r', document.GetCharAt(1));
- Assert.AreEqual('\n', document.GetCharAt(2));
- Assert.AreEqual('b', document.GetCharAt(3));
- }
-
- [Test]
- public void CheckMixedNewLineTest()
- {
- const string mixedNewlineText = "line 1\nline 2\r\nline 3\rline 4";
- document.Text = mixedNewlineText;
- Assert.AreEqual(mixedNewlineText, document.Text);
- Assert.AreEqual(4, document.LineCount);
- for (int i = 1; i < 4; i++) {
- DocumentLine line = document.GetLineByNumber(i);
- Assert.AreEqual(i, line.LineNumber);
- Assert.AreEqual("line " + i, document.GetText(line));
- }
- Assert.AreEqual(1, document.GetLineByNumber(1).DelimiterLength);
- Assert.AreEqual(2, document.GetLineByNumber(2).DelimiterLength);
- Assert.AreEqual(1, document.GetLineByNumber(3).DelimiterLength);
- Assert.AreEqual(0, document.GetLineByNumber(4).DelimiterLength);
- }
-
- [Test]
- public void LfCrIsTwoNewLinesTest()
- {
- document.Text = "a\n\rb";
- Assert.AreEqual("a\n\rb", document.Text);
- CheckDocumentLines("a",
- "",
- "b");
- }
-
- [Test]
- public void RemoveFirstPartOfDelimiter()
- {
- document.Text = "a\r\nb";
- document.Remove(1, 1);
- Assert.AreEqual("a\nb", document.Text);
- CheckDocumentLines("a",
- "b");
- }
-
- [Test]
- public void RemoveLineContentAndJoinDelimiters()
- {
- document.Text = "a\rb\nc";
- document.Remove(2, 1);
- Assert.AreEqual("a\r\nc", document.Text);
- CheckDocumentLines("a",
- "c");
- }
-
- [Test]
- public void RemoveLineContentAndJoinDelimiters2()
- {
- document.Text = "a\rb\nc\nd";
- document.Remove(2, 3);
- Assert.AreEqual("a\r\nd", document.Text);
- CheckDocumentLines("a",
- "d");
- }
-
- [Test]
- public void RemoveLineContentAndJoinDelimiters3()
- {
- document.Text = "a\rb\r\nc";
- document.Remove(2, 2);
- Assert.AreEqual("a\r\nc", document.Text);
- CheckDocumentLines("a",
- "c");
- }
-
- [Test]
- public void RemoveLineContentAndJoinNonMatchingDelimiters()
- {
- document.Text = "a\nb\nc";
- document.Remove(2, 1);
- Assert.AreEqual("a\n\nc", document.Text);
- CheckDocumentLines("a",
- "",
- "c");
- }
-
- [Test]
- public void RemoveLineContentAndJoinNonMatchingDelimiters2()
- {
- document.Text = "a\nb\rc";
- document.Remove(2, 1);
- Assert.AreEqual("a\n\rc", document.Text);
- CheckDocumentLines("a",
- "",
- "c");
- }
-
- [Test]
- public void RemoveMultilineUpToFirstPartOfDelimiter()
- {
- document.Text = "0\n1\r\n2";
- document.Remove(1, 3);
- Assert.AreEqual("0\n2", document.Text);
- CheckDocumentLines("0",
- "2");
- }
-
- [Test]
- public void RemoveSecondPartOfDelimiter()
- {
- document.Text = "a\r\nb";
- document.Remove(2, 1);
- Assert.AreEqual("a\rb", document.Text);
- CheckDocumentLines("a",
- "b");
- }
-
- [Test]
- public void RemoveFromSecondPartOfDelimiter()
- {
- document.Text = "a\r\nb\nc";
- document.Remove(2, 3);
- Assert.AreEqual("a\rc", document.Text);
- CheckDocumentLines("a",
- "c");
- }
-
- [Test]
- public void RemoveFromSecondPartOfDelimiterToDocumentEnd()
- {
- document.Text = "a\r\nb";
- document.Remove(2, 2);
- Assert.AreEqual("a\r", document.Text);
- CheckDocumentLines("a",
- "");
- }
-
- [Test]
- public void RemoveUpToMatchingDelimiter1()
- {
- document.Text = "a\r\nb\nc";
- document.Remove(2, 2);
- Assert.AreEqual("a\r\nc", document.Text);
- CheckDocumentLines("a",
- "c");
- }
-
- [Test]
- public void RemoveUpToMatchingDelimiter2()
- {
- document.Text = "a\r\nb\r\nc";
- document.Remove(2, 3);
- Assert.AreEqual("a\r\nc", document.Text);
- CheckDocumentLines("a",
- "c");
- }
-
- [Test]
- public void RemoveUpToNonMatchingDelimiter()
- {
- document.Text = "a\r\nb\rc";
- document.Remove(2, 2);
- Assert.AreEqual("a\r\rc", document.Text);
- CheckDocumentLines("a",
- "",
- "c");
- }
-
- [Test]
- public void RemoveTwoCharDelimiter()
- {
- document.Text = "a\r\nb";
- document.Remove(1, 2);
- Assert.AreEqual("ab", document.Text);
- CheckDocumentLines("ab");
- }
-
- [Test]
- public void RemoveOneCharDelimiter()
- {
- document.Text = "a\nb";
- document.Remove(1, 1);
- Assert.AreEqual("ab", document.Text);
- CheckDocumentLines("ab");
- }
-
- void CheckDocumentLines(params string[] lines)
- {
- Assert.AreEqual(lines.Length, document.LineCount, "LineCount");
- for (int i = 0; i < lines.Length; i++) {
- Assert.AreEqual(lines[i], document.GetText(document.Lines[i]), "Text of line " + (i + 1));
- }
- }
-
- [Test]
- public void FixUpFirstPartOfDelimiter()
- {
- document.Text = "a\n\nb";
- document.Replace(1, 1, "\r");
- Assert.AreEqual("a\r\nb", document.Text);
- CheckDocumentLines("a",
- "b");
- }
-
- [Test]
- public void FixUpSecondPartOfDelimiter()
- {
- document.Text = "a\r\rb";
- document.Replace(2, 1, "\n");
- Assert.AreEqual("a\r\nb", document.Text);
- CheckDocumentLines("a",
- "b");
- }
-
- [Test]
- public void InsertInsideDelimiter()
- {
- document.Text = "a\r\nc";
- document.Insert(2, "b");
- Assert.AreEqual("a\rb\nc", document.Text);
- CheckDocumentLines("a",
- "b",
- "c");
- }
-
- [Test]
- public void InsertInsideDelimiter2()
- {
- document.Text = "a\r\nd";
- document.Insert(2, "b\nc");
- Assert.AreEqual("a\rb\nc\nd", document.Text);
- CheckDocumentLines("a",
- "b",
- "c",
- "d");
- }
-
- [Test]
- public void InsertInsideDelimiter3()
- {
- document.Text = "a\r\nc";
- document.Insert(2, "b\r");
- Assert.AreEqual("a\rb\r\nc", document.Text);
- CheckDocumentLines("a",
- "b",
- "c");
- }
-
- [Test]
- public void ExtendDelimiter1()
- {
- document.Text = "a\nc";
- document.Insert(1, "b\r");
- Assert.AreEqual("ab\r\nc", document.Text);
- CheckDocumentLines("ab",
- "c");
- }
-
- [Test]
- public void ExtendDelimiter2()
- {
- document.Text = "a\rc";
- document.Insert(2, "\nb");
- Assert.AreEqual("a\r\nbc", document.Text);
- CheckDocumentLines("a",
- "bc");
- }
-
- [Test]
- public void ReplaceLineContentBetweenMatchingDelimiters()
- {
- document.Text = "a\rb\nc";
- document.Replace(2, 1, "x");
- Assert.AreEqual("a\rx\nc", document.Text);
- CheckDocumentLines("a",
- "x",
- "c");
- }
-
- [Test]
- public void GetOffset()
- {
- document.Text = "Hello,\nWorld!";
- Assert.AreEqual(0, document.GetOffset(1, 1));
- Assert.AreEqual(1, document.GetOffset(1, 2));
- Assert.AreEqual(5, document.GetOffset(1, 6));
- Assert.AreEqual(6, document.GetOffset(1, 7));
- Assert.AreEqual(7, document.GetOffset(2, 1));
- Assert.AreEqual(8, document.GetOffset(2, 2));
- Assert.AreEqual(12, document.GetOffset(2, 6));
- Assert.AreEqual(13, document.GetOffset(2, 7));
- }
-
- [Test]
- public void GetOffsetIgnoreNegativeColumns()
- {
- document.Text = "Hello,\nWorld!";
- Assert.AreEqual(0, document.GetOffset(1, -1));
- Assert.AreEqual(0, document.GetOffset(1, -100));
- Assert.AreEqual(0, document.GetOffset(1, 0));
- Assert.AreEqual(7, document.GetOffset(2, -1));
- Assert.AreEqual(7, document.GetOffset(2, -100));
- Assert.AreEqual(7, document.GetOffset(2, 0));
- }
-
- [Test]
- public void GetOffsetIgnoreTooHighColumns()
- {
- document.Text = "Hello,\nWorld!";
- Assert.AreEqual(6, document.GetOffset(1, 8));
- Assert.AreEqual(6, document.GetOffset(1, 100));
- Assert.AreEqual(13, document.GetOffset(2, 8));
- Assert.AreEqual(13, document.GetOffset(2, 100));
- }
- }
- }