package org.basex.http.restxq;
import static org.junit.Assert.*;
import java.io.*;
import org.basex.core.*;
import org.basex.http.*;
import org.basex.io.*;
import org.basex.util.*;
import org.basex.util.http.*;
import org.junit.*;
/**
* This class contains RESTXQ tests.
*
* @author BaseX Team 2005-17, BSD License
* @author Christian Gruen
*/
public abstract class RestXqTest extends HTTPTest {
/** Query header. */
private static final String HEADER =
"module namespace m = 'http://basex.org/modules/restxq/test';" + Prop.NL +
"declare namespace R = 'http://exquery.org/ns/restxq';" + Prop.NL;
/** Counter. */
private static int count;
/**
* Start server.
* @throws Exception exception
*/
@BeforeClass
public static void start() throws Exception {
init(HTTP_ROOT, true);
}
/**
* Executes the specified GET request and tests the result.
* @param function function to test
* @param query request
* @param exp expected result
* @throws IOException I/O exception
*/
protected static void get(final String function, final String query, final String exp)
throws IOException {
install(function);
assertEquals(exp, get(query));
}
/**
* Executes the specified GET request and tests for an error.
* @param function function to test
* @param query request
* @throws IOException I/O exception
*/
protected static void getE(final String function, final String query) throws IOException {
install(function);
try {
get(query);
fail("Error expected: " + query);
} catch(final BaseXException ignored) {
}
}
/**
* Executes the specified POST request and tests the result.
* @param function function to test
* @param query request
* @param request request
* @param type media type
* @param exp expected result
* @throws IOException I/O exception
*/
protected static void post(final String function, final String query, final String request,
final MediaType type, final String exp) throws IOException {
install(function);
assertEquals(exp, post(query, request, type));
}
/**
* Installs a new module and removes all others.
* @param function function to be tested
* @throws IOException I/O exception
*/
protected static void install(final String function) throws IOException {
// delete old module
final String path = context.soptions.get(StaticOptions.WEBPATH);
for(final IOFile f : new IOFile(path).children()) assertTrue(f.delete());
// create new module
module().write(new TokenBuilder(HEADER).add(function).finish());
// invalidate module cache
RestXqModules.get(context).init();
}
/**
* Returns the XQuery test module.
* @return test module
*/
private static IOFile module() {
final String path = context.soptions.get(StaticOptions.WEBPATH);
return new IOFile(path, NAME + count++ + IO.XQMSUFFIX);
}
}