package org.exquery.ns;
import static org.junit.Assert.*;
import java.net.*;
import org.basex.http.*;
import org.basex.util.*;
import org.junit.*;
/**
* This class tests the Request Module.
*
* @author BaseX Team 2005-17, BSD License
* @author Christian Gruen
*/
public final class RequestTest extends HTTPTest {
/**
* Start server.
* @throws Exception exception
*/
@BeforeClass
public static void start() throws Exception {
init(REST_ROOT, true);
}
/**
* Function test.
* @throws Exception exception
*/
@Test
public void method() throws Exception {
assertEquals("GET", get("?query=" + request("R:method()")));
}
/**
* Function test.
* @throws Exception exception
*/
@Test
public void scheme() throws Exception {
assertEquals("http", get("?query=" + request("R:scheme()")));
}
/**
* Function test.
* @throws Exception exception
*/
@Test
public void port() throws Exception {
assertEquals(String.valueOf(HTTP_PORT), get("?query=" + request("R:port()")));
}
/**
* Function test.
* @throws Exception exception
*/
@Test
public void path() throws Exception {
put(NAME, null);
assertEquals("/rest/", get("?query=" + request("R:path()")));
assertEquals("/rest/" + NAME, get(NAME + "?query=" + request("R:path()")));
delete(NAME);
}
/**
* Function test.
* @throws Exception exception
*/
@Test
public void query() throws Exception {
assertEquals("true", get("?query=" + request("starts-with(R:query(), 'query')")));
}
/**
* Function test.
* @throws Exception exception
*/
@Test
public void uri() throws Exception {
assertEquals("true", get("?query=" + request("starts-with(R:uri(), 'http')")));
}
/**
* Function test.
* @throws Exception exception
*/
@Test
public void contextPath() throws Exception {
assertEquals("", get("?query=" + request("R:context-path()")));
}
/**
* Function test.
* @throws Exception exception
*/
@Test
public void parameterNames() throws Exception {
final String query = "count(R:parameter-names())";
assertEquals("1", get("?query=" + request(query)));
assertEquals("2", get("?query=" + request(query) + "&a=b"));
assertEquals("2", get("?query=" + request(query) + "&a=b&a=b"));
}
/**
* Function test.
* @throws Exception exception
*/
@Test
public void parameter() throws Exception {
assertEquals("b", get("?query=" + request("R:parameter('a')") + "&a=b"));
assertEquals("b,c", get("?query=" + request("string-join(R:parameter('a'),',')") + "&a=b&a=c"));
assertEquals("b", get("?query=" + request("R:parameter('a','c')") + "&a=b"));
assertEquals("c", get("?query=" + request("R:parameter('x','c')") + "&a=b"));
}
/**
* Function test.
* @throws Exception exception
*/
@Test
public void headerNames() throws Exception {
final String result = get("?query=" + request("string-join(R:header-names(), ',')"));
assertEquals("Accept,Connection,Host,User-Agent",
query("``[" + result + "]`` => tokenize(',') => sort() => string-join(',')"));
}
/**
* Function test.
* @throws Exception exception
*/
@Test
public void header() throws Exception {
assertEquals("localhost:" + HTTP_PORT, get("?query=" + request("R:header('Host')")));
assertEquals("def", get("?query=" + request("R:header('ABC', 'def')")));
}
/**
* Function test.
* @throws Exception exception
*/
@Test
public void cookieNames() throws Exception {
assertEquals("0", get("?query=" + request("count(R:cookie-names())")));
}
/**
* Function test.
* @throws Exception exception
*/
@Test
public void cookie() throws Exception {
assertEquals("0", get("?query=" + request("count(R:cookie('x'))")));
}
// PRIVATE METHODS ====================================================================
/**
* Returns an encoded version of the query, including a Request module import.
* @param query query string
* @return prepared query
* @throws Exception exception
*/
private static String request(final String query) throws Exception {
return URLEncoder.encode(
"import module namespace R='http://exquery.org/ns/request';" + query, Strings.UTF8);
}
}