/* * 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.testing.mock.jcr; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; import org.junit.Test; public class ResourceUtilTest { @Test public void testResolveRelativeSegments() { assertEquals("/", ResourceUtil.normalize("/")); assertEquals("/", ResourceUtil.normalize("///")); assertEquals("/a/b/c", ResourceUtil.normalize("/a//b/c")); assertEquals("/a/b/c", ResourceUtil.normalize("/a/b//c")); assertEquals("/a/b/c", ResourceUtil.normalize("/a///b///c")); assertEquals("/a/b/c", ResourceUtil.normalize("/a/b/c/")); assertEquals("/a/b/c", ResourceUtil.normalize("/a/b/c//")); assertEquals("/a/b/c", ResourceUtil.normalize("/a/b/c///")); assertEquals("/az/bz/cz", ResourceUtil.normalize("/az//bz/cz")); assertEquals("/az/bz/cz", ResourceUtil.normalize("/az/bz//cz")); assertEquals("/az/bz/cz", ResourceUtil.normalize("/az///bz///cz")); assertEquals("/az/bz/cz", ResourceUtil.normalize("/az/bz/cz/")); assertEquals("/az/bz/cz", ResourceUtil.normalize("/az/bz/cz//")); assertEquals("/az/bz/cz", ResourceUtil.normalize("/az/bz/cz///")); assertEquals("/a", ResourceUtil.normalize("/a")); assertEquals("/a", ResourceUtil.normalize("//a")); assertEquals("/a", ResourceUtil.normalize("///a")); assertEquals("/az", ResourceUtil.normalize("/az")); assertEquals("/az", ResourceUtil.normalize("//az")); assertEquals("/az", ResourceUtil.normalize("///az")); assertEquals("/", ResourceUtil.normalize("/.")); assertEquals("/a", ResourceUtil.normalize("/a/.")); assertEquals("/a", ResourceUtil.normalize("/./a")); assertEquals("/a/b", ResourceUtil.normalize("/a/./b")); assertEquals("/a/b", ResourceUtil.normalize("/a/b/.")); assertEquals("/a/b", ResourceUtil.normalize("/a/./b/.")); assertEquals("/", ResourceUtil.normalize("/.")); assertEquals("/az", ResourceUtil.normalize("/az/.")); assertEquals("/az", ResourceUtil.normalize("/./az")); assertEquals("/az/bz", ResourceUtil.normalize("/az/./bz")); assertEquals("/az/bz", ResourceUtil.normalize("/az/bz/.")); assertEquals("/az/bz", ResourceUtil.normalize("/az/./bz/.")); assertNull(ResourceUtil.normalize("/..")); assertNull(ResourceUtil.normalize("/..")); assertEquals("/", ResourceUtil.normalize("/a/..")); assertEquals("/a", ResourceUtil.normalize("/a/b/..")); assertEquals("/", ResourceUtil.normalize("/a/b/../..")); assertNull(ResourceUtil.normalize("/a/b/../../..")); assertNull(ResourceUtil.normalize("/..")); assertNull(ResourceUtil.normalize("/..")); assertEquals("/", ResourceUtil.normalize("/az/..")); assertEquals("/az", ResourceUtil.normalize("/az/bz/..")); assertEquals("/", ResourceUtil.normalize("/az/bz/../..")); assertNull(ResourceUtil.normalize("/az/bz/../../..")); assertEquals("/b", ResourceUtil.normalize("/a/../b")); assertEquals("/a/c", ResourceUtil.normalize("/a/b/../c")); assertEquals("/c", ResourceUtil.normalize("/a/b/../../c")); assertNull(ResourceUtil.normalize("/a/b/../../../c")); assertEquals("/bz", ResourceUtil.normalize("/az/../bz")); assertEquals("/az/cz", ResourceUtil.normalize("/az/bz/../cz")); assertEquals("/cz", ResourceUtil.normalize("/az/bz/../../cz")); assertNull(ResourceUtil.normalize("/az/bz/../../../cz")); assertEquals("/...", ResourceUtil.normalize("/...")); assertEquals("/a/...", ResourceUtil.normalize("/a/...")); assertEquals("/a/b/...", ResourceUtil.normalize("/a/b/...")); assertEquals("/az/...", ResourceUtil.normalize("/az/...")); assertEquals("/az/bz/...", ResourceUtil.normalize("/az/bz/...")); try { ResourceUtil.normalize(null); fail("Resolving null expects NullPointerException"); } catch (NullPointerException npe) { // expected } } @Test public void testResolveRelativeSegmentsRelative() { assertEquals("a/b", ResourceUtil.normalize("a/b")); assertEquals("a", ResourceUtil.normalize("a/b/..")); assertEquals("b", ResourceUtil.normalize("a/../b")); assertEquals("a/c", ResourceUtil.normalize("a/b/../c")); assertEquals("c", ResourceUtil.normalize("a/b/../../c")); assertEquals("", ResourceUtil.normalize("a/b/../..")); assertEquals("a/c/d", ResourceUtil.normalize("a/b/../c/d")); assertNull(ResourceUtil.normalize("a/b/../../../c")); assertEquals("a/b/c", ResourceUtil.normalize("a/b/c")); assertEquals("az/bz/cz", ResourceUtil.normalize("az/bz/cz")); assertEquals("", ResourceUtil.normalize("")); } @Test public void testGetParent() { assertNull(ResourceUtil.getParent("/")); assertNull(ResourceUtil.getParent("/..")); assertEquals("/", ResourceUtil.getParent("/b")); assertEquals("b/c", ResourceUtil.getParent("b/c/d")); assertEquals("/b/c", ResourceUtil.getParent("/b/c/d")); assertNull(ResourceUtil.getParent("b")); assertNull(ResourceUtil.getParent("/b/..")); assertEquals("security:/", ResourceUtil.getParent("security:/b")); assertEquals("security:/b", ResourceUtil.getParent("security:/b/c")); assertEquals("security:/b/c", ResourceUtil.getParent("security:/b/c/d")); } @Test public void testGetName() { assertEquals("", ResourceUtil.getName("/")); assertEquals("", ResourceUtil.getName("/a/..")); assertEquals("c", ResourceUtil.getName("c")); assertEquals("c", ResourceUtil.getName("/c")); assertEquals("c", ResourceUtil.getName("b/c")); assertEquals("c", ResourceUtil.getName("/b/c")); assertEquals("c", ResourceUtil.getName("b/c/")); assertEquals("c", ResourceUtil.getName("/b/c/")); assertEquals("b", ResourceUtil.getName("b/c/..")); assertEquals("b", ResourceUtil.getName("/b/c/..")); assertEquals("", ResourceUtil.getName("/b/c/../..")); } @Test public void testGetParentLevel() throws Exception { boolean caughtNullPointerException = false; try { ResourceUtil.getParent(null, 4); } catch (NullPointerException e) { // Expected exception caughtNullPointerException = true; } catch (Exception e) { fail("Expected NullPointerException, but caught " + e.getClass().getName() + " instead."); } if (!caughtNullPointerException) { fail("Expected NullPointerException, but no exception was thrown."); } boolean caughtIllegalArgumentException = false; try { ResourceUtil.getParent("/a/b", -2); } catch (IllegalArgumentException e) { // Expected exception caughtIllegalArgumentException = true; } catch (Exception e) { fail("Expected IllegalArgumentException, but caught " + e.getClass().getName() + " instead."); } if (!caughtIllegalArgumentException) { fail("Expected IllegalArgumentException, but no exception was thrown."); } assertNull(ResourceUtil.getParent("/a", 4)); assertNull(ResourceUtil.getParent("/", 1)); assertNull(ResourceUtil.getParent("b/c", 2)); assertNull(ResourceUtil.getParent("/b/..", 1)); assertNull(ResourceUtil.getParent("b", 1)); assertNull(ResourceUtil.getParent("", 3)); assertNull(ResourceUtil.getParent("/..", 1)); assertNull(ResourceUtil.getParent("security:/b", 2)); assertNull(ResourceUtil.getParent("/b///", 2)); assertEquals("", ResourceUtil.getParent("", 0)); assertEquals("b", ResourceUtil.getParent("b", 0)); assertEquals("/", ResourceUtil.getParent("/", 0)); assertEquals("/a/b", ResourceUtil.getParent("/a/b", 0)); assertEquals("security:/b", ResourceUtil.getParent("security:/b", 0)); assertEquals("/", ResourceUtil.getParent("/b", 1)); assertEquals("b", ResourceUtil.getParent("b/c", 1)); assertEquals("b/c", ResourceUtil.getParent("b/c/d", 1)); assertEquals("/b/c", ResourceUtil.getParent("/b/c/d", 1)); assertEquals("security:/", ResourceUtil.getParent("security:/b", 1)); assertEquals("security:/b", ResourceUtil.getParent("security:/b/c", 1)); assertEquals("security:/b/c", ResourceUtil.getParent("security:/b/c/d", 1)); assertEquals("b", ResourceUtil.getParent("b/c/d", 2)); assertEquals("b/c", ResourceUtil.getParent("b/c/d/e", 2)); assertEquals("/", ResourceUtil.getParent("/b/c/d", 3)); assertEquals("/", ResourceUtil.getParent("/b///", 1)); } }