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

Reply via email to