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/2869c58b Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/2869c58b Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/2869c58b Branch: refs/heads/master Commit: 2869c58bf530b4e9ff1efafed69ff788d7cbcec8 Parents: 40128fc 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 15:03:38 2012 +0300 ---------------------------------------------------------------------- .../wicket/request/cycle/UrlRendererTest.java | 29 +++++++++++++++ .../org/apache/wicket/request/UrlRenderer.java | 13 ++++++- 2 files changed, 41 insertions(+), 1 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/2869c58b/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 f958c5f..6ce4cb9 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 @@ -188,4 +188,33 @@ public class UrlRendererTest extends Assert String renderedUrl = renderer.renderUrl(url); assertEquals(absoluteUrl, renderedUrl); } + + @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/2869c58b/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 e7049f1..8f44fda 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);