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.
180 lines
4.6 KiB
180 lines
4.6 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 System.IO; |
|
using NUnit.Framework; |
|
using System.Text; |
|
|
|
namespace ICSharpCode.AvalonEdit.Utils |
|
{ |
|
[TestFixture] |
|
public class RopeTests |
|
{ |
|
[Test] |
|
public void EmptyRope() |
|
{ |
|
Rope<char> empty = new Rope<char>(); |
|
Assert.AreEqual(0, empty.Length); |
|
Assert.AreEqual("", empty.ToString()); |
|
} |
|
|
|
[Test] |
|
public void EmptyRopeFromString() |
|
{ |
|
Rope<char> empty = new Rope<char>(string.Empty); |
|
Assert.AreEqual(0, empty.Length); |
|
Assert.AreEqual("", empty.ToString()); |
|
} |
|
|
|
[Test] |
|
public void InitializeRopeFromShortString() |
|
{ |
|
Rope<char> rope = new Rope<char>("Hello, World"); |
|
Assert.AreEqual(12, rope.Length); |
|
Assert.AreEqual("Hello, World", rope.ToString()); |
|
} |
|
|
|
string BuildLongString(int lines) |
|
{ |
|
StringWriter w = new StringWriter(); |
|
w.NewLine = "\n"; |
|
for (int i = 1; i <= lines; i++) { |
|
w.WriteLine(i.ToString()); |
|
} |
|
return w.ToString(); |
|
} |
|
|
|
[Test] |
|
public void InitializeRopeFromLongString() |
|
{ |
|
string text = BuildLongString(1000); |
|
Rope<char> rope = new Rope<char>(text); |
|
Assert.AreEqual(text.Length, rope.Length); |
|
Assert.AreEqual(text, rope.ToString()); |
|
Assert.AreEqual(text.ToCharArray(), rope.ToArray()); |
|
} |
|
|
|
[Test] |
|
public void TestToArrayAndToStringWithParts() |
|
{ |
|
string text = BuildLongString(1000); |
|
Rope<char> rope = new Rope<char>(text); |
|
|
|
string textPart = text.Substring(1200, 600); |
|
char[] arrayPart = textPart.ToCharArray(); |
|
Assert.AreEqual(textPart, rope.ToString(1200, 600)); |
|
Assert.AreEqual(arrayPart, rope.ToArray(1200, 600)); |
|
|
|
Rope<char> partialRope = rope.GetRange(1200, 600); |
|
Assert.AreEqual(textPart, partialRope.ToString()); |
|
Assert.AreEqual(arrayPart, partialRope.ToArray()); |
|
} |
|
|
|
[Test] |
|
public void ConcatenateStringToRope() |
|
{ |
|
StringBuilder b = new StringBuilder(); |
|
Rope<char> rope = new Rope<char>(); |
|
for (int i = 1; i <= 1000; i++) { |
|
b.Append(i.ToString()); |
|
rope.AddText(i.ToString()); |
|
b.Append(' '); |
|
rope.Add(' '); |
|
} |
|
Assert.AreEqual(b.ToString(), rope.ToString()); |
|
} |
|
|
|
[Test] |
|
public void ConcatenateSmallRopesToRope() |
|
{ |
|
StringBuilder b = new StringBuilder(); |
|
Rope<char> rope = new Rope<char>(); |
|
for (int i = 1; i <= 1000; i++) { |
|
b.Append(i.ToString()); |
|
b.Append(' '); |
|
rope.AddRange(CharRope.Create(i.ToString() + " ")); |
|
} |
|
Assert.AreEqual(b.ToString(), rope.ToString()); |
|
} |
|
|
|
[Test] |
|
public void AppendLongTextToEmptyRope() |
|
{ |
|
string text = BuildLongString(1000); |
|
Rope<char> rope = new Rope<char>(); |
|
rope.AddText(text); |
|
Assert.AreEqual(text, rope.ToString()); |
|
} |
|
|
|
[Test] |
|
public void ConcatenateStringToRopeBackwards() |
|
{ |
|
StringBuilder b = new StringBuilder(); |
|
Rope<char> rope = new Rope<char>(); |
|
for (int i = 1; i <= 1000; i++) { |
|
b.Append(i.ToString()); |
|
b.Append(' '); |
|
} |
|
for (int i = 1000; i >= 1; i--) { |
|
rope.Insert(0, ' '); |
|
rope.InsertText(0, i.ToString()); |
|
} |
|
Assert.AreEqual(b.ToString(), rope.ToString()); |
|
} |
|
|
|
[Test] |
|
public void ConcatenateSmallRopesToRopeBackwards() |
|
{ |
|
StringBuilder b = new StringBuilder(); |
|
Rope<char> rope = new Rope<char>(); |
|
for (int i = 1; i <= 1000; i++) { |
|
b.Append(i.ToString()); |
|
b.Append(' '); |
|
} |
|
for (int i = 1000; i >= 1; i--) { |
|
rope.InsertRange(0, CharRope.Create(i.ToString() + " ")); |
|
} |
|
Assert.AreEqual(b.ToString(), rope.ToString()); |
|
} |
|
|
|
[Test] |
|
public void ConcatenateStringToRopeByInsertionInMiddle() |
|
{ |
|
StringBuilder b = new StringBuilder(); |
|
Rope<char> rope = new Rope<char>(); |
|
for (int i = 1; i <= 998; i++) { |
|
b.Append(i.ToString("d3")); |
|
b.Append(' '); |
|
} |
|
int middle = 0; |
|
for (int i = 1; i <= 499; i++) { |
|
rope.InsertText(middle, i.ToString("d3")); |
|
middle += 3; |
|
rope.Insert(middle, ' '); |
|
middle++; |
|
rope.InsertText(middle, (999-i).ToString("d3")); |
|
rope.Insert(middle + 3, ' '); |
|
} |
|
Assert.AreEqual(b.ToString(), rope.ToString()); |
|
} |
|
|
|
[Test] |
|
public void ConcatenateSmallRopesByInsertionInMiddle() |
|
{ |
|
StringBuilder b = new StringBuilder(); |
|
Rope<char> rope = new Rope<char>(); |
|
for (int i = 1; i <= 1000; i++) { |
|
b.Append(i.ToString("d3")); |
|
b.Append(' '); |
|
} |
|
int middle = 0; |
|
for (int i = 1; i <= 500; i++) { |
|
rope.InsertRange(middle, CharRope.Create(i.ToString("d3") + " ")); |
|
middle += 4; |
|
rope.InsertRange(middle, CharRope.Create((1001-i).ToString("d3") + " ")); |
|
} |
|
Assert.AreEqual(b.ToString(), rope.ToString()); |
|
} |
|
} |
|
}
|
|
|