test simple deletion commands

Signed-off-by: Florian Thienel <florian@thienel.org>
diff --git a/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/widget/L2SimpleEditingTest.java b/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/widget/L2SimpleEditingTest.java
index 6f0d5dc..f65fb59 100644
--- a/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/widget/L2SimpleEditingTest.java
+++ b/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/widget/L2SimpleEditingTest.java
@@ -60,7 +60,7 @@
 	}

 

 	@Test

-	public void givenAnElementWithText_whenHittingBackspace_shouldDeleteLastCharacter() throws Exception {

+	public void givenAnElementWithText_whenAtEndOfTextAndHittingBackspace_shouldDeleteLastCharacter() throws Exception {

 		final Element titleElement = widget.insertElement(TITLE);

 		widget.insertText("Hello");

 		widget.deletePreviousChar();

@@ -69,7 +69,7 @@
 	}

 

 	@Test

-	public void givenAnElementWithText_whenHittingPos1AndDelete_shouldDeleteFirstCharacter() throws Exception {

+	public void givenAnElementWithText_whenAtBeginningOfTextAndHittingDelete_shouldDeleteFirstCharacter() throws Exception {

 		final Element titleElement = widget.insertElement(TITLE);

 		widget.insertText("Hello");

 		widget.moveBy(-5);

@@ -90,7 +90,30 @@
 	}

 

 	@Test

-	public void givenAnEmptyElement_whenCaretBeforeStartOffsetAndHittingDelete_shouldDeleteEmptyElement() throws Exception {

+	public void givenAnEmptyElement_whenCaretBetweenStartAndEndTagAndHittingDelete_shouldDeleteEmptyElement() throws Exception {

+		widget.insertElement(TITLE);

+		widget.moveBy(1);

+		final Element paraElement = widget.insertElement(PARA);

+		widget.deleteNextChar();

+		assertEquals(1, rootElement.getChildCount());

+		assertNull(paraElement.getParent());

+		assertFalse(paraElement.isAssociated());

+	}

+

+	@Test

+	public void givenAnEmptyElement_whenCaretAfterEndTagAndHittingDelete_shouldDeleteEmptyElement() throws Exception {

+		widget.insertElement(TITLE);

+		widget.moveBy(1);

+		final Element paraElement = widget.insertElement(PARA);

+		widget.moveBy(1);

+		widget.deletePreviousChar();

+		assertEquals(1, rootElement.getChildCount());

+		assertNull(paraElement.getParent());

+		assertFalse(paraElement.isAssociated());

+	}

+

+	@Test

+	public void givenAnEmptyElement_whenCaretBeforeStartTagAndHittingDelete_shouldDeleteEmptyElement() throws Exception {

 		widget.insertElement(TITLE);

 		widget.moveBy(1);

 		final Element paraElement = widget.insertElement(PARA);

@@ -100,4 +123,5 @@
 		assertNull(paraElement.getParent());

 		assertFalse(paraElement.isAssociated());

 	}

+

 }

diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/VexWidgetImpl.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/VexWidgetImpl.java
index 28b6169..7d54c28 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/VexWidgetImpl.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/VexWidgetImpl.java
@@ -329,7 +329,7 @@
 				this.moveTo(offset + 1, true);
 				deleteSelection();
 			} else if (!doc.isElementAt(offset)) {
-				deleteOffset();
+				deleteNextToCaret();
 			}
 		}
 	}
@@ -363,13 +363,13 @@
 				offset--;
 				if (!doc.isElementAt(offset)) {
 					moveBy(-1);
-					deleteOffset();
+					deleteNextToCaret();
 				}
 			}
 		}
 	}
 
-	private void deleteOffset() {
+	private void deleteNextToCaret() {
 		try {
 			applyEdit(new DeleteEdit(document, new Range(getCaretOffset(), getCaretOffset())), getCaretOffset());
 			this.moveTo(getSelectionStart());
@@ -1413,7 +1413,7 @@
 		}
 		final Element e1 = getDocument().getElementForInsertionAt(offset - 1);
 		final Element e2 = getDocument().getElementForInsertionAt(offset + 1);
-		return e1 != e2 && e1.getParent() == e2.getParent() && e1.getQualifiedName().equals(e2.getQualifiedName());
+		return e1 != e2 && e1.getParent() == e2.getParent() && e1.isKindOf(e2);
 	}
 
 	/**