package org.basex.build;
import static org.junit.Assert.*;
import org.basex.*;
import org.basex.core.cmd.*;
import org.basex.io.*;
import org.basex.util.*;
import org.junit.*;
import org.junit.Test;
/**
* Tests for creating databases and adding documents.
*
* @author BaseX Team 2005-17, BSD License
* @author Christian Gruen
*/
public final class CreateTest extends SandboxTest {
/** Test document name. */
private static final String DOCNAME = "t.xml";
/** Target. */
private static final String TARGET = "target/";
/** Path to test file. */
private static final String PATH = "src/test/resources/input.xml";
/** Test folder. */
private static final String FOLDER = "src/test/resources/dir";
/** Test XML fragment. */
private static final String FRAG = "<xml/>";
/** First document in test folder. */
private static final String FOLDERFILE;
// finds the first document in the xml folder
static {
String file = "";
for(final IOFile c : new IOFile(FOLDER).children()) {
file = c.name();
if(file.endsWith(IO.XMLSUFFIX)) break;
}
FOLDERFILE = file;
}
/** Test inputs (path, folder, fragment). */
private static final String[] INPUTS = { PATH, FOLDER, FRAG };
/** Names of test inputs (path, folder, fragment). */
private static final String[] NAMES = {
PATH.replaceAll(".*/", ""), FOLDERFILE, NAME + IO.XMLSUFFIX
};
/**
* Drops the initial collection.
*/
@After
public void tearDown() {
execute(new DropDB(NAME));
}
/**
* CREATE DB {DB}.
*/
@Test
public void createDB() {
execute(new CreateDB(NAME));
// check if database name equals argument of create command
assertEquals(db(), NAME);
}
/**
* CREATE DB {DB} {INPUT[]}.
*/
@Test
public void createDBWithInput() {
final int il = INPUTS.length;
for(int i = 0; i < il; i++) {
execute(new CreateDB(NAME, INPUTS[i]));
// check name of database
assertEquals(NAME, db());
// check name of document
assertEquals(NAMES[i], docName());
}
}
/**
* CREATE DB {DB}; ADD {INPUT[]}.
*/
@Test
public void createDBandAdd() {
// add file and folder, skip fragment
final int il = INPUTS.length;
for(int i = 0; i < il - 1; i++) {
execute(new CreateDB(NAME));
execute(new Add("", INPUTS[i]));
assertEquals(NAMES[i], docName());
}
}
/**
* CREATE DB {DB}; ADD TO {DOCNAME} {INPUT[]}.
*/
@Test
public void createDBandAddToName() {
// add file and fragment, skip folder
final int il = INPUTS.length;
for(int i = 0; i < il; i += 2) {
execute(new CreateDB(NAME));
execute(new Add(DOCNAME, INPUTS[i]));
assertEquals(DOCNAME, docName());
}
}
/**
* CREATE DB {DB}; ADD TO {TARGET} {INPUT[]}.
*/
@Test
public void createDBandAddToTarget() {
// add file and folder, skip fragment
final int il = INPUTS.length;
for(int i = 0; i < il - 1; i++) {
execute(new CreateDB(NAME));
execute(new Add(TARGET, INPUTS[i]));
assertEquals(TARGET + NAMES[i], docName());
}
}
/**
* CREATE DB {DB}; ADD TO {TARGET/DOCNAME} {INPUT[]}.
*/
@Test
public void createDBandAddToTargetName() {
// add file and fragment, skip folder
final int il = INPUTS.length;
for(int i = 0; i < il; i += 2) {
execute(new CreateDB(NAME));
execute(new Add(TARGET + DOCNAME, INPUTS[i]));
assertEquals(TARGET + DOCNAME, docName());
}
}
/**
* Returns the name of the database.
* @return database name
*/
private static String db() {
return context.data().meta.name;
}
/**
* Returns the name of the first document in the database.
* @return first document name
*/
private static String docName() {
return Token.string(context.data().text(context.current().pre(0), true));
}
}