You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2013/02/28 15:17:15 UTC
[1/2] git commit: WICKET-5065 Improve UrlRenderer to be able to
render urls without scheme and/or host
WICKET-5065 Improve UrlRenderer to be able to render urls without scheme and/or host
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/9723ac36
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/9723ac36
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/9723ac36
Branch: refs/heads/master
Commit: 9723ac3698bf37c7f44659d27f8d1c8ae1389730
Parents: ce0f1e9
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Thu Feb 28 16:14:52 2013 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Thu Feb 28 16:14:52 2013 +0200
----------------------------------------------------------------------
.../request/cycle/RequestCycleUrlForTest.java | 19 +++---
.../wicket/request/cycle/UrlRendererTest.java | 50 +++++++++++++++
.../org/apache/wicket/request/UrlRenderer.java | 24 +++++--
3 files changed, 79 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/9723ac36/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestCycleUrlForTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestCycleUrlForTest.java b/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestCycleUrlForTest.java
index 9ad8a99..2ec1c7c 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestCycleUrlForTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestCycleUrlForTest.java
@@ -49,9 +49,9 @@ import org.junit.Test;
public class RequestCycleUrlForTest extends Assert
{
private static final String JSESSIONID = ";jsessionid=1234567890";
- private static final String BOOKMARKABLE_PAGE_URL = "/bookmarkablePage";
- private static final String RES_REF_URL = "/resRef";
- private static final String RESOURCE_URL = "/res";
+ private static final String BOOKMARKABLE_PAGE_URL = "bookmarkablePage";
+ private static final String RES_REF_URL = "resRef";
+ private static final String RESOURCE_URL = "res";
RequestCycle requestCycle;
@@ -59,6 +59,9 @@ public class RequestCycleUrlForTest extends Assert
public void before()
{
Request request = mock(Request.class);
+ Url baseUrl = Url.parse("");
+ when(request.getClientUrl()).thenReturn(baseUrl);
+
Response response = new StringResponse() {
@Override
public String encodeURL(CharSequence url)
@@ -81,7 +84,7 @@ public class RequestCycleUrlForTest extends Assert
RequestCycleContext context = new RequestCycleContext(request, response, mapper, exceptionMapper);
requestCycle = new RequestCycle(context);
- requestCycle.getUrlRenderer().setBaseUrl(Url.parse("http://dummy-host"));
+ requestCycle.getUrlRenderer().setBaseUrl(baseUrl);
}
/**
@@ -115,7 +118,7 @@ public class RequestCycleUrlForTest extends Assert
};
ResourceReferenceRequestHandler handler = new ResourceReferenceRequestHandler(reference);
CharSequence url = requestCycle.urlFor(handler);
- assertEquals('.'+RES_REF_URL, url);
+ assertEquals("./"+RES_REF_URL, url);
}
/**
@@ -137,7 +140,7 @@ public class RequestCycleUrlForTest extends Assert
};
ResourceReferenceRequestHandler handler = new ResourceReferenceRequestHandler(reference);
CharSequence url = requestCycle.urlFor(handler);
- assertEquals('.'+RES_REF_URL+JSESSIONID, url);
+ assertEquals("./"+RES_REF_URL+JSESSIONID, url);
}
/**
@@ -151,7 +154,7 @@ public class RequestCycleUrlForTest extends Assert
IStaticCacheableResource resource = mock(IStaticCacheableResource.class);
ResourceRequestHandler handler = new ResourceRequestHandler(resource, new PageParameters());
CharSequence url = requestCycle.urlFor(handler);
- assertEquals('.'+RESOURCE_URL, url);
+ assertEquals("./"+RESOURCE_URL, url);
}
/**
@@ -165,7 +168,7 @@ public class RequestCycleUrlForTest extends Assert
ByteArrayResource resource = new ByteArrayResource(null, new byte[] {1, 2}, "test.bin");
ResourceRequestHandler handler = new ResourceRequestHandler(resource, new PageParameters());
CharSequence url = requestCycle.urlFor(handler);
- assertEquals('.'+RESOURCE_URL + JSESSIONID, url);
+ assertEquals("./"+RESOURCE_URL + JSESSIONID, url);
}
/**
http://git-wip-us.apache.org/repos/asf/wicket/blob/9723ac36/wicket-core/src/test/java/org/apache/wicket/request/cycle/UrlRendererTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/cycle/UrlRendererTest.java b/wicket-core/src/test/java/org/apache/wicket/request/cycle/UrlRendererTest.java
index a11e84a..e47bba1 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/cycle/UrlRendererTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/request/cycle/UrlRendererTest.java
@@ -467,4 +467,54 @@ public class UrlRendererTest extends Assert
assertEquals("../../../../a/b;jsessionid=123456", encodedRelativeUrl);
}
+ /**
+ * https://issues.apache.org/jira/browse/WICKET-5065
+ */
+ @Test
+ public void renderAbsoluteWithoutHost()
+ {
+ Url baseUrl = Url.parse("a/b");
+
+ MockWebRequest request = new MockWebRequest(baseUrl);
+ UrlRenderer renderer = new UrlRenderer(request);
+
+ Url absoluteUrl = Url.parse("/c/d");
+ String encodedRelativeUrl = renderer.renderUrl(absoluteUrl);
+
+ assertEquals("/c/d", encodedRelativeUrl);
+ }
+
+ /**
+ * https://issues.apache.org/jira/browse/WICKET-5065
+ */
+ @Test
+ public void renderAbsoluteWithoutScheme()
+ {
+ Url baseUrl = Url.parse("a/b");
+
+ MockWebRequest request = new MockWebRequest(baseUrl);
+ UrlRenderer renderer = new UrlRenderer(request);
+
+ Url absoluteUrl = Url.parse("//host/c/d");
+ String encodedRelativeUrl = renderer.renderUrl(absoluteUrl);
+
+ assertEquals("//host/c/d", encodedRelativeUrl);
+ }
+
+ /**
+ * https://issues.apache.org/jira/browse/WICKET-5065
+ */
+ @Test
+ public void renderAbsoluteWithoutSchemeWithPort()
+ {
+ Url baseUrl = Url.parse("a/b");
+
+ MockWebRequest request = new MockWebRequest(baseUrl);
+ UrlRenderer renderer = new UrlRenderer(request);
+
+ Url absoluteUrl = Url.parse("//host:1234/c/d");
+ String encodedRelativeUrl = renderer.renderUrl(absoluteUrl);
+
+ assertEquals("//host:1234/c/d", encodedRelativeUrl);
+ }
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/9723ac36/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java b/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java
index c4005cc..b2f7f13 100644
--- a/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java
@@ -150,14 +150,22 @@ public class UrlRenderer
}
StringBuilder render = new StringBuilder();
- render.append(protocol);
- render.append("://");
- render.append(host);
-
- if ((port != null) && !port.equals(PROTO_TO_PORT.get(protocol)))
+ if (Strings.isEmpty(protocol) == false)
{
+ render.append(protocol);
render.append(':');
- render.append(port);
+ }
+
+ if (Strings.isEmpty(host) == false)
+ {
+ render.append("//");
+ render.append(host);
+
+ if ((port != null) && !port.equals(PROTO_TO_PORT.get(protocol)))
+ {
+ render.append(':');
+ render.append(port);
+ }
}
if (url.isAbsolute() == false)
@@ -355,6 +363,10 @@ public class UrlRenderer
{
return true;
}
+ if (url.isAbsolute()) {
+ // do not relativize urls like "/a/b"
+ return true;
+ }
return false;
}