package org.jboss.resteasy.test.util;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.jboss.resteasy.specimpl.ResteasyUriBuilder;
import org.jboss.resteasy.test.util.resource.UriBuilderResource;
import org.junit.Assert;
import org.junit.Test;
import javax.ws.rs.core.UriBuilder;
import java.lang.reflect.Method;
import java.net.URI;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @tpSubChapter Util tests
* @tpChapter Unit tests
* @tpTestCaseDetails Test for UriBuilder class.
* @tpSince RESTEasy 3.0.16
*/
public class UriBuilderTest {
private static final String ERROR_MSG = "UriBuilder works incorrectly";
protected static final Logger logger = LogManager.getLogger(UriBuilderTest.class.getName());
private static final Pattern uriPattern = Pattern.compile("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?");
protected static final String URL = "http://cts.tck:888/resource";
private static final String ENCODED = "%42%5A%61%7a%2F%%21";
private static final String ENCODED_EXPECTED_PATH = "path-rootless%2Ftest2/x%25yz/%2Fpath-absolute%2F%2525test1/fred@example.com/x%25yz";
/**
* @tpTestDetails Test for all important method and use cases of UriBuilder class.
* @tpSince RESTEasy 3.0.16
*/
@Test
public void uriBuilderTest() throws Exception {
// testExceptions
{
try {
UriBuilder.fromUri(":cts:8080//tck:90090//jaxrs ");
Assert.fail(ERROR_MSG);
} catch (IllegalArgumentException e) {
// ok
}
// testUrn
UriBuilder.fromUri("urn:isbn:096139210x");
}
// testParse
{
String[] uris = {
":cts:8080//tck:90090//jaxrs "
};
for (String uri : uris) {
printParse(uri);
}
}
// testNullReplaceQuery
{
UriBuilder builder = UriBuilder.fromUri("/foo?a=b&bar=foo");
builder.replaceQueryParam("bar", (Object[]) null);
URI uri = builder.build();
logger.info(uri.toString());
}
// testNullHost
{
UriBuilder builder = UriBuilder.fromUri("http://example.com/foo/bar");
builder.scheme(null);
builder.host(null);
URI uri = builder.build();
logger.info(uri.toString());
Assert.assertEquals(ERROR_MSG, uri.toString(), "/foo/bar");
}
// testTemplate
{
UriBuilder builder = UriBuilder.fromUri("http://{host}/x/y/{path}?{q}={qval}");
String template = builder.toTemplate();
Assert.assertEquals(ERROR_MSG, template, "http://{host}/x/y/{path}?{q}={qval}");
builder = builder.resolveTemplate("host", "localhost");
template = builder.toTemplate();
Assert.assertEquals(ERROR_MSG, template, "http://localhost/x/y/{path}?{q}={qval}");
builder = builder.resolveTemplate("q", "name");
template = builder.toTemplate();
Assert.assertEquals(ERROR_MSG, template, "http://localhost/x/y/{path}?name={qval}");
Map<String, Object> values = new HashMap<>();
values.put("path", "z");
values.put("qval", 42);
builder = builder.resolveTemplates(values);
template = builder.toTemplate();
Assert.assertEquals(ERROR_MSG, template, "http://localhost/x/y/z?name=42");
}
// test587
{
logger.info(UriBuilder.fromPath("/{p}").build("$a"));
}
// test443
{
// test for RESTEASY-443
ResteasyUriBuilder.fromUri("?param=").replaceQueryParam("otherParam", "otherValue");
}
// testEmoji
{
UriBuilder builder = UriBuilder.fromPath("/my/url");
builder.queryParam("msg", "emoji stuff %EE%81%96%EE%90%8F");
URI uri = builder.build();
logger.info(uri);
Assert.assertEquals(ERROR_MSG, "/my/url?msg=emoji+stuff+%EE%81%96%EE%90%8F", uri.toString());
}
// testQuery
{
UriBuilder builder = UriBuilder.fromPath("/foo");
builder.queryParam("mama", " ");
Assert.assertEquals(ERROR_MSG, builder.build().toString(), "/foo?mama=+++");
}
// testQuery2
{
UriBuilder builder = UriBuilder.fromUri("http://localhost/test");
builder.replaceQuery("a={b}");
URI uri = builder.build("=");
Assert.assertEquals(ERROR_MSG, uri.toString(), "http://localhost/test?a=%3D");
}
// testReplaceScheme
{
URI bu = UriBuilder.fromUri("http://localhost:8080/a/b/c").
scheme("https").build();
Assert.assertEquals(ERROR_MSG, URI.create("https://localhost:8080/a/b/c"), bu);
}
// testReplaceUserInfo
{
URI bu = UriBuilder.fromUri("http://bob@localhost:8080/a/b/c").
userInfo("sue").build();
Assert.assertEquals(ERROR_MSG, URI.create("http://sue@localhost:8080/a/b/c"), bu);
}
// testReplaceHost
{
URI bu = UriBuilder.fromUri("http://localhost:8080/a/b/c").
host("a.com").build();
Assert.assertEquals(ERROR_MSG, URI.create("http://a.com:8080/a/b/c"), bu);
}
// testReplacePort
{
URI bu = UriBuilder.fromUri("http://localhost:8080/a/b/c").
port(9090).build();
Assert.assertEquals(ERROR_MSG, URI.create("http://localhost:9090/a/b/c"), bu);
bu = UriBuilder.fromUri("http://localhost:8080/a/b/c").
port(-1).build();
Assert.assertEquals(ERROR_MSG, URI.create("http://localhost/a/b/c"), bu);
}
// testReplacePath
{
URI bu = UriBuilder.fromUri("http://localhost:8080/a/b/c").
replacePath("/x/y/z").build();
Assert.assertEquals(ERROR_MSG, URI.create("http://localhost:8080/x/y/z"), bu);
}
// testReplaceMatrixParam
{
URI bu = UriBuilder.fromUri("http://localhost:8080/a/b/c;a=x;b=y").
replaceMatrix("x=a;y=b").build();
Assert.assertEquals(ERROR_MSG, URI.create("http://localhost:8080/a/b/c;x=a;y=b"), bu);
UriBuilder builder = UriBuilder.fromUri("http://localhost:8080/a").path("/{b:A{0:10}}/c;a=x;b=y");
builder.replaceMatrixParam("a", "1", "2");
bu = builder.build("b");
Assert.assertEquals(ERROR_MSG, URI.create("http://localhost:8080/a/b/c;b=y;a=1;a=2"), bu);
// test removal
bu = UriBuilder.fromUri("http://localhost:8080/a/b/c;a=x;b=y").
replaceMatrixParam("a", (Object[]) null).build();
Assert.assertEquals(ERROR_MSG, URI.create("http://localhost:8080/a/b/c;b=y"), bu);
}
// testReplaceQueryParams
{
URI bu = UriBuilder.fromUri("http://localhost:8080/a/b/c?a=x&b=y").
replaceQuery("x=a&y=b").build();
Assert.assertEquals(ERROR_MSG, URI.create("http://localhost:8080/a/b/c?x=a&y=b"), bu);
UriBuilder builder = UriBuilder.fromUri("http://localhost:8080/a/b/c?a=x&b=y");
builder.replaceQueryParam("a", "1", "2");
bu = builder.build();
Assert.assertEquals(ERROR_MSG, URI.create("http://localhost:8080/a/b/c?b=y&a=1&a=2"), bu);
}
// testReplaceFragment
{
URI bu = UriBuilder.fromUri("http://localhost:8080/a/b/c?a=x&b=y#frag").
fragment("ment").build();
Assert.assertEquals(ERROR_MSG, URI.create("http://localhost:8080/a/b/c?a=x&b=y#ment"), bu);
}
// testReplaceUri
{
URI u = URI.create("http://bob@localhost:8080/a/b/c?a=x&b=y#frag");
UriBuilder uriBuilder = UriBuilder.fromUri(u);
URI bu = uriBuilder.
uri(URI.create("https://bob@localhost:8080")).build();
Assert.assertEquals(ERROR_MSG, URI.create("https://bob@localhost:8080/a/b/c?a=x&b=y#frag"), bu);
bu = UriBuilder.fromUri(u).
uri(URI.create("https://sue@localhost:8080")).build();
Assert.assertEquals(ERROR_MSG, URI.create("https://sue@localhost:8080/a/b/c?a=x&b=y#frag"), bu);
bu = UriBuilder.fromUri(u).
uri(URI.create("https://sue@localhost:9090")).build();
Assert.assertEquals(ERROR_MSG, URI.create("https://sue@localhost:9090/a/b/c?a=x&b=y#frag"), bu);
bu = UriBuilder.fromUri(u).
uri(URI.create("/x/y/z")).build();
Assert.assertEquals(ERROR_MSG, URI.create("http://bob@localhost:8080/x/y/z?a=x&b=y#frag"), bu);
bu = UriBuilder.fromUri(u).
uri(URI.create("?x=a&b=y")).build();
Assert.assertEquals(ERROR_MSG, URI.create("http://bob@localhost:8080/a/b/c?x=a&b=y#frag"), bu);
bu = UriBuilder.fromUri(u).
uri(URI.create("#ment")).build();
Assert.assertEquals(ERROR_MSG, URI.create("http://bob@localhost:8080/a/b/c?a=x&b=y#ment"), bu);
}
// testSchemeSpecificPart
{
URI u = URI.create("http://bob@localhost:8080/a/b/c?a=x&b=y#frag");
URI bu = UriBuilder.fromUri(u).
schemeSpecificPart("//sue@remotehost:9090/x/y/z?x=a&y=b").build();
Assert.assertEquals(ERROR_MSG, URI.create("http://sue@remotehost:9090/x/y/z?x=a&y=b#frag"), bu);
}
// testAppendPath
{
URI bu = UriBuilder.fromUri("http://localhost:8080/a/b/c/").
path("/").build();
Assert.assertEquals(ERROR_MSG, URI.create("http://localhost:8080/a/b/c/"), bu);
bu = UriBuilder.fromUri("http://localhost:8080/a/b/c/").
path("/x/y/z").build();
Assert.assertEquals(ERROR_MSG, URI.create("http://localhost:8080/a/b/c/x/y/z"), bu);
bu = UriBuilder.fromUri("http://localhost:8080/a/b/c").
path("/x/y/z").build();
Assert.assertEquals(ERROR_MSG, URI.create("http://localhost:8080/a/b/c/x/y/z"), bu);
bu = UriBuilder.fromUri("http://localhost:8080/a/b/c").
path("x/y/z").build();
Assert.assertEquals(ERROR_MSG, URI.create("http://localhost:8080/a/b/c/x/y/z"), bu);
bu = UriBuilder.fromUri("http://localhost:8080/a/b/c").
path("/").build();
Assert.assertEquals(ERROR_MSG, URI.create("http://localhost:8080/a/b/c/"), bu);
bu = UriBuilder.fromUri("http://localhost:8080/a/b/c").
path("").build();
Assert.assertEquals(ERROR_MSG, URI.create("http://localhost:8080/a/b/c"), bu);
bu = UriBuilder.fromUri("http://localhost:8080/a%20/b%20/c%20").
path("/x /y /z ").build();
Assert.assertEquals(ERROR_MSG, URI.create("http://localhost:8080/a%20/b%20/c%20/x%20/y%20/z%20"), bu);
}
// testAppendQueryParams
{
URI bu = UriBuilder.fromUri("http://localhost:8080/a/b/c?a=x&b=y").
queryParam("c", "z").build();
Assert.assertEquals(ERROR_MSG, URI.create("http://localhost:8080/a/b/c?a=x&b=y&c=z"), bu);
}
// testQueryParamsEncoding
{
URI bu = UriBuilder.fromUri("http://localhost:8080/a/b/c?a=x&b=y").
queryParam("c", "z=z/z").build();
Assert.assertEquals(ERROR_MSG, URI.create("http://localhost:8080/a/b/c?a=x&b=y&c=z%3Dz%2Fz"), bu);
}
// testAppendMatrixParams
{
URI bu = UriBuilder.fromUri("http://localhost:8080/a/b/c;a=x;b=y").
matrixParam("c", "z").build();
Assert.assertEquals(ERROR_MSG, URI.create("http://localhost:8080/a/b/c;a=x;b=y;c=z"), bu);
}
// testResourceAppendPath
{
URI ub = UriBuilder.fromUri("http://localhost:8080/base").
path(UriBuilderResource.class).build();
Assert.assertEquals(ERROR_MSG, URI.create("http://localhost:8080/base/resource"), ub);
ub = UriBuilder.fromUri("http://localhost:8080/base").
path(UriBuilderResource.class, "get").build();
Assert.assertEquals(ERROR_MSG, URI.create("http://localhost:8080/base/method"), ub);
Method get = UriBuilderResource.class.getMethod("get");
Method locator = UriBuilderResource.class.getMethod("locator");
ub = UriBuilder.fromUri("http://localhost:8080/base").
path(get).path(locator).build();
Assert.assertEquals(ERROR_MSG, URI.create("http://localhost:8080/base/method/locator"), ub);
}
// testTemplates
{
URI bu = UriBuilder.fromUri("http://localhost:8080/a/b/c").
path("/{foo}/{bar}/{baz}/{foo}").build("x", "y", "z");
Assert.assertEquals(ERROR_MSG, URI.create("http://localhost:8080/a/b/c/x/y/z/x"), bu);
Map<String, Object> m = new HashMap<>();
m.put("foo", "x");
m.put("bar", "y");
m.put("baz", "z");
bu = UriBuilder.fromUri("http://localhost:8080/a/b/c").
path("/{foo}/{bar}/{baz}/{foo}").buildFromMap(m);
Assert.assertEquals(ERROR_MSG, URI.create("http://localhost:8080/a/b/c/x/y/z/x"), bu);
}
// testClone
{
UriBuilder ub = UriBuilder.fromUri("http://user@localhost:8080/?query#fragment").path("a");
URI full = ub.clone().path("b").build();
URI base = ub.build();
Assert.assertEquals(ERROR_MSG, URI.create("http://user@localhost:8080/a?query#fragment"), base);
Assert.assertEquals(ERROR_MSG, URI.create("http://user@localhost:8080/a/b?query#fragment"), full);
}
// FromUriTest3 - Create an UriBuilder instance using uriBuilder.fromUri(String)
{
StringBuffer sb = new StringBuffer();
URI uri;
String[] uris = {
"mailto:java-net@java.sun.com",
"ftp://ftp.is.co.za/rfc/rfc1808.txt", "news:comp.lang.java",
"urn:isbn:096139210x",
"http://www.ietf.org/rfc/rfc2396.txt",
"ldap://[2001:db8::7]/c=GB?objectClass?one",
"tel:+1-816-555-1212",
"telnet://192.0.2.16:80/",
"foo://example.com:8042/over/there?name=ferret#nose"
,
};
int j = 0;
while (j < 9) {
uri = UriBuilder.fromUri(uris[j]).build();
if (uri.toString().trim().compareToIgnoreCase(uris[j]) != 0) {
sb.append("Test failed for expected uri: " + uris[j] +
" Got " + uri.toString() + " instead");
throw new Exception(sb.toString());
}
j++;
}
}
// testEncoding
{
HashMap<String, Object> map = new HashMap<>();
{
map.clear();
ResteasyUriBuilder impl = (ResteasyUriBuilder) UriBuilder.fromPath("/foo/{id}");
map.put("id", "something %%20something");
URI uri = impl.buildFromMap(map);
Assert.assertEquals(ERROR_MSG, "/foo/something%20%25%2520something", uri.toString());
}
{
ResteasyUriBuilder impl = (ResteasyUriBuilder) UriBuilder.fromPath("/foo/{id}");
map.clear();
map.put("id", "something something");
URI uri = impl.buildFromMap(map);
Assert.assertEquals(ERROR_MSG, "/foo/something%20something", uri.toString());
}
{
ResteasyUriBuilder impl = (ResteasyUriBuilder) UriBuilder.fromPath("/foo/{id}");
map.clear();
map.put("id", "something%20something");
URI uri = impl.buildFromEncodedMap(map);
Assert.assertEquals(ERROR_MSG, "/foo/something%20something", uri.toString());
}
{
ResteasyUriBuilder impl = (ResteasyUriBuilder) UriBuilder.fromPath("/foo/{id}");
impl.substitutePathParam("id", "something %%20something", false);
URI uri = impl.build();
Assert.assertEquals(ERROR_MSG, "/foo/something%20%25%20something", uri.toString());
}
{
ResteasyUriBuilder impl = (ResteasyUriBuilder) UriBuilder.fromPath("/foo/{id}");
impl.substitutePathParam("id", "something something", false);
URI uri = impl.build();
Assert.assertEquals(ERROR_MSG, "/foo/something%20something", uri.toString());
}
{
ResteasyUriBuilder impl = (ResteasyUriBuilder) UriBuilder.fromPath("/foo/{id}");
impl.substitutePathParam("id", "something%20something", true);
URI uri = impl.build();
Assert.assertEquals(ERROR_MSG, "/foo/something%20something", uri.toString());
}
}
// testQueryParamSubstitution
{
UriBuilder.fromUri("http://localhost/test").queryParam("a", "{b}").build("c");
}
// testEncodedMap1 - Regression from TCK 1.1
{
StringBuffer sb = new StringBuffer();
boolean pass = true;
URI uri;
Map<String, String> maps = new HashMap<>();
maps.put("x", "x%20yz");
maps.put("y", "/path-absolute/%test1");
maps.put("z", "fred@example.com");
maps.put("w", "path-rootless/test2");
String expected_path =
"path-rootless/test2/x%20yz//path-absolute/%25test1/fred@example.com/x%20yz";
uri = UriBuilder.fromPath("").path("{w}/{x}/{y}/{z}/{x}").
buildFromEncodedMap(maps);
if (uri.getRawPath().compareToIgnoreCase(expected_path) != 0) {
pass = false;
sb.append("Test failed for expected path: " + expected_path +
" Got " + uri.getRawPath() + " instead\n");
} else {
sb.append("Got expected path: " + uri.getRawPath() + "\n");
}
if (!pass) {
logger.info(sb.toString());
}
Assert.assertTrue(ERROR_MSG, pass);
}
// testEncodedMapTest3 - from TCK 1.1
{
Map<String, String> maps = new HashMap<>();
maps.put("x", null);
maps.put("y", "/path-absolute/test1");
maps.put("z", "fred@example.com");
maps.put("w", "path-rootless/test2");
maps.put("u", "extra");
try {
UriBuilder.fromPath("").path("{w}/{x}/{y}/{z}/{x}").
buildFromEncodedMap(maps);
throw new Exception("Test Failed: expected IllegalArgumentException not thrown");
} catch (IllegalArgumentException ex) {
}
}
// testEncodedMapTest4
{
Map<String, String> maps = new HashMap<>();
maps.put("x", "x%yz");
maps.put("y", "/path-absolute/test1");
maps.put("z", "fred@example.com");
maps.put("w", "path-rootless/test2");
maps.put("u", "extra");
try {
UriBuilder.fromPath("").path("{w}/{v}/{x}/{y}/{z}/{x}").
buildFromEncodedMap(maps);
throw new Exception("Test Failed: expected IllegalArgumentException not thrown");
} catch (IllegalArgumentException ex) {
}
}
// testBuildFromMapTest1
{
StringBuffer sb = new StringBuffer();
boolean pass = true;
URI uri;
Map<String, String> maps = new HashMap<>();
maps.put("x", "x%yz");
maps.put("y", "/path-absolute/test1");
maps.put("z", "fred@example.com");
maps.put("w", "path-rootless/test2");
String expected_path =
"path-rootless%2Ftest2/x%25yz/%2Fpath-absolute%2Ftest1/fred@example.com/x%25yz";
try {
uri = UriBuilder.fromPath("").path("{w}/{x}/{y}/{z}/{x}").
buildFromMap(maps);
if (uri.getRawPath().compareToIgnoreCase(expected_path) != 0) {
pass = false;
sb.append("Test failed for expected path: " + expected_path +
" Got " + uri.getRawPath() + " instead\n");
} else {
sb.append("Got expected path: " + uri.getRawPath() + "\n");
}
} catch (Exception ex) {
pass = false;
sb.append("Unexpected exception thrown: " + ex.getMessage() +
"\n");
}
if (!pass) {
throw new Exception("At least one assertion failed: " + sb.toString());
}
}
// testBuildFromMapTest2
{
StringBuffer sb = new StringBuffer();
boolean pass = true;
URI uri;
Map<String, String> maps = new HashMap<>();
maps.put("x", "x%yz");
maps.put("y", "/path-absolute/test1");
maps.put("z", "fred@example.com");
maps.put("w", "path-rootless/test2");
maps.put("u", "extra");
String expected_path =
"path-rootless%2Ftest2/x%25yz/%2Fpath-absolute%2Ftest1/fred@example.com/x%25yz";
try {
uri = UriBuilder.fromPath("").path("{w}/{x}/{y}/{z}/{x}").
buildFromMap(maps);
if (uri.getRawPath().compareToIgnoreCase(expected_path) != 0) {
pass = false;
sb.append("Test failed for expected path: " + expected_path +
" Got " + uri.getRawPath() + " instead" + "\n");
} else {
sb.append("Got expected path: " + uri.getRawPath() + "\n");
}
} catch (Exception ex) {
pass = false;
sb.append("Unexpected exception thrown: " + ex.getMessage() +
"\n");
}
if (!pass) {
throw new Exception("At least one assertion failed: " + sb.toString());
}
}
// testBuildFromMapTest3
{
Map<String, String> maps = new HashMap<>();
maps.put("x", null);
maps.put("y", "/path-absolute/test1");
maps.put("z", "fred@example.com");
maps.put("w", "path-rootless/test2");
maps.put("u", "extra");
try {
UriBuilder.fromPath("").path("{w}/{x}/{y}/{z}/{x}").
buildFromMap(maps);
throw new Exception("Test Failed: expected IllegalArgumentException not thrown");
} catch (IllegalArgumentException ex) {
}
}
// testBuildFromMapTest4
{
Map<String, String> maps = new HashMap<>();
maps.put("x", "x%yz");
maps.put("y", "/path-absolute/test1");
maps.put("z", "fred@example.com");
maps.put("w", "path-rootless/test2");
maps.put("u", "extra");
try {
UriBuilder.fromPath("").path("{w}/{v}/{x}/{y}/{z}/{x}").
buildFromMap(maps);
throw new Exception("Test Failed: expected IllegalArgumentException not thrown");
} catch (IllegalArgumentException ex) {
}
}
// testBuildFromMapTest5
{
StringBuffer sb = new StringBuffer();
boolean pass = true;
URI uri;
UriBuilder ub;
Map<String, String> maps = new HashMap<>();
maps.put("x", "x%yz");
maps.put("y", "/path-absolute/test1");
maps.put("z", "fred@example.com");
maps.put("w", "path-rootless/test2");
Map<String, String> maps1 = new HashMap<>();
maps1.put("x", "x%20yz");
maps1.put("y", "/path-absolute/test1");
maps1.put("z", "fred@example.com");
maps1.put("w", "path-rootless/test2");
Map<String, String> maps2 = new HashMap<>();
maps2.put("x", "x%yz");
maps2.put("y", "/path-absolute/test1");
maps2.put("z", "fred@example.com");
maps2.put("w", "path-rootless/test2");
maps2.put("v", "xyz");
String expected_path =
"path-rootless%2Ftest2/x%25yz/%2Fpath-absolute%2Ftest1/fred@example.com/x%25yz";
String expected_path_1 =
"path-rootless%2Ftest2/x%2520yz/%2Fpath-absolute%2Ftest1/fred@example.com/x%2520yz";
String expected_path_2 =
"path-rootless%2Ftest2/x%25yz/%2Fpath-absolute%2Ftest1/fred@example.com/x%25yz";
try {
ub = UriBuilder.fromPath("").path("{w}/{x}/{y}/{z}/{x}");
uri = ub.buildFromMap(maps);
if (uri.getRawPath().compareToIgnoreCase(expected_path) != 0) {
pass = false;
sb.append("Test failed for expected path: " + expected_path +
" Got " + uri.getRawPath() + " instead" + "\n");
} else {
sb.append("Got expected path: " + uri.getRawPath() + "\n");
}
uri = ub.buildFromMap(maps1);
if (uri.getRawPath().compareToIgnoreCase(expected_path_1) != 0) {
pass = false;
sb.append("Test failed for expected path: ").append(expected_path_1)
.append(" Got ").append(uri.getRawPath()).append(" instead")
.append("\n");
} else {
sb.append("Got expected path: ").append(uri.getRawPath()).append("\n");
}
uri = ub.buildFromMap(maps2);
if (uri.getRawPath().compareToIgnoreCase(expected_path_2) != 0) {
pass = false;
sb.append("Test failed for expected path: " + expected_path_2 +
" Got " + uri.getRawPath() + " instead" + "\n");
} else {
sb.append("Got expected path: " + uri.getRawPath() + "\n");
}
} catch (Exception ex) {
pass = false;
sb.append("Unexpected exception thrown: " + ex.getMessage() +
"\n");
}
if (!pass) {
throw new Exception("At least one assertion failed: " + sb.toString());
}
}
// testFromEncodedTest1
{
StringBuffer sb = new StringBuffer();
boolean pass = true;
String expected_value_1 = "http://localhost:8080/a/%25/=/%25G0/%25/=";
String expected_value_2 = "http://localhost:8080/xy/%20/%25/xy";
URI uri = null;
uri = UriBuilder.fromPath("http://localhost:8080").path("/{v}/{w}/{x}/{y}/{z}/{x}").
buildFromEncoded("a", "%25", "=", "%G0", "%", "23");
if (uri.toString().compareToIgnoreCase(expected_value_1) != 0) {
pass = false;
sb.append("Incorrec URI returned: " + uri.toString() +
", expecting " + expected_value_1 + "\n");
} else {
sb.append("Got expected return: " + expected_value_1 + "\n");
}
uri = UriBuilder.fromPath("http://localhost:8080").path("/{x}/{y}/{z}/{x}").
buildFromEncoded("xy", " ", "%");
if (uri.toString().compareToIgnoreCase(expected_value_2) != 0) {
pass = false;
sb.append("Incorrec URI returned: " + uri.toString() +
", expecting " + expected_value_2 + "\n");
} else {
sb.append("Got expected return: " + expected_value_2 + "\n");
}
if (!pass) {
throw new Exception("At least one assertion failed: " + sb.toString());
}
}
// testQueryParamTest1
{
String name = null;
try {
UriBuilder.fromPath("http://localhost:8080").queryParam(name, "x",
"y");
throw new Exception("Expected IllegalArgumentException Not thrown");
} catch (IllegalArgumentException ilex) {
}
}
// QueryParamTest5
{
Boolean pass = true;
String name = "name";
StringBuffer sb = new StringBuffer();
String expected_value =
"http://localhost:8080?name=x%3D&name=y?&name=x+y&name=%26";
URI uri;
try {
uri = UriBuilder.fromPath("http://localhost:8080").queryParam(name,
"x=", "y?", "x y", "&").build();
if (uri.toString().compareToIgnoreCase(expected_value) != 0) {
pass = false;
sb.append("Incorrec URI returned: " + uri.toString() +
", expecting " + expected_value + "\n");
} else {
sb.append("Got expected return: " + expected_value + "\n");
}
} catch (Exception ex) {
pass = false;
sb.append("Unexpected Exception thrown" + ex.getMessage());
}
if (!pass) {
throw new Exception("At least one assertion failed: " + sb.toString());
}
}
// testReplaceQueryTest3
{
Boolean pass = true;
String name = "name";
StringBuffer sb = new StringBuffer();
String expected_value =
"http://localhost:8080?name1=x&name2=%20&name3=x+y&name4=23&name5=x%20y";
URI uri;
uri = UriBuilder.fromPath("http://localhost:8080").queryParam(name,
"x=", "y?", "x y", "&").replaceQuery("name1=x&name2=%20&name3=x+y&name4=23&name5=x y").
build();
if (uri.toString().compareToIgnoreCase(expected_value) != 0) {
pass = false;
sb.append("Incorrec URI returned: " + uri.toString() +
", expecting " + expected_value + "\n");
} else {
sb.append("Got expected return: " + expected_value + "\n");
}
if (!pass) {
throw new Exception("At least one assertion failed: " + sb.toString());
}
}
// testReplaceQueryParamTest2
{
Boolean pass = true;
String name = "name";
StringBuffer sb = new StringBuffer();
String expected_value = "http://localhost:8080";
URI uri;
uri = UriBuilder.fromPath("http://localhost:8080").queryParam(name,
"x=", "y?", "x y", "&").replaceQueryParam(name, (Object[]) null).build();
if (uri.toString().compareToIgnoreCase(expected_value) != 0) {
pass = false;
sb.append("Incorrec URI returned: " + uri.toString() +
", expecting " + expected_value + "\n");
} else {
sb.append("Got expected return: " + expected_value + "\n");
}
if (!pass) {
throw new Exception("At least one assertion failed: " + sb.toString());
}
}
// testPathEncoding
{
UriBuilder builder = UriBuilder.fromUri("http://{host}");
builder.path("{d}");
URI uri = builder.build("A/B", "C/D");
Assert.assertEquals(ERROR_MSG, "http://A%2FB/C%2FD", uri.toString());
uri = builder.buildFromEncoded("A/B", "C/D");
Assert.assertEquals(ERROR_MSG, "http://A/B/C/D", uri.toString());
Object[] params = {"A/B", "C/D"};
uri = builder.build(params, false);
Assert.assertEquals(ERROR_MSG, "http://A/B/C/D", uri.toString());
HashMap<String, Object> map = new HashMap<>();
map.put("host", "A/B");
map.put("d", "C/D");
uri = builder.buildFromMap(map);
Assert.assertEquals(ERROR_MSG, "http://A%2FB/C%2FD", uri.toString());
uri = builder.buildFromEncodedMap(map);
Assert.assertEquals(ERROR_MSG, "http://A/B/C/D", uri.toString());
uri = builder.buildFromMap(map, false);
Assert.assertEquals(ERROR_MSG, "http://A/B/C/D", uri.toString());
}
// testRelativize
{
URI from = URI.create("a/b/c");
URI to = URI.create("a/b/c/d/e");
URI relativized = ResteasyUriBuilder.relativize(from, to);
Assert.assertEquals(ERROR_MSG, relativized.toString(), "d/e");
from = URI.create("a/b/c");
to = URI.create("d/e");
relativized = ResteasyUriBuilder.relativize(from, to);
Assert.assertEquals(ERROR_MSG, relativized.toString(), "../../../d/e");
from = URI.create("a/b/c");
to = URI.create("a/b/c");
relativized = ResteasyUriBuilder.relativize(from, to);
Assert.assertEquals(ERROR_MSG, relativized.toString(), "");
from = URI.create("a");
to = URI.create("d/e");
relativized = ResteasyUriBuilder.relativize(from, to);
Assert.assertEquals(ERROR_MSG, relativized.toString(), "../d/e");
}
// testPercentage
{
UriBuilder path = UriBuilder.fromUri(URL).path("{path}");
String template = path.resolveTemplate("path", ENCODED, false).toTemplate();
logger.info(template);
}
// testWithSlashTrue
{
Object[] s = {"path-rootless/test2", new StringBuilder("x%yz"),
"/path-absolute/%25test1", "fred@example.com"};
URI uri = UriBuilder.fromPath("").path("{v}/{w}/{x}/{y}/{w}")
.build(new Object[]{s[0], s[1], s[2], s[3], s[1]}, true);
logger.info(uri.getRawPath());
logger.info(ENCODED_EXPECTED_PATH);
Assert.assertEquals(ERROR_MSG, uri.getRawPath(), ENCODED_EXPECTED_PATH);
}
// testNull
{
String uri = null;
try {
UriBuilder.fromUri(uri);
Assert.fail("expected IllegalArgumentException");
} catch (IllegalArgumentException ilex) {
}
}
// testNullMatrixParam
{
try {
UriBuilder.fromPath("http://localhost:8080").matrixParam(null, "x", "y");
Assert.fail(ERROR_MSG);
} catch (IllegalArgumentException e) {
}
try {
UriBuilder.fromPath("http://localhost:8080").matrixParam("name", (Object) null);
Assert.fail(ERROR_MSG);
} catch (IllegalArgumentException e) {
}
}
// testReplaceMatrixParam2
{
String name = "name1";
String expected = "http://localhost:8080;name=x=;name=y%3F;name=x%20y;name=&;name1=x;name1=y;name1=y%20x;name1=x%25y;name1=%20";
URI uri = UriBuilder
.fromPath(
"http://localhost:8080;name=x=;name=y?;name=x y;name=&")
.replaceMatrixParam(name, "x", "y", "y x", "x%y", "%20")
.build();
Assert.assertEquals(ERROR_MSG, uri.toString(), expected);
}
// testReplaceMatrixParam3
{
String name = "name";
String expected = "http://localhost:8080;name=x;name=y;name=y%20x;name=x%25y;name=%20";
URI uri = UriBuilder
.fromPath(
"http://localhost:8080;name=x=;name=y?;name=x y;name=&")
.replaceMatrixParam(name, "x", "y", "y x", "x%y", "%20")
.build();
Assert.assertEquals(ERROR_MSG, uri.toString(), expected);
}
// testReplaceMatrixParam4
{
String name = "name";
String expected1 = "http://localhost:8080;";
URI uri = UriBuilder.fromPath("http://localhost:8080")
.matrixParam(name, "x=", "y?", "x y", "&")
.replaceMatrix(null).build();
Assert.assertEquals(ERROR_MSG, uri.toString(), expected1);
}
// testReplaceMatrixParam5
{
String expected = "http://localhost:8080;name=x;name=y;name=y%20x;name=x%25y;name=%20";
String value = "name=x;name=y;name=y x;name=x%y;name= ";
URI uri = UriBuilder
.fromPath(
"http://localhost:8080;name=x=;name=y?;name=x y;name=&")
.replaceMatrix(value).build();
Assert.assertEquals(ERROR_MSG, uri.toString(), expected);
}
// testReplaceMatrixParam6
{
String expected = "http://localhost:8080;name1=x;name1=y;name1=y%20x;name1=x%25y;name1=%20";
String value = "name1=x;name1=y;name1=y x;name1=x%y;name1= ";
URI uri = UriBuilder
.fromPath(
"http://localhost:8080;name=x=;name=y?;name=x y;name=&")
.replaceMatrix(value).build();
Assert.assertEquals(ERROR_MSG, uri.toString(), expected);
}
// testUriReplace
{
String orig = "foo://example.com:8042/over/there?name=ferret#nose";
String expected = "http://example.com:8042/over/there?name=ferret#nose";
URI replacement = new URI("http",
"//example.com:8042/over/there?name=ferret", null);
URI uri = UriBuilder.fromUri(new URI(orig))
.uri(replacement.toASCIIString()).build();
Assert.assertEquals(ERROR_MSG, uri.toString(), expected);
}
// testUriReplace2
{
String orig = "tel:+1-816-555-1212";
String expected = "tel:+1-816-555-1212";
URI replacement = new URI("tel", "+1-816-555-1212", null);
UriBuilder uriBuilder = UriBuilder.fromUri(new URI(orig));
URI uri = uriBuilder
.uri(replacement.toASCIIString()).build();
Assert.assertEquals(ERROR_MSG, uri.toString(), expected);
}
// testUriReplace3
{
String orig = "news:comp.lang.java";
String expected = "http://comp.lang.java";
URI replacement = new URI("http", "//comp.lang.java", null);
UriBuilder uriBuilder = UriBuilder.fromUri(new URI(orig));
URI uri = uriBuilder
.uri(replacement.toASCIIString()).build();
Assert.assertEquals(ERROR_MSG, uri.toString(), expected);
}
// testParse2
{
String opaque = "mailto:bill@jboss.org";
Matcher matcher = ResteasyUriBuilder.opaqueUri.matcher(opaque);
if (matcher.matches()) {
logger.info(matcher.group(1));
logger.info(matcher.group(2));
}
String hierarchical = "http://foo.com";
matcher = ResteasyUriBuilder.opaqueUri.matcher(hierarchical);
if (matcher.matches()) {
Assert.fail(ERROR_MSG);
}
}
// testColon
{
{
UriBuilder builder = UriBuilder.fromUri("http://foo.com/runtime/org.jbpm:HR:1.0/process/hiring/start");
builder.build();
}
}
}
public void printParse(String uri) {
logger.info("--- " + uri);
Matcher match = uriPattern.matcher(uri);
if (!match.matches()) {
throw new IllegalStateException("no match found");
}
for (int i = 1; i < match.groupCount() + 1; i++) {
logger.info("group[" + i + "] = '" + match.group(i) + "'");
}
}
}