Hi Martin,

what test for URLDecoder are you talking about? To the best of my knowledge I 
did not delete anything.

I _copied_ from UrlEncoderTest but the file is still there.

Merging UrlTest from wicket-core with UrlTest in wicket-request makes sense. 
Did not realize there's another test case with the same name in another module. 
Having them split is odd indeed.

Am 25.06.2011 um 04:24 schrieb Martin Grigorov:

> Why the hell the test for URLDecoder has been killed and replaced with
> something else ?!?
> We have tests for Url at org.apache.wicket.request.UrlTest in wicket-core.
> I agree that it belongs to wicket-request and to be able to move it
> there it should get rid of WicketObjects usage but this kind of
> killing other tests is totally wrong!
> 
> On Sat, Jun 25, 2011 at 4:22 AM,  <[email protected]> wrote:
>> Author: pete
>> Date: Sat Jun 25 01:22:07 2011
>> New Revision: 1139477
>> 
>> URL: http://svn.apache.org/viewvc?rev=1139477&view=rev
>> Log:
>> WICKET-3834 WicketTester does not follow absolute redirects: make 
>> Url.parse(..) capable of parsing absolute urls
>> 
>> Added:
>>    
>> wicket/trunk/wicket-request/src/test/java/org/apache/wicket/request/UrlTest.java
>>      - copied, changed from r1139453, 
>> wicket/trunk/wicket-request/src/test/java/org/apache/wicket/request/UrlEncoderTest.java
>> Modified:
>>    
>> wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/Url.java
>> 
>> 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=1139477&r1=1139476&r2=1139477&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 Jun 25 01:22:07 2011
>> @@ -116,10 +116,11 @@ public final class Url implements Serial
>>         * Parses the given URL string.
>>         *
>>         * @param url
>> +        *           full absolute or relative url with query string
>>         * @param charset
>>         * @return Url object
>>         */
>> -       public static Url parse(final String url, Charset charset)
>> +       public static Url parse(String url, Charset charset)
>>        {
>>                Args.notNull(url, "url");
>> 
>> @@ -128,36 +129,79 @@ public final class Url implements Serial
>>                // the url object resolved the charset, use that
>>                charset = result.getCharset();
>> 
>> -               String segments;
>> -               String query;
>> +               // extract query string part
>> +               final String queryString;
>> +               final String absoluteUrl;
>> 
>> -               int qIndex = url.indexOf('?');
>> +               int queryAt = url.indexOf('?');
>> 
>> -               if (qIndex == -1)
>> +               if (queryAt == -1)
>>                {
>> -                       segments = url;
>> -                       query = "";
>> +                       queryString = "";
>> +                       absoluteUrl = url;
>>                }
>>                else
>>                {
>> -                       segments = url.substring(0, qIndex);
>> -                       query = url.substring(qIndex + 1);
>> +                       absoluteUrl = url.substring(0, queryAt);
>> +                       queryString = url.substring(queryAt + 1);
>>                }
>> +
>> +               // get absolute / relative part of url
>> +               String relativeUrl;
>> 
>> -               if (segments.length() > 0)
>> +               // absolute urls contain a scheme://
>> +               final int protocolAt = absoluteUrl.indexOf("://");
>> +
>> +               if (protocolAt != -1)
>> +               {
>> +                       result.protocol = absoluteUrl.substring(0, 
>> protocolAt);
>> +                       final String afterProto = 
>> absoluteUrl.substring(protocolAt + 3);
>> +                       final String hostAndPort;
>> +
>> +                       int relativeAt = afterProto.indexOf('/');
>> +
>> +                       if (relativeAt == -1)
>> +                       {
>> +                               relativeUrl = "";
>> +                               hostAndPort = afterProto;
>> +                       }
>> +                       else
>> +                       {
>> +                               relativeUrl = 
>> afterProto.substring(relativeAt);
>> +                               hostAndPort = afterProto.substring(0, 
>> relativeAt);
>> +                       }
>> +
>> +                       int portAt = hostAndPort.indexOf(':');
>> +
>> +                       if (portAt == -1)
>> +                       {
>> +                               result.host = hostAndPort;
>> +                               result.port = null;
>> +                       }
>> +                       else
>> +                       {
>> +                               result.host = hostAndPort.substring(0, 
>> portAt);
>> +                               result.port = 
>> Integer.parseInt(hostAndPort.substring(portAt + 1));
>> +                       }
>> +               }
>> +               else
>>                {
>> +                       relativeUrl = absoluteUrl;
>> +               }
>> 
>> +               if (relativeUrl.length() > 0)
>> +               {
>>                        boolean removeLast = false;
>> -                       if (segments.endsWith("/"))
>> +                       if (relativeUrl.endsWith("/"))
>>                        {
>>                                // we need to append something and remove it 
>> after splitting
>>                                // because otherwise the
>>                                // trailing slashes will be lost
>> -                               segments += "/x";
>> +                               relativeUrl += "/x";
>>                                removeLast = true;
>>                        }
>> 
>> -                       String segmentArray[] = Strings.split(segments, '/');
>> +                       String segmentArray[] = Strings.split(relativeUrl, 
>> '/');
>> 
>>                        if (removeLast)
>>                        {
>> @@ -173,9 +217,9 @@ public final class Url implements Serial
>>                        }
>>                }
>> 
>> -               if (query.length() > 0)
>> +               if (queryString.length() > 0)
>>                {
>> -                       String queryArray[] = Strings.split(query, '&');
>> +                       String queryArray[] = Strings.split(queryString, 
>> '&');
>>                        for (String s : queryArray)
>>                        {
>>                                result.parameters.add(parseQueryParameter(s, 
>> charset));
>> 
>> Copied: 
>> wicket/trunk/wicket-request/src/test/java/org/apache/wicket/request/UrlTest.java
>>  (from r1139453, 
>> wicket/trunk/wicket-request/src/test/java/org/apache/wicket/request/UrlEncoderTest.java)
>> URL: 
>> http://svn.apache.org/viewvc/wicket/trunk/wicket-request/src/test/java/org/apache/wicket/request/UrlTest.java?p2=wicket/trunk/wicket-request/src/test/java/org/apache/wicket/request/UrlTest.java&p1=wicket/trunk/wicket-request/src/test/java/org/apache/wicket/request/UrlEncoderTest.java&r1=1139453&r2=1139477&rev=1139477&view=diff
>> ==============================================================================
>> --- 
>> wicket/trunk/wicket-request/src/test/java/org/apache/wicket/request/UrlEncoderTest.java
>>  (original)
>> +++ 
>> wicket/trunk/wicket-request/src/test/java/org/apache/wicket/request/UrlTest.java
>>  Sat Jun 25 01:22:07 2011
>> @@ -16,25 +16,67 @@
>>  */
>>  package org.apache.wicket.request;
>> 
>> -import org.apache.wicket.util.crypt.CharEncoding;
>> +import java.util.Arrays;
>> +
>>  import org.junit.Assert;
>>  import org.junit.Test;
>> 
>>  /**
>> - * Tests for {@link UrlDecoder}
>> + * Tests for {@link org.apache.wicket.request.Url}
>>  */
>> -public class UrlEncoderTest
>> +public class UrlTest extends Assert
>>  {
>> +       @Test
>> +       public void parseRelativeUrl()
>> +       {
>> +               Url url = Url.parse("foo");
>> +               checkUrl(url, null, null, null, "foo");
>> +               assertFalse(url.isAbsolute());
>> +
>> +               url = Url.parse("foo/bar/baz");
>> +               checkUrl(url, null, null, null, "foo", "bar", "baz");
>> +               assertFalse(url.isAbsolute());
>> +
>> +               url = Url.parse("?foobar");
>> +               checkUrl(url, null, null, null);
>> +               assertEquals("", url.getQueryParameter("foobar").getValue());
>> +               assertFalse(url.isAbsolute());
>> +
>> +               url = Url.parse("foo?a=123");
>> +               checkUrl(url, null, null, null, "foo");
>> +               assertEquals("123", url.getQueryParameter("a").getValue());
>> +               assertFalse(url.isAbsolute());
>> +
>> +               url = Url.parse("/foo");
>> +               checkUrl(url, null, null, null, "", "foo");
>> +               assertTrue(url.isAbsolute());
>> +       }
>> 
>> -       /**
>> -        * <a 
>> href="https://issues.apache.org/jira/browse/WICKET-3721";>WICKET-3721</a> 
>> Encode
>> -        * apostrophes because otherwise they get XML encoded by 
>> ComponentTag#writeOutput() to
>> -        * &amp;#039; and eventually break links with javascript:
>> -        */
>>        @Test
>> -       public void encodeApostrophe()
>> +       public void parseAbsoluteUrl()
>> +       {
>> +               Url url = Url.parse("ftp://myhost:8081";);
>> +               checkUrl(url, "ftp", "myhost", 8081);
>> +               assertFalse(url.isAbsolute());
>> +
>> +               url = Url.parse("gopher://myhost:8081/foo";);
>> +               checkUrl(url, "gopher", "myhost", 8081, "", "foo");
>> +               assertTrue(url.isAbsolute());
>> +
>> +               url = Url.parse("https://myhost/foo";);
>> +               checkUrl(url, "https", "myhost", null, "", "foo");
>> +               assertTrue(url.isAbsolute());
>> +
>> +               url = Url.parse("https://myhost/foo:123";);
>> +               checkUrl(url, "https", "myhost", null, "", "foo:123");
>> +               assertTrue(url.isAbsolute());
>> +       }
>> +
>> +       private void checkUrl(Url url, String protocol, String host, Integer 
>> port, String... segments)
>>        {
>> -               Assert.assertEquals("someone%27s%20bad%20url",
>> -                       UrlEncoder.FULL_PATH_INSTANCE.encode("someone's bad 
>> url", CharEncoding.UTF_8));
>> +               assertNotNull(url);
>> +               assertEquals(host, url.getHost());
>> +               assertEquals(port, url.getPort());
>> +               assertEquals(Arrays.asList(segments), url.getSegments());
>>        }
>>  }
>> 
>> 
>> 
> 
> 
> 
> -- 
> Martin Grigorov
> jWeekend
> Training, Consulting, Development
> http://jWeekend.com

Reply via email to