package org.basex.data; import static org.junit.Assert.*; import java.io.*; import org.basex.*; import org.basex.io.*; import org.basex.query.value.node.*; import org.basex.util.*; import org.junit.*; /** * Test index updates when using memory storage ({@link MemData}). * * @author BaseX Team 2005-17, BSD License * @author Dimitar Popov */ public class MemDataTest extends SandboxTest { /** XML document. */ static final String XMLSTR = "<a><b>test</b><c/><f>test1</f><f>test3</f></a>"; /** XML document. */ private static final byte[] XML = Token.token(XMLSTR); /** Tested {@link MemData} instance. */ private Data data; /** * Set up method; executed before each test. * @throws IOException should never be thrown */ @Before public void setUp() throws IOException { data = new DBNode(new IOContent(XML)).data(); context.openDB(data); } /** Clean up method; executed after each test. */ @After public void end() { context.closeDB(); data = null; } /** * Replace value update test. */ @Test public void replaceValue() { query("replace value of node /a/b with 'test2'"); final String o = query("/a/b[text() = 'test']"); assertTrue("Old node found", o.isEmpty()); final String n = query("/a/b[text() = 'test2']"); assertFalse("New node not found", n.isEmpty()); } /** * Replace node update test. */ @Test public void replaceNode() { query("replace node /a/b with <d f='test2'/>"); final String o = query("/a/b"); assertTrue("Old node found", o.isEmpty()); final String n = query("//d[@f = 'test2']"); assertFalse("New node not found", n.isEmpty()); } /** * Insert node update test. */ @Test public void insertNode() { query("insert node <d>test2</d> as first into /a"); final String r = query("//d[text() = 'test2']"); assertFalse("Node not found", r.isEmpty()); query("insert node <d>test2</d> as first into /a"); final String c = query("count(//d[text() = 'test2'])"); assertEquals("Second node not found", 2, Integer.parseInt(c)); } /** * Insert node update test. */ @Test public void insertDuplicateNode() { query("insert node <d>test</d> as first into /a"); final String r = query("//d[text() = 'test']"); assertFalse("Node not found", r.isEmpty()); final String c = query("count(//*[text() = 'test'])"); assertEquals("Second node not found", 2, Integer.parseInt(c)); } /** * Delete node update test. */ @Test public void deleteNode() { query("delete node //b"); final String r = query("//*[text() = 'test']"); assertTrue("Node not deleted", r.isEmpty()); } /** * Try to find non-existing node. */ @Test public void findNonexistingNode() { final String r = query("//*[text() = 'test0']"); assertTrue("Found non-existing node", r.isEmpty()); } }