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
