do not include the text of intersecting children into childNodes(Range)
Signed-off-by: Florian Thienel <florian@thienel.org>
diff --git a/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/dom/ParentTest.java b/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/dom/ParentTest.java
index 1477604..4aa272f 100644
--- a/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/dom/ParentTest.java
+++ b/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/dom/ParentTest.java
@@ -442,6 +442,19 @@
}
@Test
+ public void shouldProvideChildNodesBeforeOffsetWithoutTextfragmentOfIntersectingChild() throws Exception {
+ final TestChild child1 = addTestChild();
+ final TestChild child2 = addTestChild();
+ final TestChild child3 = addTestChild();
+ content.insertText(child3.getEndOffset(), "Hello World");
+
+ final List<Node> childNodes12 = parent.getChildNodesBefore(child3.getStartOffset() + 5);
+ assertEquals(2, childNodes12.size());
+ assertSame(child1, childNodes12.get(0));
+ assertSame(child2, childNodes12.get(1));
+ }
+
+ @Test
public void shouldProvideChildNodesAfterOffset() throws Exception {
final TestChild child1 = addTestChild();
final TestChild child2 = addTestChild();
@@ -462,6 +475,19 @@
}
@Test
+ public void shouldProvideChildNodesAfterOffsetWithoutTextfragmentOfIntersectingChild() throws Exception {
+ final TestChild child1 = addTestChild();
+ content.insertText(child1.getEndOffset(), "Hello World");
+ final TestChild child2 = addTestChild();
+ final TestChild child3 = addTestChild();
+
+ final List<Node> childNodes23 = parent.getChildNodesAfter(child1.getEndOffset() - 5);
+ assertEquals(2, childNodes23.size());
+ assertSame(child2, childNodes23.get(0));
+ assertSame(child3, childNodes23.get(1));
+ }
+
+ @Test
public void shouldProvideInsertionIndexForOffset() throws Exception {
final TestChild child1 = addTestChild();
final TestChild child2 = addTestChild();
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Parent.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Parent.java
index d7bd274..ecc0899 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Parent.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Parent.java
@@ -116,6 +116,12 @@
mergeTextIntoResult(textStart, child.getStartOffset(), result);
result.add(child);
textStart = child.getEndOffset() + 1;
+ } else if (trimmedRange.contains(child.getStartOffset())) {
+ mergeTextIntoResult(textStart, child.getStartOffset(), result);
+ textStart = child.getEndOffset() + 1;
+ break; // we can bail out here because we are behind the trimmed range now
+ } else if (trimmedRange.contains(child.getEndOffset())) {
+ textStart = child.getEndOffset() + 1;
}
}