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

Reply via email to