Package org.apache.jackrabbit.oak.jcr

Source Code of org.apache.jackrabbit.oak.jcr.OrderableNodesTest

/*
* 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.jackrabbit.oak.jcr;

import java.util.ArrayList;
import java.util.List;

import org.apache.jackrabbit.commons.iterator.NodeIterable;
import org.junit.Test;

import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.RepositoryException;
import javax.jcr.Session;

import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

public class OrderableNodesTest extends AbstractRepositoryTest {

    @Test
    public void testSimpleOrdering() throws RepositoryException {
        doTest("nt:unstructured");
    }

    @Test
    public void orderableFolder() throws Exception {
        // check ordering with node type without a residual properties definition
        new TestContentLoader().loadTestContent(getAdminSession());
        doTest("test:orderableFolder");
    }

    @Test
    public void setPrimaryType() throws Exception {
        new TestContentLoader().loadTestContent(getAdminSession());
        // start with a node without orderable nodes
        Session session = getAdminSession();
        Node root = session.getRootNode().addNode("test", "nt:folder");

        List<String> names = new ArrayList<String>();
        for (int i = 0; i < 100; i++) {
            String name = "node-" + i;
            root.addNode(name, "nt:folder");
            names.add(name);
        }

        root.setPrimaryType("test:orderableFolder");

        // as of now, the child nodes must be stable and orderable
        List<String> expected = getChildNames(root);
        while (!expected.isEmpty()) {
            String name = expected.remove((int) Math.floor(Math.random() * expected.size()));
            root.getNode(name).remove();

            assertEquals(expected, getChildNames(root));
        }

        for (String name : names) {
            root.addNode(name, "nt:folder");
            expected.add(name);
            assertEquals(expected, getChildNames(root));
        }
    }

    /**
     * OAK-612
     */
    @Test
    public void testAddNode() throws Exception {
        new TestContentLoader().loadTestContent(getAdminSession());

        Session session = getAdminSession();
        Node test = session.getRootNode().addNode("test", "test:orderableFolder");
        assertTrue(test.getPrimaryNodeType().hasOrderableChildNodes());

        test.addNode("a");
        test.addNode("b");
        session.save();

        NodeIterator it = test.getNodes();
        assertEquals("a", it.nextNode().getName());
        assertEquals("b", it.nextNode().getName());
    }

    private void doTest(String nodeType) throws RepositoryException {
        Session session = getAdminSession();
        Node root = session.getRootNode().addNode("test", nodeType);

        root.addNode("a");
        root.addNode("b");
        root.addNode("c");

        NodeIterator iterator;

        iterator = root.getNodes();
        assertEquals("a", iterator.nextNode().getName());
        assertEquals("b", iterator.nextNode().getName());
        assertEquals("c", iterator.nextNode().getName());
        assertFalse(iterator.hasNext());

        root.orderBefore("c", "a");
        iterator = root.getNodes();
        assertEquals("c", iterator.nextNode().getName());
        assertEquals("a", iterator.nextNode().getName());
        assertEquals("b", iterator.nextNode().getName());
        assertFalse(iterator.hasNext());

        root.orderBefore("b", "c");
        iterator = root.getNodes();
        assertEquals("b", iterator.nextNode().getName());
        assertEquals("c", iterator.nextNode().getName());
        assertEquals("a", iterator.nextNode().getName());
        assertFalse(iterator.hasNext());

        session.save();
    }

    private static List<String> getChildNames(Node node)
            throws RepositoryException {
        List<String> names = new ArrayList<String>();
        for (Node child : new NodeIterable(node.getNodes())) {
            names.add(child.getName());
        }
        return names;
    }
}
TOP

Related Classes of org.apache.jackrabbit.oak.jcr.OrderableNodesTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.