Author: mgrigorov
Date: Sat Jan 22 15:12:30 2011
New Revision: 1062172

URL: http://svn.apache.org/viewvc?rev=1062172&view=rev
Log:
WICKET-3363 forminput examle: switching locales does not have the desired 
effect.

Properly handle './' segments when resolving relative url.
'./' is the current segment/folder, so they must be dropped.

Modified:
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/UrlTest.java
    wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/Url.java

Modified: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/UrlTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/UrlTest.java?rev=1062172&r1=1062171&r2=1062172&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/UrlTest.java 
(original)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/UrlTest.java 
Sat Jan 22 15:12:30 2011
@@ -22,7 +22,6 @@ import java.util.List;
 
 import junit.framework.TestCase;
 
-import org.apache.wicket.request.Url;
 import org.apache.wicket.request.Url.QueryParameter;
 
 /**
@@ -322,4 +321,40 @@ public class UrlTest extends TestCase
                url.concatSegments(Arrays.asList("..", ".."));
                assertEquals(Url.parse("fff/"), url);
        }
+
+       /**
+        * @see <a 
href="https://issues.apache.org/jira/browse/WICKET-3363";>WICKET-3363</a>
+        */
+       public void testResolveRelative1()
+       {
+               Url relative = Url.parse("./a/b?p1=v1");
+               Url baseUrl = Url.parse("c/d?p2=v2");
+               baseUrl.resolveRelative(relative);
+
+               assertEquals("c/a/b?p1=v1", baseUrl.toString());
+       }
+
+       /**
+        * @see <a 
href="https://issues.apache.org/jira/browse/WICKET-3363";>WICKET-3363</a>
+        */
+       public void testResolveRelative2()
+       {
+               Url relative = Url.parse("a/b?p1=v1");
+               Url baseUrl = Url.parse("c/d?p2=v2");
+               baseUrl.resolveRelative(relative);
+
+               assertEquals("c/a/b?p1=v1", baseUrl.toString());
+       }
+
+       /**
+        * @see <a 
href="https://issues.apache.org/jira/browse/WICKET-3363";>WICKET-3363</a>
+        */
+       public void testResolveRelative3()
+       {
+               Url relative = Url.parse("../a/b?p1=v1");
+               Url baseUrl = Url.parse("c/d");
+               baseUrl.resolveRelative(relative);
+
+               assertEquals("a/b?p1=v1", baseUrl.toString());
+       }
 }

Modified: 
wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/Url.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/Url.java?rev=1062172&r1=1062171&r2=1062172&view=diff
==============================================================================
--- 
wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/Url.java 
(original)
+++ 
wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/Url.java 
Sat Jan 22 15:12:30 2011
@@ -770,8 +770,15 @@ public final class Url implements Serial
                // strip the first non-folder segment
                getSegments().remove(getSegments().size() - 1);
 
+               // remove all './' (current folder) from the relative url
+               if (!relative.getSegments().isEmpty() && 
".".equals(relative.getSegments().get(0)))
+               {
+                       relative.getSegments().remove(0);
+               }
+
                // process any ../ segments in the relative url
-               while (!relative.getSegments().isEmpty() && 
"".equals(relative.getSegments().get(0)))
+               while (!relative.getSegments().isEmpty() &&
+                       ("".equals(relative.getSegments().get(0)) || 
"..".equals(relative.getSegments().get(0))))
                {
                        relative.getSegments().remove(0);
                        getSegments().remove(getSegments().size() - 1);


Reply via email to