private static int SplitAtColisions(IList <VNode> previousLayer, int j, VNode current, VNode previous) { var startCollides = current.Index > previous.Index && current.Index < previous.Index + previous.Length; if (startCollides) { var partAfter = previous.SplitAt(current.Index); j++; previousLayer.Insert(j, partAfter); previous = partAfter; } var endsCollides = current.Index + current.Length > previous.Index && current.Index + current.Length < previous.Index + previous.Length; if (endsCollides) { var partAfter = previous.SplitAt(current.Index + current.Length); j++; previousLayer.Insert(j, partAfter); } return(j); }
public void SplitAt_SameEndIndexPostSplitTest() { var instance = new VNode("a", "", 18, 41); instance.VOffsets.Add(new VTextOffset { Index = 18, Delta = -41 }); var nextPart = instance.SplitAt(19); Assert.AreEqual("a", instance.Tag); Assert.AreEqual("", instance.Text); Assert.AreEqual(18, instance.Index); Assert.AreEqual(1, instance.Length); Assert.AreEqual(1, instance.VOffsets.Count); Assert.AreEqual(18, instance.VOffsets.Single().Index); Assert.AreEqual(-1, instance.VOffsets.Single().Delta); Assert.AreEqual("a", nextPart.Tag); Assert.AreEqual("", nextPart.Text); Assert.AreEqual(19, nextPart.Index); Assert.AreEqual(40, nextPart.Length); Assert.AreEqual(1, nextPart.VOffsets.Count); Assert.AreEqual(19, nextPart.VOffsets.Single().Index); Assert.AreEqual(-40, nextPart.VOffsets.Single().Delta); }
public void SplitAt_NegativeVOffsetMiddleWithTextTest() { var instance = new VNode("a", "1234", 45, 31); instance.VOffsets.Add(new VTextOffset { Index = 45, Delta = 4 }); instance.VOffsets.Add(new VTextOffset { Index = 45, Delta = -31 }); var nextPart = instance.SplitAt(61); Assert.AreEqual("a", instance.Tag); Assert.AreEqual("1234", instance.Text); Assert.AreEqual(45, instance.Index); Assert.AreEqual(16, instance.Length); Assert.AreEqual(2, instance.VOffsets.Count); Assert.AreEqual(45, instance.VOffsets.First().Index); Assert.AreEqual(4, instance.VOffsets.First().Delta); Assert.AreEqual(45, instance.VOffsets.Last().Index); Assert.AreEqual(-16, instance.VOffsets.Last().Delta); Assert.AreEqual("a", nextPart.Tag); Assert.AreEqual("", nextPart.Text); Assert.AreEqual(61, nextPart.Index); Assert.AreEqual(15, nextPart.Length); Assert.AreEqual(1, nextPart.VOffsets.Count); Assert.AreEqual(61, nextPart.VOffsets.First().Index); Assert.AreEqual(-15, nextPart.VOffsets.First().Delta); }
public void SplitAt_NegativeVOffsetMiddleTest() { var instance = new VNode("a", "", 0, 6); instance.VOffsets.Add(new VTextOffset { Index = 0, Delta = -6 }); var nextPart = instance.SplitAt(3); Assert.AreEqual("a", instance.Tag); Assert.AreEqual("", instance.Text); Assert.AreEqual(0, instance.Index); Assert.AreEqual(3, instance.Length); Assert.AreEqual(1, instance.VOffsets.Count); Assert.AreEqual(0, instance.VOffsets.Single().Index); Assert.AreEqual(-3, instance.VOffsets.Single().Delta); Assert.AreEqual("a", nextPart.Tag); Assert.AreEqual("", nextPart.Text); Assert.AreEqual(3, nextPart.Index); Assert.AreEqual(3, nextPart.Length); Assert.AreEqual(1, nextPart.VOffsets.Count); Assert.AreEqual(3, nextPart.VOffsets.Single().Index); Assert.AreEqual(-3, nextPart.VOffsets.Single().Delta); }
public void SplitAt_PositiveVOffsetStartTest() { var instance = new VNode("a", "xx0123456789", 5, 10); instance.VOffsets.Add(new VTextOffset { Index = 5, Delta = 2 }); var nextPart = instance.SplitAt(10); Assert.AreEqual("a", instance.Tag); Assert.AreEqual("xx01234", instance.Text); Assert.AreEqual(5, instance.Index); Assert.AreEqual(5, instance.Length); Assert.AreEqual(1, instance.VOffsets.Count); Assert.AreEqual("a", nextPart.Tag); Assert.AreEqual("56789", nextPart.Text); Assert.AreEqual(10, nextPart.Index); Assert.AreEqual(5, nextPart.Length); Assert.AreEqual(0, nextPart.VOffsets.Count); }
public void SplitAt_NegativeVOffsetEndTest() { var instance = new VNode("a", "0123456789", 5, 12); instance.VOffsets.Add(new VTextOffset { Index = 13, Delta = -2 }); var nextPart = instance.SplitAt(10); Assert.AreEqual("a", instance.Tag); Assert.AreEqual("01234", instance.Text); Assert.AreEqual(5, instance.Index); Assert.AreEqual(5, instance.Length); Assert.AreEqual(0, instance.VOffsets.Count); Assert.AreEqual("a", nextPart.Tag); Assert.AreEqual("56789", nextPart.Text); Assert.AreEqual(10, nextPart.Index); Assert.AreEqual(7, nextPart.Length); Assert.AreEqual(1, nextPart.VOffsets.Count); }
public void SplitAt_NegativeVOffsetSecondEmptyTest() { var instance = new VNode("a", "01234", 0, 10); instance.VOffsets.Add(new VTextOffset { Index = 5, Delta = -5 }); var nextPart = instance.SplitAt(5); Assert.AreEqual("a", instance.Tag); Assert.AreEqual("01234", instance.Text); Assert.AreEqual(0, instance.Index); Assert.AreEqual(5, instance.Length); Assert.AreEqual(0, instance.VOffsets.Count); Assert.AreEqual("a", nextPart.Tag); Assert.AreEqual("", nextPart.Text); Assert.AreEqual(5, nextPart.Index); Assert.AreEqual(5, nextPart.Length); Assert.AreEqual(1, nextPart.VOffsets.Count); }
public void SplitAt_Test() { var instance = new VNode("a", "0123456789", 5, 10); instance.SetAttribute("a", "1"); instance.SetAttribute("b", "2"); var nextPart = instance.SplitAt(10); Assert.AreEqual("a", instance.Tag); Assert.AreEqual("01234", instance.Text); Assert.AreEqual(5, instance.Index); Assert.AreEqual(5, instance.Length); Assert.AreEqual("1", instance.Attributes["a"]); Assert.AreEqual("2", instance.Attributes["b"]); Assert.AreEqual("a", nextPart.Tag); Assert.AreEqual("56789", nextPart.Text); Assert.AreEqual(10, nextPart.Index); Assert.AreEqual(5, nextPart.Length); Assert.AreEqual("1", nextPart.Attributes["a"]); Assert.AreEqual("2", nextPart.Attributes["b"]); }