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;

Reply via email to