mirror of https://github.com/icsharpcode/ILSpy.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
155 lines
4.3 KiB
155 lines
4.3 KiB
// 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 ICSharpCode.AvalonEdit.Rendering; |
|
using NUnit.Framework; |
|
|
|
namespace ICSharpCode.AvalonEdit.Document |
|
{ |
|
[TestFixture] |
|
public class CollapsingTests |
|
{ |
|
TextDocument document; |
|
HeightTree heightTree; |
|
|
|
[SetUp] |
|
public void Setup() |
|
{ |
|
document = new TextDocument(); |
|
document.Text = "1\n2\n3\n4\n5\n6\n7\n8\n9\n10"; |
|
heightTree = new HeightTree(document, 10); |
|
foreach (DocumentLine line in document.Lines) { |
|
heightTree.SetHeight(line, line.LineNumber); |
|
} |
|
} |
|
|
|
CollapsedLineSection SimpleCheck(int from, int to) |
|
{ |
|
CollapsedLineSection sec1 = heightTree.CollapseText(document.GetLineByNumber(from), document.GetLineByNumber(to)); |
|
for (int i = 1; i < from; i++) { |
|
Assert.IsFalse(heightTree.GetIsCollapsed(i)); |
|
} |
|
for (int i = from; i <= to; i++) { |
|
Assert.IsTrue(heightTree.GetIsCollapsed(i)); |
|
} |
|
for (int i = to + 1; i <= 10; i++) { |
|
Assert.IsFalse(heightTree.GetIsCollapsed(i)); |
|
} |
|
CheckHeights(); |
|
return sec1; |
|
} |
|
|
|
[Test] |
|
public void SimpleCheck() |
|
{ |
|
SimpleCheck(4, 6); |
|
} |
|
|
|
[Test] |
|
public void SimpleUncollapse() |
|
{ |
|
CollapsedLineSection sec1 = heightTree.CollapseText(document.GetLineByNumber(4), document.GetLineByNumber(6)); |
|
sec1.Uncollapse(); |
|
for (int i = 1; i <= 10; i++) { |
|
Assert.IsFalse(heightTree.GetIsCollapsed(i)); |
|
} |
|
CheckHeights(); |
|
} |
|
|
|
[Test] |
|
public void FullCheck() |
|
{ |
|
for (int from = 1; from <= 10; from++) { |
|
for (int to = from; to <= 10; to++) { |
|
try { |
|
SimpleCheck(from, to).Uncollapse(); |
|
for (int i = 1; i <= 10; i++) { |
|
Assert.IsFalse(heightTree.GetIsCollapsed(i)); |
|
} |
|
CheckHeights(); |
|
} catch { |
|
Console.WriteLine("from = " + from + ", to = " + to); |
|
throw; |
|
} |
|
} |
|
} |
|
} |
|
|
|
[Test] |
|
public void InsertInCollapsedSection() |
|
{ |
|
CollapsedLineSection sec1 = heightTree.CollapseText(document.GetLineByNumber(4), document.GetLineByNumber(6)); |
|
document.Insert(document.GetLineByNumber(5).Offset, "a\nb\nc"); |
|
for (int i = 1; i < 4; i++) { |
|
Assert.IsFalse(heightTree.GetIsCollapsed(i)); |
|
} |
|
for (int i = 4; i <= 8; i++) { |
|
Assert.IsTrue(heightTree.GetIsCollapsed(i)); |
|
} |
|
for (int i = 9; i <= 12; i++) { |
|
Assert.IsFalse(heightTree.GetIsCollapsed(i)); |
|
} |
|
CheckHeights(); |
|
} |
|
|
|
[Test] |
|
public void RemoveInCollapsedSection() |
|
{ |
|
CollapsedLineSection sec1 = heightTree.CollapseText(document.GetLineByNumber(3), document.GetLineByNumber(7)); |
|
int line4Offset = document.GetLineByNumber(4).Offset; |
|
int line6Offset = document.GetLineByNumber(6).Offset; |
|
document.Remove(line4Offset, line6Offset - line4Offset); |
|
for (int i = 1; i < 3; i++) { |
|
Assert.IsFalse(heightTree.GetIsCollapsed(i)); |
|
} |
|
for (int i = 3; i <= 5; i++) { |
|
Assert.IsTrue(heightTree.GetIsCollapsed(i)); |
|
} |
|
for (int i = 6; i <= 8; i++) { |
|
Assert.IsFalse(heightTree.GetIsCollapsed(i)); |
|
} |
|
CheckHeights(); |
|
} |
|
|
|
[Test] |
|
public void RemoveEndOfCollapsedSection() |
|
{ |
|
CollapsedLineSection sec1 = heightTree.CollapseText(document.GetLineByNumber(3), document.GetLineByNumber(6)); |
|
int line5Offset = document.GetLineByNumber(5).Offset; |
|
int line8Offset = document.GetLineByNumber(8).Offset; |
|
document.Remove(line5Offset, line8Offset - line5Offset); |
|
for (int i = 1; i < 3; i++) { |
|
Assert.IsFalse(heightTree.GetIsCollapsed(i)); |
|
} |
|
for (int i = 3; i <= 5; i++) { |
|
Assert.IsTrue(heightTree.GetIsCollapsed(i)); |
|
} |
|
for (int i = 6; i <= 7; i++) { |
|
Assert.IsFalse(heightTree.GetIsCollapsed(i)); |
|
} |
|
CheckHeights(); |
|
} |
|
|
|
[Test] |
|
public void RemoveCollapsedSection() |
|
{ |
|
CollapsedLineSection sec1 = heightTree.CollapseText(document.GetLineByNumber(3), document.GetLineByNumber(3)); |
|
int line3Offset = document.GetLineByNumber(3).Offset; |
|
document.Remove(line3Offset - 1, 1); |
|
for (int i = 1; i <= 9; i++) { |
|
Assert.IsFalse(heightTree.GetIsCollapsed(i)); |
|
} |
|
CheckHeights(); |
|
Assert.AreSame(null, sec1.Start); |
|
Assert.AreSame(null, sec1.End); |
|
// section gets uncollapsed when it is removed |
|
Assert.IsFalse(sec1.IsCollapsed); |
|
} |
|
|
|
void CheckHeights() |
|
{ |
|
HeightTests.CheckHeights(document, heightTree); |
|
} |
|
} |
|
}
|
|
|