You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by jo...@apache.org on 2022/09/24 17:42:17 UTC

[sling-org-apache-sling-servlets-resolver] 05/05: Remove the LocationIterator and its test, it is no longer needed

This is an automated email from the ASF dual-hosted git repository.

joerghoh pushed a commit to branch SLING-11558-remove-iterator
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-servlets-resolver.git

commit eaa89f155681be6a06162cb5d9c653415feb3f9a
Author: Jörg Hoh <jo...@joerghoh.de>
AuthorDate: Sat Sep 24 19:38:16 2022 +0200

    Remove the LocationIterator and its test, it is no longer needed
---
 .../resolver/internal/helper/LocationIterator.java | 252 ---------
 .../internal/helper/LocationIteratorTest.java      | 564 ---------------------
 2 files changed, 816 deletions(-)

diff --git a/src/main/java/org/apache/sling/servlets/resolver/internal/helper/LocationIterator.java b/src/main/java/org/apache/sling/servlets/resolver/internal/helper/LocationIterator.java
deleted file mode 100644
index f7fdc3c..0000000
--- a/src/main/java/org/apache/sling/servlets/resolver/internal/helper/LocationIterator.java
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.sling.servlets.resolver.internal.helper;
-
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import java.util.Set;
-
-import org.apache.sling.api.resource.Resource;
-import org.apache.sling.api.resource.ResourceResolver;
-import org.apache.sling.api.resource.ResourceUtil;
-import org.slf4j.LoggerFactory;
-
-/**
- * The <code>LocationIterator</code> provides access to an ordered collection
- * of absolute paths containing potential request handling. The primary order of
- * the collection is the resource type hierarchy with the base resource type at
- * the top. The secondary order is the search path retrieved from the resource
- * resolver.
- * <p>
- * Example: For a node type hierarchy "sample" > "super" > "default" and a
- * search path of [ "/apps", "/libs" ], the iterator would provide access to the
- * following list of paths:
- * <ol>
- * <li><code>/apps/sample</code></li>
- * <li><code>/libs/sample</code></li>
- * <li><code>/apps/super</code></li>
- * <li><code>/libs/super</code></li>
- * <li><code>/apps/default</code></li>
- * <li><code>/libs/default</code></li>
- * </ol>
- */
-public class LocationIterator implements Iterator<String> {
-
-    // The resource resolver used to find resource super types of
-    // resource types
-    private final ResourceResolver resolver;
-
-    // The base resource type to be used as a final entry if there is
-    // no more resource super type. This is kind of the java.lang.Object
-    // the resource type hierarchy.
-    private final String baseResourceType;
-
-    // The search path of the resource resolver
-    private final String[] searchPath;
-
-    // counter into the search path array
-    private int pathCounter;
-
-    // The resource type to use for the next iteration loop
-    private String resourceType;
-
-    // The first resource type to use
-    private final String firstResourceType;
-
-    // The first resource super type to use
-    private final String firstResourceSuperType;
-
-    // The current relative path generated from the resource type
-    private String relPath;
-
-    // the next absolute path to return from next(). This is null
-    // if there is no more location to return
-    private String nextLocation;
-
-    /** Set of used resource types to detect a circular resource type hierarchy. */
-    private final Set<String> usedResourceTypes = new HashSet<>();
-
-    /**
-     * Creates an instance of this iterator starting with a location built from
-     * the resource type of the <code>resource</code> and ending with the
-     * given <code>baseResourceType</code>.
-     *
-     * @param resourceType the initial resource type.
-     * @param resourceSuperType the initial resource super type.
-     * @param baseResourceType The base resource type.
-     * @param resolver The resource resolver
-     */
-    public LocationIterator(String resourceType, String resourceSuperType, String baseResourceType,
-            ResourceResolver resolver) {
-        this.resolver = resolver;
-        this.baseResourceType = baseResourceType;
-
-        String[] tmpPath = resolver.getSearchPath();
-        if (tmpPath.length == 0) {
-            tmpPath = new String[] { "/" };
-        }
-        searchPath = tmpPath;
-
-        this.firstResourceType = resourceType;
-        this.firstResourceSuperType = resourceSuperType;
-        // we start with the first resource type
-        this.resourceType = firstResourceType;
-
-        this.usedResourceTypes.add(this.resourceType);
-
-        nextLocation = seek();
-    }
-
-    /**
-     * Returns <code>true</code> if there is another entry
-     */
-    public boolean hasNext() {
-        return nextLocation != null;
-    }
-
-    /**
-     * Returns the next entry of this iterator.
-     *
-     * @throws NoSuchElementException if {@link #hasNext()} returns
-     *             <code>false</code>.
-     */
-    public String next() {
-        if (!hasNext()) {
-            throw new NoSuchElementException();
-        }
-
-        String result = nextLocation;
-        nextLocation = seek();
-        return result;
-    }
-
-    /**
-     * @throws UnsupportedOperationException
-     */
-    @Override
-    public void remove() {
-        throw new UnsupportedOperationException();
-    }
-
-    private String seek() {
-
-        if (relPath == null) {
-
-            if (resourceType == null) {
-                return null;
-            }
-
-            String typePath = ResourceUtil.resourceTypeToPath(resourceType);
-            if (typePath.startsWith("/")) {
-                resourceType = getResourceSuperType(resourceType);
-                return typePath;
-            }
-
-            relPath = typePath;
-        }
-
-        String result = searchPath[pathCounter].concat(relPath);
-
-        pathCounter++;
-        if (pathCounter >= searchPath.length) {
-            relPath = null;
-            resourceType = getResourceSuperType(resourceType);
-            pathCounter = 0;
-        }
-
-        return result;
-    }
-
-    /**
-     * Returns the resource super type of the given resource type:
-     * <ol>
-     * <li>If the resource type is the base resource type <code>null</code>
-     * is returned.</li>
-     * <li>If the resource type is the resource type of the resource the
-     * resource super type from the resource is returned.</li>
-     * <li>Otherwise the resource super type is tried to be found in the
-     * resource tree. If one is found, it is returned.</li>
-     * <li>Otherwise the base resource type is returned.</li>
-     * </ol>
-     */
-    private String getResourceSuperType(String resourceType) {
-
-        // if the current resource type is the default value, there are no more
-        if (resourceType.equals(baseResourceType)) {
-            return null;
-        }
-
-        // get the super type of the current resource type
-        String superType;
-        if (resourceType.equals(this.firstResourceType)
-                && this.firstResourceSuperType != null ) {
-            superType = this.firstResourceSuperType;
-        } else {
-            superType = getResourceSuperType(resolver, resourceType);
-        }
-
-        // detect circular dependency
-        if ( superType != null ) {
-            if ( this.usedResourceTypes.contains(superType) ) {
-                LoggerFactory.getLogger(this.getClass()).error("Circular dependency in resource type hierarchy detected! Check super types of {}", superType);
-                superType = null;
-            } else {
-                this.usedResourceTypes.add(superType);
-            }
-        }
-        // use default resource type if there is no super type any more
-        if (superType == null) {
-            superType = baseResourceType;
-        }
-
-        return superType;
-    }
-
-    // this method is largely duplicated from ResourceUtil
-    private String getResourceSuperType(final ResourceResolver resourceResolver,
-                                        final String resourceType) {
-        // normalize resource type to a path string
-        final String rtPath = ResourceUtil.resourceTypeToPath(resourceType);
-        // get the resource type resource and check its super type
-        String resourceSuperType = null;
-        // if the path is absolute, use it directly
-        if ( rtPath.startsWith("/") ) {
-            final String candidatePath = rtPath;
-
-            final Resource rtResource = resourceResolver.getResource(candidatePath);
-            if ( rtResource != null ) {
-                resourceSuperType = rtResource.getResourceSuperType();
-            }
-
-        } else {
-            // if the path is relative we use the search paths
-            for (final String path : this.searchPath) {
-                final String candidatePath = path + rtPath;
-                final Resource rtResource = resourceResolver.getResource(candidatePath);
-                if ( rtResource != null && rtResource.getResourceSuperType() != null ) {
-                    resourceSuperType = rtResource.getResourceSuperType();
-                    break;
-                }
-            }
-        }
-        return resourceSuperType;
-    }
-
-}
diff --git a/src/test/java/org/apache/sling/servlets/resolver/internal/helper/LocationIteratorTest.java b/src/test/java/org/apache/sling/servlets/resolver/internal/helper/LocationIteratorTest.java
deleted file mode 100644
index 1a43385..0000000
--- a/src/test/java/org/apache/sling/servlets/resolver/internal/helper/LocationIteratorTest.java
+++ /dev/null
@@ -1,564 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.sling.servlets.resolver.internal.helper;
-
-import static org.apache.sling.api.servlets.ServletResolverConstants.DEFAULT_RESOURCE_TYPE;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.sling.api.resource.PersistenceException;
-import org.apache.sling.api.resource.Resource;
-import org.apache.sling.api.resource.ResourceResolver;
-import org.apache.sling.api.resource.ResourceUtil;
-
-public class LocationIteratorTest extends HelperTestBase {
-
-    private LocationIterator getLocationIterator(final String resourceType,
-            final String resourceSuperType) {
-       return this.getLocationIterator(resourceType, resourceSuperType, DEFAULT_RESOURCE_TYPE);
-    }
-
-    private LocationIterator getLocationIterator(final String resourceType,
-            final String resourceSuperType,
-            final String baseResourceType) {
-        final LocationIterator li = new LocationIterator(resourceType,
-                resourceSuperType,
-                baseResourceType,
-                this.resourceResolver);
-        return li;
-    }
-
-    public void testSearchPathEmpty() {
-        // expect path gets { "/" }
-        resourceResolverOptions.setSearchPaths(null);
-
-        final Resource r = request.getResource();
-        LocationIterator li = getLocationIterator(r.getResourceType(),
-                r.getResourceSuperType());
-
-        // 1. /foo/bar
-        assertTrue(li.hasNext());
-        assertEquals("/" + resourceTypePath, li.next());
-
-        // 2. /sling/servlet/default
-        assertTrue(li.hasNext());
-        assertEquals("/" + DEFAULT_RESOURCE_TYPE, li.next());
-
-        // 3. finished
-        assertFalse(li.hasNext());
-    }
-
-    public void testSearchPath1Element() {
-        String root0 = "/apps/";
-        resourceResolverOptions.setSearchPaths(new String[] {
-                root0
-        });
-
-        final Resource r = request.getResource();
-        LocationIterator li = getLocationIterator(r.getResourceType(),
-                r.getResourceSuperType());
-
-        // 1. /apps/foo/bar
-        assertTrue(li.hasNext());
-        assertEquals(root0 + resourceTypePath, li.next());
-
-        // 2. /apps/sling/servlet/default
-        assertTrue(li.hasNext());
-        assertEquals(root0 + DEFAULT_RESOURCE_TYPE, li.next());
-
-        // 3. finished
-        assertFalse(li.hasNext());
-    }
-
-    public void testSearchPath2Elements() {
-        String root0 = "/apps/";
-        String root1 = "/libs/";
-        resourceResolverOptions.setSearchPaths(new String[] {
-                root0,
-                root1
-        });
-
-        final Resource r = request.getResource();
-        LocationIterator li = getLocationIterator(r.getResourceType(),
-                r.getResourceSuperType());
-
-        // 1. /apps/foo/bar
-        assertTrue(li.hasNext());
-        assertEquals(root0 + resourceTypePath, li.next());
-
-        // 2. /libs/foo/bar
-        assertTrue(li.hasNext());
-        assertEquals(root1 + resourceTypePath, li.next());
-
-        // 3. /apps/sling/servlet/default
-        assertTrue(li.hasNext());
-        assertEquals(root0 + DEFAULT_RESOURCE_TYPE, li.next());
-
-        // 4. /libs/sling/servlet/default
-        assertTrue(li.hasNext());
-        assertEquals(root1 + DEFAULT_RESOURCE_TYPE, li.next());
-
-        // 5. finished
-        assertFalse(li.hasNext());
-    }
-
-    /**
-     * Replace a resource with a different type
-     * 
-     * @param res the resource to replace
-     * @param newResourceType the new resource type, or null to not change it
-     * @param newResourceSuperType the new resource super type, or null to not change it
-     * @return the new resource
-     */
-    protected void replaceResource(String newResourceType, String newResourceSuperType) {
-        @SuppressWarnings("unchecked")
-        Map<String, Object> props = new HashMap<>(resource.adaptTo(Map.class));
-        if (newResourceType != null) {
-            props.put(ResourceResolver.PROPERTY_RESOURCE_TYPE, newResourceType);
-        }
-        if (newResourceSuperType != null) {
-            props.put("sling:resourceSuperType", newResourceSuperType);
-        }
-        Resource r = addOrReplaceResource(resourceResolver, resource.getPath(), props);
-        request.setResource(r);
-    }
-
-    public void testSearchPathEmptyAbsoluteType() {
-        // expect path gets { "/" }
-        resourceResolverOptions.setSearchPaths(null);
-
-        // absolute resource type
-        resourceType = "/foo/bar";
-        resourceTypePath = ResourceUtil.resourceTypeToPath(resourceType);
-        replaceResource(resourceType, null);
-
-        final Resource r = request.getResource();
-        LocationIterator li = getLocationIterator(r.getResourceType(),
-                r.getResourceSuperType());
-
-        // 1. /foo/bar
-        assertTrue(li.hasNext());
-        assertEquals(resourceTypePath, li.next());
-
-        // 2. /sling/servlet/default
-        assertTrue(li.hasNext());
-        assertEquals("/" + DEFAULT_RESOURCE_TYPE, li.next());
-
-        // 3. finished
-        assertFalse(li.hasNext());
-    }
-
-    public void testSearchPath1ElementAbsoluteType() {
-        String root0 = "/apps/";
-        resourceResolverOptions.setSearchPaths(new String[] {
-                root0
-        });
-
-        // absolute resource type
-        resourceType = "/foo/bar";
-        resourceTypePath = ResourceUtil.resourceTypeToPath(resourceType);
-        replaceResource(resourceType, null);
-
-        final Resource r = request.getResource();
-        LocationIterator li = getLocationIterator(r.getResourceType(),
-                r.getResourceSuperType());
-
-        // 1. /foo/bar
-        assertTrue(li.hasNext());
-        assertEquals(resourceTypePath, li.next());
-
-        // 2. /apps/sling/servlet/default
-        assertTrue(li.hasNext());
-        assertEquals(root0 + DEFAULT_RESOURCE_TYPE, li.next());
-
-        // 3. finished
-        assertFalse(li.hasNext());
-    }
-
-    public void testSearchPath2ElementsAbsoluteType() {
-        String root0 = "/apps/";
-        String root1 = "/libs/";
-        resourceResolverOptions.setSearchPaths(new String[] {
-                root0,
-                root1
-        });
-
-        // absolute resource type
-        resourceType = "/foo/bar";
-        resourceTypePath = ResourceUtil.resourceTypeToPath(resourceType);
-        replaceResource(resourceType, null);
-
-        final Resource r = request.getResource();
-        LocationIterator li = getLocationIterator(r.getResourceType(),
-                r.getResourceSuperType());
-
-        // 1. /foo/bar
-        assertTrue(li.hasNext());
-        assertEquals(resourceTypePath, li.next());
-
-        // 2. /apps/sling/servlet/default
-        assertTrue(li.hasNext());
-        assertEquals(root0 + DEFAULT_RESOURCE_TYPE, li.next());
-
-        // 3. /libs/sling/servlet/default
-        assertTrue(li.hasNext());
-        assertEquals(root1 + DEFAULT_RESOURCE_TYPE, li.next());
-
-        // 4. finished
-        assertFalse(li.hasNext());
-    }
-
-    public void testSearchPathEmptyWithSuper() {
-        // expect path gets { "/" }
-        resourceResolverOptions.setSearchPaths(null);
-
-        // set resource super type
-        resourceSuperType = "foo:superBar";
-        resourceSuperTypePath = ResourceUtil.resourceTypeToPath(resourceSuperType);
-        replaceResource(null, resourceSuperType);
-
-        final Resource r = request.getResource();
-        LocationIterator li = getLocationIterator(r.getResourceType(),
-                r.getResourceSuperType());
-
-        // 1. /foo/bar
-        assertTrue(li.hasNext());
-        assertEquals("/" + resourceTypePath, li.next());
-
-        // 2. /foo/superBar
-        assertTrue(li.hasNext());
-        assertEquals("/" + resourceSuperTypePath, li.next());
-
-        // 3. /sling/servlet/default
-        assertTrue(li.hasNext());
-        assertEquals("/" + DEFAULT_RESOURCE_TYPE, li.next());
-
-        // 4. finished
-        assertFalse(li.hasNext());
-    }
-
-    public void testSearchPath1ElementWithSuper() {
-        String root0 = "/apps/";
-        resourceResolverOptions.setSearchPaths(new String[] {
-                root0
-        });
-
-        // set resource super type
-        resourceSuperType = "foo:superBar";
-        resourceSuperTypePath = ResourceUtil.resourceTypeToPath(resourceSuperType);
-        replaceResource(null, resourceSuperType);
-
-        final Resource r = request.getResource();
-        LocationIterator li = getLocationIterator(r.getResourceType(),
-                r.getResourceSuperType());
-
-        // 1. /apps/foo/bar
-        assertTrue(li.hasNext());
-        assertEquals(root0 + resourceTypePath, li.next());
-
-        // 2. /apps/foo/superBar
-        assertTrue(li.hasNext());
-        assertEquals(root0 + resourceSuperTypePath, li.next());
-
-        // 3. /apps/sling/servlet/default
-        assertTrue(li.hasNext());
-        assertEquals(root0 + DEFAULT_RESOURCE_TYPE, li.next());
-
-        // 4. finished
-        assertFalse(li.hasNext());
-    }
-
-    public void testSearchPath2ElementsWithSuper() {
-        String root0 = "/apps/";
-        String root1 = "/libs/";
-        resourceResolverOptions.setSearchPaths(new String[] {
-                root0,
-                root1
-        });
-
-        // set resource super type
-        resourceSuperType = "foo:superBar";
-        resourceSuperTypePath = ResourceUtil.resourceTypeToPath(resourceSuperType);
-        replaceResource(null, resourceSuperType);
-
-        final Resource r = request.getResource();
-        LocationIterator li = getLocationIterator(r.getResourceType(),
-                r.getResourceSuperType());
-
-        // 1. /apps/foo/bar
-        assertTrue(li.hasNext());
-        assertEquals(root0 + resourceTypePath, li.next());
-
-        // 2. /libs/foo/bar
-        assertTrue(li.hasNext());
-        assertEquals(root1 + resourceTypePath, li.next());
-
-        // 3. /apps/foo/superBar
-        assertTrue(li.hasNext());
-        assertEquals(root0 + resourceSuperTypePath, li.next());
-
-        // 4. /libs/foo/superBar
-        assertTrue(li.hasNext());
-        assertEquals(root1 + resourceSuperTypePath, li.next());
-
-        // 5. /apps/sling/servlet/default
-        assertTrue(li.hasNext());
-        assertEquals(root0 + DEFAULT_RESOURCE_TYPE, li.next());
-
-        // 6. /libs/sling/servlet/default
-        assertTrue(li.hasNext());
-        assertEquals(root1 + DEFAULT_RESOURCE_TYPE, li.next());
-
-        // 7. finished
-        assertFalse(li.hasNext());
-    }
-
-    public void testSearchPathEmptyAbsoluteTypeWithSuper() {
-        // expect path gets { "/" }
-        resourceResolverOptions.setSearchPaths(null);
-
-        // absolute resource type
-        resourceType = "/foo/bar";
-        resourceTypePath = ResourceUtil.resourceTypeToPath(resourceType);
-
-        // set resource super type
-        resourceSuperType = "foo:superBar";
-        resourceSuperTypePath = ResourceUtil.resourceTypeToPath(resourceSuperType);
-        replaceResource(resourceType, resourceSuperType);
-
-        final Resource r = request.getResource();
-        LocationIterator li = getLocationIterator(r.getResourceType(),
-                r.getResourceSuperType());
-
-        // 1. /foo/bar
-        assertTrue(li.hasNext());
-        assertEquals(resourceTypePath, li.next());
-
-        // 2. /foo/superBar
-        assertTrue(li.hasNext());
-        assertEquals("/" + resourceSuperTypePath, li.next());
-
-        // 3. /sling/servlet/default
-        assertTrue(li.hasNext());
-        assertEquals("/" + DEFAULT_RESOURCE_TYPE, li.next());
-
-        // 4. finished
-        assertFalse(li.hasNext());
-    }
-
-    public void testSearchPath1ElementAbsoluteTypeWithSuper() {
-        String root0 = "/apps/";
-        resourceResolverOptions.setSearchPaths(new String[] {
-                root0
-        });
-
-        // absolute resource type
-        resourceType = "/foo/bar";
-        resourceTypePath = ResourceUtil.resourceTypeToPath(resourceType);
-
-        // set resource super type
-        resourceSuperType = "foo:superBar";
-        resourceSuperTypePath = ResourceUtil.resourceTypeToPath(resourceSuperType);
-        replaceResource(resourceType, resourceSuperType);
-
-        final Resource r = request.getResource();
-        LocationIterator li = getLocationIterator(r.getResourceType(),
-                r.getResourceSuperType());
-
-        // 1. /foo/bar
-        assertTrue(li.hasNext());
-        assertEquals(resourceTypePath, li.next());
-
-        // 2. /apps/foo/superBar
-        assertTrue(li.hasNext());
-        assertEquals(root0 + resourceSuperTypePath, li.next());
-
-        // 3. /apps/sling/servlet/default
-        assertTrue(li.hasNext());
-        assertEquals(root0 + DEFAULT_RESOURCE_TYPE, li.next());
-
-        // 4. finished
-        assertFalse(li.hasNext());
-    }
-
-    public void testSearchPath2ElementsAbsoluteTypeWithSuper() {
-        String root0 = "/apps/";
-        String root1 = "/libs/";
-        resourceResolverOptions.setSearchPaths(new String[] {
-                root0,
-                root1
-        });
-
-        // absolute resource type
-        resourceType = "/foo/bar";
-        resourceTypePath = ResourceUtil.resourceTypeToPath(resourceType);
-
-        // set resource super type
-        resourceSuperType = "foo:superBar";
-        resourceSuperTypePath = ResourceUtil.resourceTypeToPath(resourceSuperType);
-        replaceResource(resourceType, resourceSuperType);
-
-        final Resource r = request.getResource();
-        LocationIterator li = getLocationIterator(r.getResourceType(),
-                r.getResourceSuperType());
-
-        // 1. /foo/bar
-        assertTrue(li.hasNext());
-        assertEquals(resourceTypePath, li.next());
-
-        // 2. /apps/foo/superBar
-        assertTrue(li.hasNext());
-        assertEquals(root0 + resourceSuperTypePath, li.next());
-
-        // 3. /libs/foo/superBar
-        assertTrue(li.hasNext());
-        assertEquals(root1 + resourceSuperTypePath, li.next());
-
-        // 4. /apps/sling/servlet/default
-        assertTrue(li.hasNext());
-        assertEquals(root0 + DEFAULT_RESOURCE_TYPE, li.next());
-
-        // 5. /libs/sling/servlet/default
-        assertTrue(li.hasNext());
-        assertEquals(root1 + DEFAULT_RESOURCE_TYPE, li.next());
-
-        // 6. finished
-        assertFalse(li.hasNext());
-    }
-
-    public void testScriptNameWithoutResourceType() {
-        String root0 = "/apps/";
-        String root1 = "/libs/";
-        resourceResolverOptions.setSearchPaths(new String[] {
-                root0,
-                root1
-        });
-        LocationIterator li = getLocationIterator("",
-                null,
-                "");
-        assertTrue(li.hasNext());
-        assertEquals("/apps/", li.next());
-        assertTrue(li.hasNext());
-        assertEquals("/libs/", li.next());
-        assertFalse(li.hasNext());
-    }
-
-    public void testScriptNameWithResourceType() {
-        String root0 = "/apps/";
-        String root1 = "/libs/";
-        resourceResolverOptions.setSearchPaths(new String[] {
-                root0,
-                root1
-        });
-        LocationIterator li = getLocationIterator("a/b",
-                null);
-        assertTrue(li.hasNext());
-        assertEquals(root0 + "a/b", li.next());
-        assertTrue(li.hasNext());
-        assertEquals(root1 + "a/b", li.next());
-        assertTrue(li.hasNext());
-        assertEquals(root0 + DEFAULT_RESOURCE_TYPE, li.next());
-        assertTrue(li.hasNext());
-        assertEquals(root1 + DEFAULT_RESOURCE_TYPE, li.next());
-        assertFalse(li.hasNext());
-    }
-
-    public void testScriptNameWithResourceTypeAndSuperType() {
-        String root0 = "/apps/";
-        String root1 = "/libs/";
-        resourceResolverOptions.setSearchPaths(new String[] {
-                root0,
-                root1
-        });
-        LocationIterator li = getLocationIterator("a/b",
-                "c/d");
-        assertTrue(li.hasNext());
-        assertEquals(root0 + "a/b", li.next());
-        assertTrue(li.hasNext());
-        assertEquals(root1 + "a/b", li.next());
-        assertTrue(li.hasNext());
-        assertEquals(root0 + "c/d", li.next());
-        assertTrue(li.hasNext());
-        assertEquals(root1 + "c/d", li.next());
-        assertTrue(li.hasNext());
-        assertEquals(root0 + DEFAULT_RESOURCE_TYPE, li.next());
-        assertTrue(li.hasNext());
-        assertEquals(root1 + DEFAULT_RESOURCE_TYPE, li.next());
-        assertFalse(li.hasNext());
-    }
-
-    public void testCircularResourceTypeHierarchy() {
-        final String root1 = "/libs/";
-        resourceResolverOptions.setSearchPaths(new String[] {
-                root1
-        });
-
-        // resource type and super type for start resource
-        final String resourceType = "foo/bar";
-        final String resourceSuperType = "foo/check1";
-        final String resourceSuperType2 = "foo/check2";
-
-        String resource2Path = root1 + resourceSuperType;
-        Map<String, Object> resource2Props = new HashMap<>();
-        resource2Props.put(ResourceResolver.PROPERTY_RESOURCE_TYPE, resourceType);
-        resource2Props.put("sling:resourceSuperType", resourceSuperType2);
-        try {
-            resourceResolver.create(getOrCreateParentResource(resourceResolver, resource2Path),
-                    ResourceUtil.getName(resource2Path),
-                    resource2Props);
-        } catch (PersistenceException e) {
-            fail("Did not expect a persistence exception: " + e.getMessage());
-        }
-
-        String resource3Path = root1 + resourceSuperType2;
-        Map<String, Object> resource3Props = new HashMap<>();
-        resource3Props.put(ResourceResolver.PROPERTY_RESOURCE_TYPE, resourceType);
-        resource3Props.put("sling:resourceSuperType", resourceType);
-        try {
-            resourceResolver.create(getOrCreateParentResource(resourceResolver, resource3Path),
-                    ResourceUtil.getName(resource3Path),
-                    resource3Props);
-        } catch (PersistenceException e) {
-            fail("Did not expect a persistence exception: " + e.getMessage());
-        }
-
-        LocationIterator li = getLocationIterator(resourceType,
-                resourceSuperType);
-
-        // 1. /libs/foo/bar
-        assertTrue(li.hasNext());
-        assertEquals(root1 + resourceType, li.next());
-
-        // 1. /libs/foo/check1
-        assertTrue(li.hasNext());
-        assertEquals(root1 + resourceSuperType, li.next());
-
-        // 3. /libs/foo/check2
-        assertTrue(li.hasNext());
-        assertEquals(root1 + resourceSuperType2, li.next());
-
-        // 4. /libs/sling/servlet/default
-        assertTrue(li.hasNext());
-        assertEquals(root1 + DEFAULT_RESOURCE_TYPE, li.next());
-
-        // 5. finished
-        assertFalse(li.hasNext());
-    }
-}