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 >> - * &#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
