test the comment editing functionality
Signed-off-by: Florian Thienel <florian@thienel.org>
diff --git a/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/widget/FakeCursor.java b/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/widget/FakeCursor.java
new file mode 100644
index 0000000..9060e9f
--- /dev/null
+++ b/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/widget/FakeCursor.java
@@ -0,0 +1,95 @@
+package org.eclipse.vex.core.internal.widget;
+
+import java.util.LinkedList;
+
+import org.eclipse.vex.core.internal.core.Graphics;
+import org.eclipse.vex.core.internal.cursor.ContentTopology;
+import org.eclipse.vex.core.internal.cursor.ICursor;
+import org.eclipse.vex.core.internal.cursor.ICursorMove;
+import org.eclipse.vex.core.internal.cursor.ICursorPositionListener;
+import org.eclipse.vex.core.internal.layout.FakeGraphics;
+import org.eclipse.vex.core.provisional.dom.ContentRange;
+import org.eclipse.vex.core.provisional.dom.IDocument;
+
+public class FakeCursor implements ICursor {
+
+ private final LinkedList<ICursorPositionListener> cursorPositionListeners = new LinkedList<ICursorPositionListener>();
+ private final Graphics graphics = new FakeGraphics();
+ private final ContentTopology contentTopology;
+
+ private int offset;
+ private boolean hasSelection;
+ private int selectionStartOffset;
+ private int selectionEndOffset;
+
+ public FakeCursor(final IDocument document) {
+ contentTopology = new ContentTopology() {
+ @Override
+ public int getLastOffset() {
+ return document.getEndOffset();
+ }
+ };
+ }
+
+ @Override
+ public int getOffset() {
+ return offset;
+ }
+
+ @Override
+ public boolean hasSelection() {
+ return hasSelection;
+ }
+
+ @Override
+ public ContentRange getSelectedRange() {
+ if (hasSelection) {
+ return new ContentRange(selectionStartOffset, selectionEndOffset);
+ } else {
+ return new ContentRange(offset, offset);
+ }
+ }
+
+ @Override
+ public void addPositionListener(final ICursorPositionListener listener) {
+ cursorPositionListeners.add(listener);
+ }
+
+ @Override
+ public void removePositionListener(final ICursorPositionListener listener) {
+ cursorPositionListeners.remove(listener);
+ }
+
+ private void firePositionChanged(final int offset) {
+ for (final ICursorPositionListener listener : cursorPositionListeners) {
+ listener.positionChanged(offset);
+ }
+ }
+
+ private void firePositionAboutToChange() {
+ for (final ICursorPositionListener listener : cursorPositionListeners) {
+ listener.positionAboutToChange();
+ }
+ }
+
+ @Override
+ public void move(final ICursorMove move) {
+ firePositionAboutToChange();
+ offset = move.calculateNewOffset(graphics, contentTopology, offset, null, null, 0);
+ hasSelection = false;
+ firePositionChanged(offset);
+ }
+
+ @Override
+ public void select(final ICursorMove move) {
+ firePositionAboutToChange();
+ if (!hasSelection) {
+ selectionStartOffset = offset;
+ }
+ offset = move.calculateNewOffset(graphics, contentTopology, offset, null, null, 0);
+ hasSelection = true;
+ selectionEndOffset = offset;
+ firePositionChanged(offset);
+ }
+
+}
diff --git a/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/widget/L2CommentEditingTest.java b/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/widget/L2CommentEditingTest.java
index e039e5a..62a056e 100644
--- a/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/widget/L2CommentEditingTest.java
+++ b/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/widget/L2CommentEditingTest.java
@@ -23,6 +23,7 @@
import static org.junit.Assert.assertTrue;
import org.eclipse.vex.core.provisional.dom.IComment;
+import org.eclipse.vex.core.provisional.dom.IDocument;
import org.eclipse.vex.core.provisional.dom.IDocumentFragment;
import org.eclipse.vex.core.provisional.dom.IElement;
import org.eclipse.vex.core.provisional.dom.INode;
@@ -39,8 +40,9 @@
@Before
public void setUp() throws Exception {
- editor = new BaseVexWidget(new MockHostComponent());
- editor.setDocument(createDocumentWithDTD(TEST_DTD, "section"));
+ final IDocument document = createDocumentWithDTD(TEST_DTD, "section");
+ editor = new DocumentEditor(new FakeCursor(document));
+ editor.setDocument(document);
rootElement = editor.getDocument().getRootElement();
}