package org.basex;
import static org.basex.util.Token.*;
import static org.junit.Assert.*;
import java.io.*;
import org.basex.core.*;
import org.basex.util.*;
import org.junit.*;
/**
* Tests the command-line arguments of the starter class.
*
* @author BaseX Team 2005-17, BSD License
* @author Christian Gruen
*/
public abstract class BaseXTest extends MainTest {
/**
* Deletes the test files.
* @throws IOException I/O exception
*/
@After
public void clean() throws IOException {
assertTrue("Could not delete input file.", !INPUT.exists() || INPUT.delete());
run("-cdrop db " + NAME);
}
/**
* Tests a query file.
* @throws IOException I/O exception
*/
@Test
public void queryFile() throws IOException {
final String query = "1";
INPUT.write(token(query));
equals(query, INPUT.path());
}
/**
* Test variable bindings.
* @throws IOException I/O exception
*/
@Test
public void bind() throws IOException {
equals("1", "-ba=1", "-qdeclare variable $a external; $a");
equals("2", "-ba=1", "-bb=1",
"-qdeclare variable $a external; declare variable $b external; $a+$b");
equals("3", "-ba=1", "-bb=2",
"-qdeclare variable $a external; declare variable $b external; $a+$b");
INPUT.write(token("declare variable $a external; $a"));
equals("4", "-ba=4", INPUT.toString());
equals("5,6;7'", "-ba=5,6;7'", "-qdeclare variable $a external; $a");
// bind variables with namespaces
equals("8", "-b{}a=8", "-qdeclare variable $a external; $a");
equals("9", "-b{URI}a=9", "-qdeclare namespace a='URI';" +
"declare variable $a:a external; $a:a");
// check if parameters are evaluated in given order
equals("12", "-ba=1", "-qdeclare variable $a external; $a",
"-ba=2", "-qdeclare variable $a external; $a");
}
/**
* Test variable bindings.
* @throws IOException I/O exception
*/
@Test(expected = BaseXException.class)
public void bindErr() throws IOException {
run("-ba=A", "-qdeclare variable $a as xs:integer external; $a");
}
/**
* Test variable bindings with namespaces.
* @throws IOException I/O exception
*/
@Test(expected = BaseXException.class)
public void bindNSErr() throws IOException {
run("X'\"", "-b{URI}ln=X'\"", INPUT.toString());
}
/**
* Test command execution.
* @throws IOException I/O exception
*/
@Test
public void input() throws IOException {
final String in = "<X/>";
INPUT.write(token(in));
equals(in, "-i" + INPUT, "-q.");
equals(in, "-i" + in, "-q.");
}
/**
* Test command execution.
* @throws IOException I/O exception
*/
@Test
public void command() throws IOException {
equals("1", "-cxquery 1");
equals("\t", "-cxquery ' '");
}
/**
* Command error.
* @throws IOException I/O exception
*/
@Test(expected = BaseXException.class)
public void commandErr() throws IOException {
run("-1");
}
/**
* Tests command scripts.
* @throws IOException I/O exception
*/
@Test
public void commands() throws IOException {
INPUT.write(token("xquery 1" + Prop.NL + "xquery 2" + Prop.NL));
equals("12", "-c" + INPUT.path());
}
/**
* Test query evaluation.
* @throws IOException I/O exception
*/
@Test
public void query() throws IOException {
equals("3", "-q1+2");
}
/**
* Query error.
* @throws IOException I/O exception
*/
@Test(expected = BaseXException.class)
public void queryErr() throws IOException {
run("-q1+");
}
/**
* Test different number of runs.
* @throws IOException I/O exception
*/
@Test
public void runs() throws IOException {
equals("1", "-r2", "-q1");
}
/**
* Test different number of runs.
* @throws IOException I/O exception
*/
@Test(expected = BaseXException.class)
public void runErr() throws IOException {
run("-rx", "-q2");
}
/**
* Test serialization parameters.
* @throws IOException I/O exception
*/
@Test
public void serial() throws IOException {
equals("1", "-smethod=text", "-q<a>1</a>");
// check if parameters are evaluated in given order
equals("1<x>1</x>", "-smethod=text", "-q<x>1</x>", "-smethod=xml", "-q<x>1</x>");
}
/**
* Test verbose mode.
* @throws IOException I/O exception
*/
@Test
public void verbose() throws IOException {
contains(Text.QUERY_EXECUTED_X_X.replaceAll(" *%.*", ""), "-v", "-q1");
contains(Text.TOTAL_TIME_CC, "-V", "-q1");
}
/**
* Turn off whitespace chopping.
* @throws IOException I/O exception
*/
@Test
public void chop() throws IOException {
final String in = "<a> CHOP </a>";
INPUT.write(token(in));
equals(in, "-w", "-i" + INPUT, "-q.");
}
/**
* Turn off serialization.
* @throws IOException I/O exception
*/
@Test
public void noSerialization() throws IOException {
equals("", "-z", "-q1");
}
}