Updated Branches: refs/heads/wicket-1.5.x df3311564 -> 77a0732f4
WICKET-4514 UrlRenderer produces wrong full urls when the passed parameter is not absolute (as Url understands 'absolute') Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/77a0732f Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/77a0732f Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/77a0732f Branch: refs/heads/wicket-1.5.x Commit: 77a0732f4136c84a15bc170b44cfb1eb1b05588e Parents: df33115 Author: Martin Tzvetanov Grigorov <mgrigo...@apache.org> Authored: Wed Apr 25 14:47:17 2012 +0300 Committer: Martin Tzvetanov Grigorov <mgrigo...@apache.org> Committed: Wed Apr 25 14:47:17 2012 +0300 ---------------------------------------------------------------------- .../wicket/request/cycle/UrlRendererTest.java | 50 ++++++++++++++- .../org/apache/wicket/request/UrlRenderer.java | 13 ++++- 2 files changed, 59 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/77a0732f/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 e97113dd..5fb3bcd 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 @@ -16,20 +16,21 @@ */ package org.apache.wicket.request.cycle; -import junit.framework.TestCase; - import org.apache.wicket.mock.MockWebRequest; import org.apache.wicket.request.Url; import org.apache.wicket.request.UrlRenderer; +import org.junit.Assert; +import org.junit.Test; /** * @author Matej Knopp */ -public class UrlRendererTest extends TestCase +public class UrlRendererTest extends Assert { /** * */ + @Test public void test1() { UrlRenderer r1 = new UrlRenderer(new MockWebRequest(Url.parse("foo/bar/baz?a=b"))); @@ -42,6 +43,7 @@ public class UrlRendererTest extends TestCase /** * */ + @Test public void test2() { UrlRenderer r1 = new UrlRenderer(new MockWebRequest(Url.parse("foo/bar/baz?a=b"))); @@ -52,6 +54,7 @@ public class UrlRendererTest extends TestCase /** * */ + @Test public void test3() { UrlRenderer r1 = new UrlRenderer(new MockWebRequest(Url.parse("?a=b"))); @@ -61,6 +64,7 @@ public class UrlRendererTest extends TestCase /** * */ + @Test public void test5() { UrlRenderer r1 = new UrlRenderer(new MockWebRequest(Url.parse("url"))); @@ -70,6 +74,7 @@ public class UrlRendererTest extends TestCase /** * */ + @Test public void test6() { UrlRenderer r1 = new UrlRenderer(new MockWebRequest(Url.parse("url/"))); @@ -79,6 +84,7 @@ public class UrlRendererTest extends TestCase /** * */ + @Test public void test7() { UrlRenderer r1 = new UrlRenderer(new MockWebRequest( @@ -89,6 +95,7 @@ public class UrlRendererTest extends TestCase /** * */ + @Test public void test8() { UrlRenderer r1 = new UrlRenderer(new MockWebRequest( @@ -100,6 +107,7 @@ public class UrlRendererTest extends TestCase /** * */ + @Test public void test9() { UrlRenderer r1 = new UrlRenderer(new MockWebRequest(Url.parse("a/b/q/d/e"))); @@ -109,6 +117,7 @@ public class UrlRendererTest extends TestCase /** * */ + @Test public void test10() { MockWebRequest request = new MockWebRequest(Url.parse("a/b/q/d/e"), "/contextPath", @@ -134,6 +143,7 @@ public class UrlRendererTest extends TestCase /** * <a href="https://issues.apache.org/jira/browse/WICKET-3337">WICKET-3337</a> */ + @Test public void test11() { UrlRenderer r1 = new UrlRenderer(new MockWebRequest(Url.parse("a"))); @@ -143,6 +153,7 @@ public class UrlRendererTest extends TestCase /** * <a href="https://issues.apache.org/jira/browse/WICKET-3567">WICKET-3567</a> */ + @Test public void test12() { UrlRenderer r1 = new UrlRenderer(new MockWebRequest(Url.parse("?0"))); @@ -155,9 +166,42 @@ public class UrlRendererTest extends TestCase * A Url should not end with '..' because some web containers do not handle it properly. Using * '../' works better. */ + @Test public void test13() { UrlRenderer r1 = new UrlRenderer(new MockWebRequest(Url.parse("foo/bar"))); assertEquals("../", r1.renderUrl(Url.parse(""))); } + + /** + * https://issues.apache.org/jira/browse/WICKET-4514 + */ + @Test + public void renderFullUrlWithRelativeArgument() + { + Url baseUrl = Url.parse("one/two/three"); + baseUrl.setProtocol("http"); + baseUrl.setHost("www.example.com"); + baseUrl.setPort(8888); + UrlRenderer renderer = new UrlRenderer(new MockWebRequest(baseUrl)); + renderer.setBaseUrl(baseUrl); // this is needed because MockWebRequest cuts data + String fullUrl = renderer.renderFullUrl(Url.parse("../four")); + assertEquals("http://www.example.com:8888/one/four", fullUrl); + } + + /** + * https://issues.apache.org/jira/browse/WICKET-4514 + */ + @Test + public void renderFullUrlWithAbsoluteArgument() + { + Url baseUrl = Url.parse("one/two/three"); + baseUrl.setProtocol("http"); + baseUrl.setHost("www.example.com"); + baseUrl.setPort(8888); + UrlRenderer renderer = new UrlRenderer(new MockWebRequest(baseUrl)); + renderer.setBaseUrl(baseUrl); // this is needed because MockWebRequest cuts data + String fullUrl = renderer.renderFullUrl(Url.parse("/four")); // url starting with slash is considered absolute + assertEquals("http://www.example.com:8888/four", fullUrl); + } } http://git-wip-us.apache.org/repos/asf/wicket/blob/77a0732f/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 05111f4..c4a1a90 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 @@ -113,7 +113,18 @@ public class UrlRenderer final String protocol = resolveProtocol(url); final String host = resolveHost(url); final Integer port = resolvePort(url); - final String path = url.toString(); + + final String path; + if (url.isAbsolute()) + { + path = url.toString(); + } + else + { + Url base = new Url(baseUrl); + base.resolveRelative(url); + path = base.toString(); + } StringBuilder render = new StringBuilder(); render.append(protocol);