Updated Branches: refs/heads/wicket-1.5.x 23a59ea6d -> c073f4b2c
WICKET-4789 url rendering regression: keep trailing empty segment if base still has segments but relative has not Merge 6f0863f431747e71b7a39a2c2ee44900955a858d from master Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/c073f4b2 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/c073f4b2 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/c073f4b2 Branch: refs/heads/wicket-1.5.x Commit: c073f4b2cb2fd5212b77065d96eac7fe0f5d846a Parents: 23a59ea Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Wed Oct 3 11:49:42 2012 +0300 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Wed Oct 3 11:49:42 2012 +0300 ---------------------------------------------------------------------- .../main/java/org/apache/wicket/request/Url.java | 12 +++++-- .../java/org/apache/wicket/request/UrlTest.java | 29 ++++++++++++++- 2 files changed, 36 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/c073f4b2/wicket-request/src/main/java/org/apache/wicket/request/Url.java ---------------------------------------------------------------------- diff --git a/wicket-request/src/main/java/org/apache/wicket/request/Url.java b/wicket-request/src/main/java/org/apache/wicket/request/Url.java index 8d190ae..8393d7d 100755 --- a/wicket-request/src/main/java/org/apache/wicket/request/Url.java +++ b/wicket-request/src/main/java/org/apache/wicket/request/Url.java @@ -79,14 +79,15 @@ public class Url implements Serializable * * @author igor */ - public static enum StringMode { + public static enum StringMode + { /** local urls are rendered without the host name */ LOCAL, /** * full urls are written with hostname. if the hostname is not set or one of segments is * {@literal ..} an {@link IllegalStateException} is thrown. */ - FULL; + FULL } /** @@ -982,7 +983,7 @@ public class Url implements Serializable { if (getSegments().size() > 0) { - // strip the first non-folder segment + // strip the first non-folder segment (if it is not empty) getSegments().remove(getSegments().size() - 1); } @@ -1012,6 +1013,11 @@ public class Url implements Serializable } } + if (!getSegments().isEmpty() && relative.getSegments().isEmpty()) + { + getSegments().add(""); + } + // append the remaining relative segments getSegments().addAll(relative.getSegments()); http://git-wip-us.apache.org/repos/asf/wicket/blob/c073f4b2/wicket-request/src/test/java/org/apache/wicket/request/UrlTest.java ---------------------------------------------------------------------- diff --git a/wicket-request/src/test/java/org/apache/wicket/request/UrlTest.java b/wicket-request/src/test/java/org/apache/wicket/request/UrlTest.java index 0dbed56..527d4a8 100644 --- a/wicket-request/src/test/java/org/apache/wicket/request/UrlTest.java +++ b/wicket-request/src/test/java/org/apache/wicket/request/UrlTest.java @@ -492,6 +492,32 @@ public class UrlTest extends Assert } /** + * @see <a href="https://issues.apache.org/jira/browse/WICKET-4789">WICKET-4789</a> + */ + @Test + public void resolveRelative_EmptyTrailingSegmentInBase() + { + Url relative = Url.parse("./?0-1.ILinkListener-link"); + Url baseUrl = Url.parse("Home/"); + baseUrl.resolveRelative(relative); + + assertEquals("Home/?0-1.ILinkListener-link", baseUrl.toString()); + } + + /** + * @see <a href="https://issues.apache.org/jira/browse/WICKET-4789">WICKET-4789</a> + */ + @Test + public void resolveRelative_EmptyTrailingSegmentInBase2() + { + Url relative = Url.parse("./foo/?0-1.ILinkListener-link"); + Url baseUrl = Url.parse("Home/"); + baseUrl.resolveRelative(relative); + + assertEquals("Home/foo/?0-1.ILinkListener-link", baseUrl.toString()); + } + + /** * Tries to resolve a relative url against a base that has no segments */ @Test @@ -545,8 +571,7 @@ public class UrlTest extends Assert Url baseUrl = Url.parse("bar/baz"); baseUrl.resolveRelative(relative); - assertEquals("bar?a=b", baseUrl.toString()); - assertEquals("no empty segment", 1, baseUrl.getSegments().size()); + assertEquals("bar/?a=b", baseUrl.toString()); } /**
