Repository: wicket Updated Branches: refs/heads/master ad1b70e2f -> f45ce896d
WICKET-5698 WebApplication#unmount() unmounts the whole compound mapper if some of its inner ones matches Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/f45ce896 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/f45ce896 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/f45ce896 Branch: refs/heads/master Commit: f45ce896d02aeda3c09d56bc4ceac425929973a1 Parents: ad1b70e Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Mon Sep 22 10:38:14 2014 +0200 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Mon Sep 22 10:38:14 2014 +0200 ---------------------------------------------------------------------- .../request/mapper/CompoundRequestMapper.java | 7 +++- .../mapper/CompoundRequestMapperTest.java | 35 ++++++++++++++++++-- 2 files changed, 38 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/f45ce896/wicket-request/src/main/java/org/apache/wicket/request/mapper/CompoundRequestMapper.java ---------------------------------------------------------------------- diff --git a/wicket-request/src/main/java/org/apache/wicket/request/mapper/CompoundRequestMapper.java b/wicket-request/src/main/java/org/apache/wicket/request/mapper/CompoundRequestMapper.java index bbd6277..94635b3 100644 --- a/wicket-request/src/main/java/org/apache/wicket/request/mapper/CompoundRequestMapper.java +++ b/wicket-request/src/main/java/org/apache/wicket/request/mapper/CompoundRequestMapper.java @@ -251,7 +251,12 @@ public class CompoundRequestMapper implements ICompoundRequestMapper for (IRequestMapper mapper : this) { - if (mapper.mapRequest(request) != null) + if (mapper instanceof ICompoundRequestMapper) + { + ICompoundRequestMapper inner = (ICompoundRequestMapper) mapper; + inner.unmount(path); + } + else if (mapper.mapRequest(request) != null) { remove(mapper); } http://git-wip-us.apache.org/repos/asf/wicket/blob/f45ce896/wicket-request/src/test/java/org/apache/wicket/request/mapper/CompoundRequestMapperTest.java ---------------------------------------------------------------------- diff --git a/wicket-request/src/test/java/org/apache/wicket/request/mapper/CompoundRequestMapperTest.java b/wicket-request/src/test/java/org/apache/wicket/request/mapper/CompoundRequestMapperTest.java index a169dfc..93a281e 100644 --- a/wicket-request/src/test/java/org/apache/wicket/request/mapper/CompoundRequestMapperTest.java +++ b/wicket-request/src/test/java/org/apache/wicket/request/mapper/CompoundRequestMapperTest.java @@ -35,9 +35,6 @@ public class CompoundRequestMapperTest extends Assert private static final String MOUNT_PATH_2 = "mount/path/2"; private static final String MOUNT_PATH_1 = "mount/path/1"; - /** - * - */ @Test public void unmount() { @@ -62,6 +59,38 @@ public class CompoundRequestMapperTest extends Assert compound.mapRequest(compound.createRequest(Url.parse(MOUNT_PATH_3))) instanceof EmptyRequestHandler); } + /** + * https://issues.apache.org/jira/browse/WICKET-5698 + */ + @Test + public void unmountNested() + { + CompoundRequestMapper compound = new CompoundRequestMapper(); + + CompoundRequestMapper nestedCompound = new CompoundRequestMapper(); + compound.add(nestedCompound); + + nestedCompound.add(new MountMapper(MOUNT_PATH_1, new EmptyRequestHandler())); + nestedCompound.add(new MountMapper(MOUNT_PATH_2, new EmptyRequestHandler())); + nestedCompound.add(new MountMapper(MOUNT_PATH_3, new EmptyRequestHandler())); + + assertEquals(1, compound.size()); + assertEquals(3, nestedCompound.size()); + + compound.unmount(MOUNT_PATH_2); + assertEquals(1, compound.size()); + assertEquals(2, nestedCompound.size()); + + assertTrue( + "Mount path 1 should match", + compound.mapRequest(compound.createRequest(Url.parse(MOUNT_PATH_1))) instanceof EmptyRequestHandler); + assertNull("Mount path 2 should not match", + compound.mapRequest(compound.createRequest(Url.parse(MOUNT_PATH_2)))); + assertTrue( + "Mount path 3 should match", + compound.mapRequest(compound.createRequest(Url.parse(MOUNT_PATH_3))) instanceof EmptyRequestHandler); + } + private static class MountMapper implements IRequestMapper { private final String path;
