package org.basex.http.restxq;
import org.junit.*;
/**
* This test contains RESTXQ parameters.
*
* @author BaseX Team 2005-17, BSD License
* @author Christian Gruen
*/
public final class RestXqParamTest extends RestXqTest {
/**
* Query parameters.
* @throws Exception exception
*/
@Test
public void queryParams() throws Exception {
// correct syntax
get("declare %R:path('') %R:query-param('a','{$v}') " +
"function m:f($v) {$v};", "?a=1", "1");
get("declare %R:path('') %R:query-param('a','{$a}') " +
"function m:f($a) {$a*2};", "?a=1", "2");
get("declare %R:path('') %R:query-param('a','{$a}') " +
"function m:f($a as xs:integer*) {count($a)};", "?a=4&a=8", "2");
get("declare %R:path('') %R:query-param('a','{$v}',3) " +
"function m:f($v) {$v};", "", "3");
get("declare %R:path('') %R:query-param('a','{$v}',4,8) " +
"function m:f($v) {count($v)};", "", "2");
get("declare %R:path('') %R:query-param('a','{$a}') %R:query-param('b','{$b}') " +
"function m:f($a,$b) {$a*$b};", "?a=2&b=3", "6");
// missing assignment: default value is empty sequence
get("declare %R:path('') %R:query-param('a','{$v}') " +
"function m:f($v) {count($v)};", "", "0");
// missing variable declaration
getE("declare %R:path('') %R:query-param('a','{$a}') function m:f() {1};", "?a=2");
// variable is specified more than once
getE("declare %R:path('') %R:query-param('a','{$a}') %R:query-param('a','{$a}') " +
"function m:f($a) {$a};", "?a=2");
// parameter is no string
getE("declare %R:path('') %R:query-param(1,'{$a}') function m:f($a) {$a};", "?a=2");
// invalid path template
getE("declare %R:path('') %R:query-param('a','$a') function m:f($a) {$a};", "?a=2");
// invalid type cardinality
getE("declare %R:path('') %R:query-param('a','{$a}') " +
"function m:f($a as item()) {()};", "?a=4&a=8");
}
}