blob: 9b092d08ab3b3b33699836ce321a0243a4488c63 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012 Florian Thienel and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Florian Thienel - initial API and implementation
*******************************************************************************/
package org.eclipse.vex.core.internal.dom;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.eclipse.vex.core.dom.IContent;
import org.eclipse.vex.core.dom.ContentRange;
import org.eclipse.vex.core.dom.IPosition;
import org.junit.Before;
import org.junit.Test;
public abstract class ContentTest {
private IContent content;
@Before
public void setUp() throws Exception {
content = createContent();
}
protected abstract IContent createContent();
@Test
public void insertText() throws Exception {
final String text = "Hello World";
assertEquals(0, content.length());
content.insertText(0, text);
assertEquals(text.length(), content.length());
}
@Test
public void insertTagMarker() throws Exception {
content.insertTagMarker(0);
assertEquals(1, content.length());
assertTrue(content.isTagMarker(0));
}
@Test
public void mixTextWithTagMarkers() throws Exception {
final String text = "Hello World";
content.insertText(0, text);
content.insertTagMarker(5);
assertEquals("Each tag marker should count 1 in the length calculation.", text.length() + 1, content.length());
}
@Test
public void shouldReturnPlainTextWithoutTagMarkers() throws Exception {
final String text = "Hello World";
content.insertText(0, text);
content.insertTagMarker(5);
assertEquals(text, content.getText());
}
@Test
public void shouldReturnAPartialCopy() throws Exception {
final String text = "Hello World";
content.insertText(0, text);
final IContent partialCopy = content.getContent(new ContentRange(3, 7));
assertEquals("lo Wo", partialCopy.getText());
// make shure, it is a copy
content.insertText(6, "New ");
assertEquals("Hello New World", content.getText());
assertEquals("lo Wo", partialCopy.getText());
}
@Test
public void shouldReturnAFullCopy() throws Exception {
final String text = "Hello World";
content.insertText(0, text);
final IContent fullCopy = content.getContent();
assertEquals(text, fullCopy.getText());
// make shure, it is a copy
content.insertText(6, "New ");
assertEquals("Hello New World", content.getText());
assertEquals(text, fullCopy.getText());
}
@Test
public void insertContent() throws Exception {
content.insertText(0, "Hello World");
final IContent other = createContent();
other.insertTagMarker(0);
other.insertText(1, "New");
other.insertTagMarker(4);
content.insertContent(6, other);
assertEquals(16, content.length());
assertEquals("Hello NewWorld", content.getText());
assertTrue(content.isTagMarker(6));
assertTrue(content.isTagMarker(10));
}
@Test
public void removeAndInsertContent() throws Exception {
content.insertText(0, "Hello Cut Out World");
content.insertTagMarker(6);
content.insertTagMarker(14);
content.remove(new ContentRange(7, 13));
assertTrue(content.isTagMarker(6));
assertTrue(content.isTagMarker(7));
content.remove(new ContentRange(6, 7));
assertEquals("Hello World", content.getText());
content.insertText(6, "Cut Out");
assertEquals("Hello Cut Out World", content.getText());
}
@Test
public void shouldIncreasePositionsOnInsertText() throws Exception {
content.insertText(0, "Hello World");
final IPosition helloPosition = content.createPosition(0);
final IPosition worldPosition = content.createPosition(6);
assertEquals("Hello", content.getText(new ContentRange(helloPosition.getOffset(), helloPosition.getOffset() + 4)));
assertEquals("World", content.getText(new ContentRange(worldPosition.getOffset(), worldPosition.getOffset() + 4)));
content.insertText(6, "New ");
assertEquals(0, helloPosition.getOffset());
assertEquals(10, worldPosition.getOffset());
assertEquals("Hello", content.getText(new ContentRange(helloPosition.getOffset(), helloPosition.getOffset() + 4)));
assertEquals("World", content.getText(new ContentRange(worldPosition.getOffset(), worldPosition.getOffset() + 4)));
}
@Test
public void shouldIncreasePositionsOnInsertTagMarker() throws Exception {
content.insertText(0, "Hello World");
final IPosition worldStartPosition = content.createPosition(6);
final IPosition worldEndPosition = content.createPosition(10);
assertEquals("d", content.getText(new ContentRange(worldEndPosition.getOffset(), worldEndPosition.getOffset())));
assertEquals("World", content.getText(new ContentRange(worldStartPosition.getOffset(), worldEndPosition.getOffset())));
content.insertTagMarker(11);
content.insertTagMarker(6);
assertEquals(7, worldStartPosition.getOffset());
assertEquals(11, worldEndPosition.getOffset());
assertEquals("d", content.getText(new ContentRange(worldEndPosition.getOffset(), worldEndPosition.getOffset())));
assertEquals("World", content.getText(new ContentRange(worldStartPosition.getOffset(), worldEndPosition.getOffset())));
assertTrue(content.isTagMarker(worldStartPosition.getOffset() - 1));
assertTrue(content.isTagMarker(worldEndPosition.getOffset() + 1));
}
@Test
public void shouldDecreasePositionOnRemove() throws Exception {
content.insertText(0, "Hello New World");
content.insertTagMarker(8);
content.insertTagMarker(6);
final IPosition worldStartPosition = content.createPosition(12);
final IPosition worldEndPosition = content.createPosition(16);
assertEquals("d", content.getText(new ContentRange(worldEndPosition.getOffset(), worldEndPosition.getOffset())));
assertEquals("World", content.getText(new ContentRange(worldStartPosition.getOffset(), worldEndPosition.getOffset())));
content.remove(new ContentRange(6, 11));
assertEquals("d", content.getText(new ContentRange(worldEndPosition.getOffset(), worldEndPosition.getOffset())));
assertEquals("World", content.getText(new ContentRange(worldStartPosition.getOffset(), worldEndPosition.getOffset())));
assertEquals(6, worldStartPosition.getOffset());
assertEquals(10, worldEndPosition.getOffset());
}
@Test
public void shouldMovePositionsWithinRemovedRangeToRangeStart() throws Exception {
content.insertText(0, "Hello New World");
final IPosition nPosition = content.createPosition(6);
final IPosition ePosition = content.createPosition(7);
final IPosition wPosition = content.createPosition(8);
content.remove(new ContentRange(6, 8));
assertEquals(6, nPosition.getOffset());
assertEquals(6, ePosition.getOffset());
assertEquals(6, wPosition.getOffset());
}
@Test
public void canRemovePosition() throws Exception {
content.insertTagMarker(0);
content.insertTagMarker(0);
final IPosition position = content.createPosition(1);
assertEquals(1, position.getOffset());
content.removePosition(position);
content.insertText(1, "Hello");
assertEquals(1, position.getOffset());
}
@Test
public void invalidatesPositionsOnRemoval() throws Exception {
content.insertTagMarker(0);
content.insertTagMarker(0);
final IPosition position = content.createPosition(1);
assertTrue(position.isValid());
content.removePosition(position);
assertFalse(position.isValid());
}
@Test
public void rawTextContainsTagMarkers() throws Exception {
content.insertTagMarker(0);
content.insertTagMarker(0);
content.insertText(1, "Hello World");
content.insertTagMarker(6);
assertFalse(content.getText().equals(content.getRawText()));
assertEquals(content.getText().length() + 3, content.getRawText().length());
assertFalse(content.getText().charAt(0) == content.getRawText().charAt(0));
assertEquals(content.getText(new ContentRange(1, 5)), content.getRawText(new ContentRange(1, 5)));
assertEquals(content.getText().substring(0, 5), content.getRawText(new ContentRange(1, 5)));
}
@Test
public void shouldReturnCharacterAtOffset() throws Exception {
content.insertTagMarker(0);
content.insertTagMarker(0);
content.insertText(1, "Hello World");
for (int i = 0; i < content.length(); i++) {
assertEquals(content.getRawText().charAt(i), content.charAt(i));
}
}
}