Repository: wicket
Updated Branches:
  refs/heads/wicket-6.x 482c595f5 -> 6b906d53a


WICKET-5698 WebApplication#unmount() unmounts the whole compound mapper if some 
of its inner ones matches

(cherry picked from commit f45ce896d02aeda3c09d56bc4ceac425929973a1)


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/6b906d53
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/6b906d53
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/6b906d53

Branch: refs/heads/wicket-6.x
Commit: 6b906d53a917257454cc5f10c5b1d91b321ce8ed
Parents: 482c595
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:41:33 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/6b906d53/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 13785e3..c950279 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/6b906d53/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 0277d01..e449362 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
@@ -33,9 +33,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()
        {
@@ -61,6 +58,38 @@ public class CompoundRequestMapperTest extends Assert
        }
 
        /**
+        * 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);
+       }
+
+       /**
         * Test {@link MapperWithScore#compareTo(MapperWithScore)}.
         */
        @Test

Reply via email to