using System; using Amphora; using Glass.Editing; using UnitTestSharp; namespace Glass.UnitTests.Editing { public class CharRunTests : TestFixture { public class AppendTests : TestFixture { public void StartsEmpty() { CheckEqual(0, new CharRun().Length); } public void AddsAtTheEnd() { var run = new CharRun(); run.Append("xabcx", 1, 3); run.Append("yzy", 1, 1); CheckEqual("abcz", run.ToString()); } public void AView_AddsOnlyItsOwnCharacters() { var run = new CharRun(); run.Append("12", 0, 2); run.Append(new StringView("xabcx", 1, 4)); CheckEqual("12abc", run.ToString()); } public void ADefaultView_AddsNothing() { var run = new CharRun(); run.Append("12", 0, 2); run.Append(default(StringView)); CheckEqual("12", run.ToString()); } public void GrowsPastItsFirstRoom() { var run = new CharRun(); run.Append(new string('a', 40), 0, 40); CheckEqual(40, run.Length); CheckEqual(new string('a', 40), run.ToString()); } } public class PrependTests : TestFixture { public void AddsAtTheStart() { var run = new CharRun(); run.Append("cd", 0, 2); run.Prepend("xabx", 1, 2); CheckEqual("abcd", run.ToString()); } public void AView_AddsOnlyItsOwnCharacters() { var run = new CharRun(); run.Append("12", 0, 2); run.Prepend(new StringView("xabcx", 1, 4)); CheckEqual("abc12", run.ToString()); } public void ADefaultView_AddsNothing() { var run = new CharRun(); run.Append("12", 0, 2); run.Prepend(default(StringView)); CheckEqual("12", run.ToString()); } public void GrowsPastItsFirstRoom() { var run = new CharRun(); run.Append(new string('a', 40), 0, 40); run.Prepend(new string('b', 100), 0, 100); CheckEqual(140, run.Length); CheckEqual(new string('b', 100) + new string('a', 40), run.ToString()); } } public class ClearTests : TestFixture { public void Empties() { var run = new CharRun(); run.Append("abc", 0, 3); run.Clear(); CheckEqual(0, run.Length); } public void KeepsTheRoomOfASmallRun() { var run = new CharRun(); run.Append("abc", 0, 3); int capacity = run.Capacity; run.Clear(); CheckEqual(capacity, run.Capacity); } public void GivesBackRoomBeyondWhatItKeeps() { var run = new CharRun(); run.Append(new string('a', CharRun.RetainedCapacity + 1), 0, CharRun.RetainedCapacity + 1); run.Clear(); Check(run.Capacity <= CharRun.RetainedCapacity); } } public class FirstCodePointTests : TestFixture { public void IsTheFirstChar() { var run = new CharRun(); run.Append("abc", 0, 3); CheckEqual('a', run.FirstCodePoint); } public void JoinsASurrogatePair() { var run = new CharRun(); string text = char.ConvertFromUtf32(0x20BB7) + "a"; run.Append(text, 0, text.Length); CheckEqual(0x20BB7, run.FirstCodePoint); } public void OfAnEmptyRun_Throws() { CheckThrow(typeof(InvalidOperationException)); GC.KeepAlive(new CharRun().FirstCodePoint); } } public class LastCodePointTests : TestFixture { public void IsTheLastChar() { var run = new CharRun(); run.Append("abc", 0, 3); CheckEqual('c', run.LastCodePoint); } public void JoinsASurrogatePair() { var run = new CharRun(); string text = "a" + char.ConvertFromUtf32(0x20BB7); run.Append(text, 0, text.Length); CheckEqual(0x20BB7, run.LastCodePoint); } public void OfAnEmptyRun_Throws() { CheckThrow(typeof(InvalidOperationException)); GC.KeepAlive(new CharRun().LastCodePoint); } } public class AppendToTests : TestFixture { public void AddsTheCharsHeldToTheBuilder() { var run = new CharRun(); run.Append("xabx", 1, 2); var builder = new System.Text.StringBuilder("1"); run.AppendTo(builder); CheckEqual("1ab", builder.ToString()); } public void OfAnEmptyRun_AddsNothing() { var builder = new System.Text.StringBuilder("1"); new CharRun().AppendTo(builder); CheckEqual("1", builder.ToString()); } } public class AsViewTests : TestFixture { public void ViewsTheCharsHeldAndNotTheSpareRoom() { var run = new CharRun(); run.Append("xabx", 1, 2); CheckEqual("ab", run.AsView().ToString()); } public void OfAnEmptyRun_IsEmpty() { CheckEqual(0, new CharRun().AsView().Length); } } public class CapacityTests : TestFixture { public void GrowsWithTheChars() { var run = new CharRun(); run.Append(new string('a', 100), 0, 100); Check(run.Capacity >= 100); } } public class ToStringTests : TestFixture { public void OfAnEmptyRun_IsEmpty() { CheckEqual("", new CharRun().ToString()); } public void IsTheCharsHeld() { var run = new CharRun(); run.Append("xabx", 1, 2); CheckEqual("ab", run.ToString()); } } } }