package org.basex.build;
import static org.junit.Assert.*;
import org.basex.*;
import org.basex.core.*;
import org.basex.core.MainOptions.MainParser;
import org.basex.core.cmd.*;
import org.basex.io.*;
import org.basex.util.*;
import org.junit.*;
import org.junit.Test;
/**
* Tests queries with path in it on collections.
*
* @author BaseX Team 2005-17, BSD License
* @author Andreas Weiler
*/
public final class PathTest extends SandboxTest {
/** Test database name. */
private static final String INPUT = Util.className(PathTest.class);
/** Test database name. */
private static final String WEEK1 = Util.className(PathTest.class) + '2';
/** Test database name. */
private static final String WEEK2 = Util.className(PathTest.class) + '3';
/** Test file. */
private static final String INPUTF = "src/test/resources/input.xml";
/** Test file. */
private static final String WEEK = "src/test/resources/week.zip";
/**
* Creates initial databases.
*/
@BeforeClass
public static void before() {
execute(new CreateDB(INPUT));
execute(new Add("input", INPUTF));
execute(new Add("input2", INPUTF));
execute(new CreateDB(WEEK1, WEEK));
execute(new CreateDB(WEEK2, WEEK));
execute(new Close());
}
/**
* Drops the initial databases.
*/
@AfterClass
public static void after() {
execute(new DropDB(INPUT));
execute(new DropDB(WEEK1));
execute(new DropDB(WEEK2));
}
/**
* Checks the number of documents under the specified path.
*/
@Test
public void documentTestInput() {
assertEquals("1", query("count(collection('" + INPUT + "/input'))"));
}
/**
* Checks the number of documents under the specified path.
*/
@Test
public void documentTestWeek() {
assertEquals("3", query("count(collection('" + WEEK1 + "/week/monday'))"));
}
/**
* Checks the results of the query with index access.
*/
@Test
public void withIndexTest() {
weekTest();
weekTest2();
}
/**
* #905: Ensure that parser options will not affect doc() and collection().
* May be moved to a separate test class in future.
*/
@Test
public void docParsing() {
final IOFile path = new IOFile(sandbox(), "doc.xml");
write(path, "<a/>");
set(MainOptions.PARSER, MainParser.JSON);
assertEquals("<a/>", query("doc('" + path + "')"));
}
/**
* Checks the results of the query without index access.
*/
@Test
public void withoutIndexTest() {
execute(new Open(WEEK1));
execute(new DropIndex("text"));
execute(new Open(WEEK2));
execute(new DropIndex("text"));
weekTest();
weekTest2();
}
/** Checks the results of the queries with the db week.
*/
private static void weekTest() {
assertEquals("3", query("count(collection('" + WEEK1 +
"/week/monday')/root/monday/text[text() = 'text'])"));
// cross-check
assertEquals("4", query("count(collection('" + WEEK1 +
"/week')/root/monday/text[text() = 'text'])"));
}
/** Checks the results of the queries with the db week.
*/
private static void weekTest2() {
assertEquals("3,1", query("count(collection('" + WEEK1 +
"/week/monday')/root/monday/text[text() = 'text']) || ',' ||" +
" count(collection('" + WEEK2 +
"/week/tuesday')/root/monday/text[text() = 'text']) "));
}
}