Added tests for the calculation of positions on content modifications.
Signed-off-by: Florian Thienel <florian@thienel.org>
diff --git a/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/dom/ContentTest.java b/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/dom/ContentTest.java
index a1e1166..af8f5ee 100644
--- a/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/dom/ContentTest.java
+++ b/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/dom/ContentTest.java
@@ -116,4 +116,54 @@
content.insertText(6, "Cut Out");
assertEquals("Hello Cut Out World", content.getText());
}
+
+ @Test
+ public void shouldIncreasePositionsOnInsertText() throws Exception {
+ content.insertText(0, "Hello World");
+ final Position helloPosition = content.createPosition(0);
+ final Position worldPosition = content.createPosition(6);
+ assertEquals("Hello", content.getText(helloPosition.getOffset(), 5));
+ assertEquals("World", content.getText(worldPosition.getOffset(), 5));
+
+ content.insertText(6, "New ");
+ assertEquals(0, helloPosition.getOffset());
+ assertEquals(10, worldPosition.getOffset());
+ assertEquals("Hello", content.getText(helloPosition.getOffset(), 5));
+ assertEquals("World", content.getText(worldPosition.getOffset(), 5));
+ }
+
+ @Test
+ public void shouldIncreasePositionsOnInsertElementMarker() throws Exception {
+ content.insertText(0, "Hello World");
+ final Position worldStartPosition = content.createPosition(6);
+ final Position worldEndPosition = content.createPosition(10);
+ assertEquals("d", content.getText(worldEndPosition.getOffset(), 1));
+ assertEquals("World", content.getText(worldStartPosition.getOffset(), worldEndPosition.getOffset() - worldStartPosition.getOffset() + 1));
+
+ content.insertElementMarker(11);
+ content.insertElementMarker(6);
+ assertEquals(7, worldStartPosition.getOffset());
+ assertEquals(11, worldEndPosition.getOffset());
+ assertEquals("d", content.getText(worldEndPosition.getOffset(), 1));
+ assertEquals("World", content.getText(worldStartPosition.getOffset(), worldEndPosition.getOffset() - worldStartPosition.getOffset() + 1));
+ assertTrue(content.isElementMarker(worldStartPosition.getOffset() - 1));
+ assertTrue(content.isElementMarker(worldEndPosition.getOffset() + 1));
+ }
+
+ @Test
+ public void shouldDecreasePositionOnRemove() throws Exception {
+ content.insertText(0, "Hello New World");
+ content.insertElementMarker(8);
+ content.insertElementMarker(6);
+ final Position worldStartPosition = content.createPosition(12);
+ final Position worldEndPosition = content.createPosition(16);
+ assertEquals("d", content.getText(worldEndPosition.getOffset(), 1));
+ assertEquals("World", content.getText(worldStartPosition.getOffset(), worldEndPosition.getOffset() - worldStartPosition.getOffset() + 1));
+
+ content.remove(6, 6);
+ assertEquals("d", content.getText(worldEndPosition.getOffset(), 1));
+ assertEquals("World", content.getText(worldStartPosition.getOffset(), worldEndPosition.getOffset() - worldStartPosition.getOffset() + 1));
+ assertEquals(6, worldStartPosition.getOffset());
+ assertEquals(10, worldEndPosition.getOffset());
+ }
}