package org.basex.data;
import static org.basex.util.Token.*;
import static org.junit.Assert.*;
import java.util.*;
import java.util.List;
import org.basex.*;
import org.basex.core.*;
import org.basex.core.cmd.*;
import org.junit.*;
import org.junit.Test;
import org.junit.runner.*;
import org.junit.runners.*;
import org.junit.runners.Parameterized.*;
/**
* This class tests the update features of the {@link Data} class.
*
* @author BaseX Team 2005-17, BSD License
* @author Tim Petrowsky
*/
@RunWith(Parameterized.class)
public abstract class DataUpdateTest extends SandboxTest {
/** Test file we do updates with. */
private static final String TESTFILE = "src/test/resources/test.xml";
/** JUnit tag. */
static final byte[] T_JUNIT = token("junit");
/** JUnit tag. */
static final byte[] T_FOO = token("foo");
/** JUnit tag. */
static final byte[] T_NAME = token("name");
/** JUnit tag. */
static final byte[] T_PARENTNODE = token("parentnode");
/** JUnit tag. */
static final byte[] T_CONTEXTNODE = token("contextnode");
/** JUnit tag. */
static final byte[] T_ID = token("id");
/** JUnit tag. */
static final byte[] T_B = token("b");
/** Test file size in nodes. */
int size;
/** Main memory flag. */
@Parameter
public Object mainmem;
/**
* Test parameters.
* @return parameters
*/
@Parameters
public static List<Object[]> params() {
return Arrays.asList(new Object[][] { { false }, { true } });
}
/**
* Initializes the test class.
*/
@BeforeClass
public static void setUpBeforeClass() {
set(MainOptions.TEXTINDEX, false);
set(MainOptions.ATTRINDEX, false);
}
/**
* Creates the database.
*/
@Before
public final void setUp() {
set(MainOptions.MAINMEM, mainmem);
execute(new CreateDB(NAME, TESTFILE));
size = context.data().meta.size;
}
/**
* Deletes the test database.
*/
@After
public final void tearDown() {
if((Boolean) mainmem) return;
execute(new Close());
execute(new DropDB(NAME));
}
/**
* Reloads the database.
*/
void reload() {
if((Boolean) mainmem) return;
execute(new Close());
execute(new Open(NAME));
}
/**
* Tests byte-arrays for equality.
* @param exp expected value
* @param act actual value
*/
static void assertArraysEquals(final byte[] exp, final byte[] act) {
final int el = exp.length;
assertEquals("array lengths don't equal", el, act.length);
for(int e = 0; e < el; e++) assertEquals(exp[e], act[e]);
}
/**
* Tests for correct data size.
*/
@Test
public final void size() {
assertEquals("Unexpected size!", size, context.data().meta.size);
reload();
assertEquals("Unexpected size!", size, context.data().meta.size);
}
}