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;
 	}