package org.basex.data; import static org.junit.Assert.*; import java.io.*; import org.junit.*; /** * This class tests the update features of the {@link Data} class. * * @author BaseX Team 2005-17, BSD License * @author Tim Petrowsky */ public final class UpdateDeleteTest extends DataUpdateTest { /** * Tests deletion of a simple node. * @throws IOException I/O exception */ @Test public void simpleNodeDelete() throws IOException { final Data data = context.data(); final int oldDocSize = data.size(0, Data.DOC); final int oldRootSize = data.size(1, Data.ELEM); final int oldParSize = data.size(2, Data.ELEM); data.startUpdate(context.options); data.delete(3); data.finishUpdate(context.options); assertEquals(size - 1, data.meta.size); assertArraysEquals(T_PARENTNODE, data.name(3, Data.ELEM)); assertEquals(oldDocSize - 1, data.size(0, Data.DOC)); assertEquals(oldRootSize - 1, data.size(1, Data.ELEM)); assertEquals(oldParSize - 1, data.size(2, Data.ELEM)); assertEquals(1, data.parent(3, Data.ELEM)); reload(); assertEquals(size - 1, data.meta.size); assertArraysEquals(T_PARENTNODE, data.name(3, Data.ELEM)); assertEquals(oldDocSize - 1, data.size(0, Data.DOC)); assertEquals(oldRootSize - 1, data.size(1, Data.ELEM)); assertEquals(oldParSize - 1, data.size(2, Data.ELEM)); assertEquals(1, data.parent(3, Data.ELEM)); } /** * Tests deletion of a node with a child. * @throws IOException I/O exception */ @Test public void cascadingDelete() throws IOException { final Data data = context.data(); final int oldDocSize = data.size(0, Data.DOC); final int oldRootSize = data.size(1, Data.ELEM); data.startUpdate(context.options); data.delete(2); data.finishUpdate(context.options); assertEquals(size - 2, data.meta.size); assertArraysEquals(T_PARENTNODE, data.name(2, Data.ELEM)); assertEquals(oldDocSize - 2, data.size(0, Data.DOC)); assertEquals(oldRootSize - 2, data.size(1, Data.ELEM)); assertEquals(1, data.parent(2, Data.ELEM)); reload(); assertEquals(size - 2, data.meta.size); assertArraysEquals(T_PARENTNODE, data.name(2, Data.ELEM)); assertEquals(oldDocSize - 2, data.size(0, Data.DOC)); assertEquals(oldRootSize - 2, data.size(1, Data.ELEM)); assertEquals(1, data.parent(2, Data.ELEM)); } /** * Tests deletion of a node with a child (with text) and attribute. * @throws IOException I/O exception */ @Test public void cascadingDelete2() throws IOException { final Data data = context.data(); final int oldDocSize = data.size(0, Data.DOC); final int oldRootSize = data.size(1, Data.ELEM); final int oldParentSize = data.size(4, Data.ELEM); data.startUpdate(context.options); data.delete(6); data.finishUpdate(context.options); assertEquals(size - 5, data.meta.size); assertArraysEquals(T_B, data.name(6, Data.ELEM)); assertEquals(oldDocSize - 5, data.size(0, Data.DOC)); assertEquals(oldRootSize - 5, data.size(1, Data.ELEM)); assertEquals(oldParentSize - 5, data.size(4, Data.ELEM)); assertEquals(2, data.parent(3, Data.ELEM)); reload(); assertEquals(size - 5, data.meta.size); assertArraysEquals(T_B, data.name(6, Data.ELEM)); assertEquals(oldDocSize - 5, data.size(0, Data.DOC)); assertEquals(oldRootSize - 5, data.size(1, Data.ELEM)); assertEquals(oldParentSize - 5, data.size(4, Data.ELEM)); assertEquals(2, data.parent(3, Data.ELEM)); } /** * Tests deletion of an attribute. * @throws IOException I/O exception */ @Test public void deleteAttribute() throws IOException { final Data data = context.data(); final int oldRootSize = data.size(1, Data.ELEM); final int oldParentSize = data.size(6, Data.ELEM); data.startUpdate(context.options); data.delete(7); data.finishUpdate(context.options); assertEquals(size - 1, data.meta.size); assertArraysEquals(T_CONTEXTNODE, data.name(6, Data.ELEM)); assertArraysEquals(T_ID, data.name(7, Data.ATTR)); assertEquals(oldRootSize - 1, data.size(1, Data.ELEM)); assertEquals(oldParentSize - 1, data.size(6, Data.ELEM)); assertEquals(6, data.parent(7, Data.ATTR)); assertEquals(4, data.size(6, Data.ELEM)); reload(); assertEquals(size - 1, data.meta.size); assertArraysEquals(T_CONTEXTNODE, data.name(6, Data.ELEM)); assertArraysEquals(T_ID, data.name(7, Data.ATTR)); assertEquals(oldRootSize - 1, data.size(1, Data.ELEM)); assertEquals(oldParentSize - 1, data.size(6, Data.ELEM)); assertEquals(6, data.parent(7, Data.ATTR)); assertEquals(4, data.size(6, Data.ELEM)); } /** * For the sake of completeness. * Tests deletion of a text-node. * @throws IOException I/O exception */ @Test public void deleteText() throws IOException { final Data data = context.data(); data.startUpdate(context.options); data.delete(10); data.finishUpdate(context.options); assertEquals(size - 1, data.meta.size); reload(); assertEquals(size - 1, data.meta.size); } }