Merge pull request #13 from ashokpanghal/issues/SLING-8341

SLING-8341 : find extra slashes and ignore redundant delimiteres
diff --git a/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java b/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java
index f7d3554..229525a 100644
--- a/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java
+++ b/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java
@@ -30,6 +30,7 @@
 import java.util.Set;
 import java.util.StringTokenizer;
 
+import org.apache.commons.lang3.StringUtils;
 import org.jetbrains.annotations.Nullable;
 import javax.jcr.Session;
 import javax.servlet.http.HttpServletRequest;
@@ -735,6 +736,9 @@
 
             final StringBuilder resolutionPath = new StringBuilder();
             final StringTokenizer tokener = new StringTokenizer(tokenizedPath, "/");
+            final int delimCount = StringUtils.countMatches(tokenizedPath,'/');
+            final int redundantDelimCount = delimCount - tokener.countTokens();
+
             while (resource != null && tokener.hasMoreTokens()) {
                 final String childNameRaw = tokener.nextToken();
 
@@ -771,7 +775,7 @@
             // uriPath = curPath + sling.resolutionPathInfo
             if (resource != null) {
                 final String path = resolutionPath.toString();
-                final String pathInfo = absPath.substring(path.length());
+                final String pathInfo = absPath.substring(path.length() + redundantDelimCount);
 
                 resource.getResourceMetadata().setResolutionPath(path);
                 resource.getResourceMetadata().setResolutionPathInfo(pathInfo);
diff --git a/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java b/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java
index 3124dbb..953cd89 100644
--- a/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java
+++ b/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java
@@ -150,7 +150,7 @@
         activator.resourceProviderTracker = resourceProviderTracker;
         activator.changeListenerWhiteboard = resourceChangeListenerWhiteboard;
         activator.serviceUserMapper = Mockito.mock(ServiceUserMapper.class);
-        handlers.add(createRPHandler(resourceProvider, "org.apache.sling.resourceresolver.impl.DummyTestProvider", 10L, "/single"));
+        handlers.add(createRPHandler(resourceProvider, "org.apache.sling.resourceresolver.impl.DummyTestProvider", 10L, "/"));
 
         // setup mapping resources at /etc/map to exercise vanity etc.
         // hmm, can't provide the resolver since its not up and ready.
@@ -555,6 +555,12 @@
 
         path = resourceResolver.map(request,"some/relative/path/test");
         Assert.assertEquals("some/relative/path/test", path);
+      
+        buildResource("/", EMPTY_RESOURCE_LIST, resourceResolver, resourceProvider);
+        buildResource("/single", EMPTY_RESOURCE_LIST, resourceResolver, resourceProvider);
+        buildResource("/single/test", EMPTY_RESOURCE_LIST, resourceResolver, resourceProvider);
+        path = resourceResolver.map("/single//test.html");
+        Assert.assertEquals("/single/test.html", path);
     }