156 lines
4.3 KiB
C#
156 lines
4.3 KiB
C#
// 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);
|
|
}
|
|
}
|
|
}
|