package org.apache.sling.jcr.resource.internal;

import javax.jcr.Node;
import org.apache.sling.commons.testing.jcr.RepositoryTestBase;
import org.apache.sling.jcr.resource.JcrResourceUtil;

/**
 * Test of JcrResourceUtil.
 */
public class JcrResourceUtilTest extends RepositoryTestBase {
    private String rootPath;

    private Node rootNode;

    @Override
    protected void setUp() throws Exception {
        super.setUp();

        rootPath = "/test" + System.currentTimeMillis();
        rootNode = getSession().getRootNode().addNode(rootPath.substring(1),
                "nt:unstructured");
        session.save();
    }

    @Override
    protected void tearDown() throws Exception {
        if (rootNode != null) {
            rootNode.remove();
            session.save();
        }

        super.tearDown();
    }

    public void testCreatePathRootExists() throws Exception {
        String pathToCreate = rootPath + "/a/b/c";
        Node created = JcrResourceUtil.createPath(pathToCreate, "nt:unstructured", "nt:unstructured", session, true);
        assertNotNull(created);
        assertEquals(created.getPath(), pathToCreate);

        //test appending the path
        pathToCreate = pathToCreate + "/d";
        created = JcrResourceUtil.createPath(pathToCreate, "nt:unstructured", "nt:unstructured", session, true);

        assertNotNull(created);
        assertEquals(created.getPath(), pathToCreate);
        assertTrue(session.itemExists(pathToCreate));
    }

    public void testCreateRoot() throws Exception {
        String pathToCreate = "/";
        Node created = JcrResourceUtil.createPath(pathToCreate, "nt:unstructured", "nt:unstructured", session, true);

        assertNotNull(created);

        assertEquals(created.getPath(), pathToCreate);
    }


    public void testCreatePathThatExists() throws Exception {
        String pathToCreate = rootPath + "/a/b/c";
        Node created = JcrResourceUtil.createPath(pathToCreate, "nt:unstructured", "nt:unstructured", session, true);
        assertNotNull(created);
        assertEquals(created.getPath(), pathToCreate);

        created = JcrResourceUtil.createPath(pathToCreate, "nt:unstructured", "nt:unstructured", session, true);

        assertNotNull(created);
        assertEquals(created.getPath(), pathToCreate);
        assertTrue(session.itemExists(pathToCreate));
    }

    public void testCreatePathBoundaryCase() throws Exception {
        String pathToCreate = "/a";
        Node created = JcrResourceUtil.createPath(pathToCreate, "nt:unstructured", "nt:unstructured", session, true);
        assertNotNull(created);
        assertEquals(created.getPath(), pathToCreate);
        assertTrue(session.itemExists(pathToCreate));
    }

    public void testCreatePathNodeVariant() throws Exception {
        String pathToCreate = rootPath + "/a/b/c";
        Node created = JcrResourceUtil.createPath(pathToCreate, "nt:unstructured", "nt:unstructured", session, true);
        assertNotNull(created);
        assertEquals(created.getPath(), pathToCreate);

        //test appending the path
        created = JcrResourceUtil.createPath(created, "d/e", "nt:unstructured", "nt:unstructured", true);

        pathToCreate =  pathToCreate + "/d/e";
        assertNotNull(created);
        assertEquals(created.getPath(), pathToCreate);
        assertTrue(session.itemExists(pathToCreate));
    }
}

@@ -1,8 +1,827 @@
+/*%0D%0A * Licensed to the Apache Software Foundation (ASF) under one or more%0D%0A * contributor license agreements.  See the NOTICE file distributed with%0D%0A * this work for additional information regarding copyright ownership.%0D%0A * The ASF licenses this file to You under the Apache License, Version 2.0%0D%0A * (the %22License%22); you may not use this file except in compliance with%0D%0A * the License.  You may obtain a copy of the License at%0D%0A *%0D%0A *      http://www.apache.org/licenses/LICENSE-2.0%0D%0A *%0D%0A * Unless required by applicable law or agreed to in writing, software%0D%0A * distributed under the License is distributed on an %22AS IS%22 BASIS,%0D%0A * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.%0D%0A * See the License for the specific language governing permissions and%0D%0A * limitations under the License.%0D%0A */%0D%0A
 package 
@@ -883,24 +883,26 @@
 .jcr.Node;%0D%0A
+%0D%0A
 import org.a

Add missing licence header