All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.jackrabbit.test.api.NodeOrderableChildNodesTest Maven / Gradle / Ivy

There is a newer version: 2.23.1-beta
Show newest version
/*
 * 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.test.api;

import org.apache.jackrabbit.test.AbstractJCRTest;
import org.apache.jackrabbit.test.NotExecutableException;

import javax.jcr.nodetype.NodeType;
import javax.jcr.Node;
import javax.jcr.ItemNotFoundException;
import javax.jcr.RepositoryException;
import javax.jcr.UnsupportedRepositoryOperationException;
import javax.jcr.NodeIterator;
import javax.jcr.Session;

/**
 * NodeOrderableChildNodesTest contains all node writing tests (LEVEL 2) that require a node
 * that allows child node ordering (tests therefore are optional).
 * 

* If the repository does not support a node type with orderable child nodes * a {@link NotExecutableException} exception is thrown. *

* Prerequisites: *

    *
  • javax.jcr.tck.NodeOrderableChildNodesTest.nodetype2Name of a * valid node type that allows orderable child nodes
  • *
  • javax.jcr.tck.NodeOrderableChildNodesTest.nodetype3Name of a * valid node type that can be added as child node
  • *
* */ public class NodeOrderableChildNodesTest extends AbstractJCRTest { /** * A child Node of {@link #parentNode}. */ private Node initialFirstNode; /** * A child Node of {@link #parentNode}. */ private Node initialSecondNode; /** * The node that allows orderable child nodes */ private Node parentNode; protected void tearDown() throws Exception { initialFirstNode = null; initialSecondNode = null; parentNode = null; super.tearDown(); } /** * Tries to reorder child nodes using {@link Node#orderBefore(String, String)} * with an invalid destination reference. *

* This should throw an {@link ItemNotFoundException}. */ public void testOrderBeforeInvalidDest() throws RepositoryException, NotExecutableException { checkOrderableNodeType(getProperty("nodetype2")); prepareTest(); // ok lets try to reorder try { parentNode.orderBefore(initialSecondNode.getName(), "invalid"); fail("Trying to reorder child nodes using Node.orderBefore() where destination is invalid" + " should throw ItemNotFoundException!"); } catch (ItemNotFoundException e) { // ok } } /** * Tries to reorder child nodes using {@link Node#orderBefore(String, * String)} with an invalid source reference. *

* This should throw an {@link ItemNotFoundException}. */ public void testOrderBeforeInvalidSrc() throws RepositoryException, NotExecutableException { checkOrderableNodeType(getProperty("nodetype2")); prepareTest(); // ok lets try to reorder try { parentNode.orderBefore("invalid", initialFirstNode.getName()); fail("Trying to reorder child nodes using Node.orderBefore() where source is invalid " + "should throw ItemNotFoundException!"); } catch (ItemNotFoundException e) { // ok } } /** * Tries to reorder on a node using {@link Node#orderBefore(String, String)} * that does not support child reordering. *

* This should throw and * {@link UnsupportedRepositoryOperationException}. Prequisites:

    *
  • javax.jcr.tck.NodeOrderableChildNodesTest.testOrderBeforeUnsupportedRepositoryOperationException.nodetype2: * A valid node type that does not support child node ordering.
  • *
  • javax.jcr.tck.NodeOrderableChildNodesTest.testOrderBeforeUnsupportedRepositoryOperationException.nodetype3: * A valid node type that can be added as a child.
*/ public void testOrderBeforeUnsupportedRepositoryOperationException() throws RepositoryException, NotExecutableException { // create testNode parentNode = testRootNode.addNode(nodeName1, getProperty("nodetype2")); // add child node Node firstNode = parentNode.addNode(nodeName2, getProperty("nodetype3")); // add a second child node Node secondNode = parentNode.addNode(nodeName3, getProperty("nodetype3")); // save the new nodes superuser.save(); // ok lets try to reorder try { parentNode.orderBefore(secondNode.getName(), firstNode.getName()); fail("Trying to reorder child nodes using Node.orderBefore() on node that " + "does not support ordering should throw UnsupportedRepositoryException!"); } catch (UnsupportedRepositoryOperationException e) { // ok } } /** * Creates two child nodes, reorders first node to end, uses parentNode's * {@link Node#save()}. */ public void testOrderBeforePlaceAtEndParentSave() throws RepositoryException, NotExecutableException { checkOrderableNodeType(getProperty("nodetype2")); prepareTest(); // ok lets reorder and save parentNode.orderBefore(initialFirstNode.getName(), null); parentNode.save(); // get child node refs NodeIterator it = parentNode.getNodes(); Node firstNode = it.nextNode(); Node secondNode = it.nextNode(); // lets see if reordering worked assertTrue("Child nodes are not added in proper order after Node.orderBefore()!", firstNode.isSame(initialSecondNode)); assertTrue("Child nodes are not added in proper order after Node.orderBefore()!", secondNode.isSame(initialFirstNode)); } /** * Test Creates two child nodes, verifies that they are added propery. * reorders first node to the end , checks again. uses session.save(); */ public void testOrderBeforePlaceAtEndSessionSave() throws RepositoryException, NotExecutableException { checkOrderableNodeType(getProperty("nodetype2")); prepareTest(); // ok lets reorder and save parentNode.orderBefore(initialFirstNode.getName(), null); superuser.save(); // get child node refs NodeIterator it = parentNode.getNodes(); Node firstNode = it.nextNode(); Node secondNode = it.nextNode(); // lets see if reordering worked assertTrue("Child nodes are not added in proper order after Node.orderBefore()!", firstNode.isSame(initialSecondNode)); assertTrue("Child nodes are not added in proper order after Node.orderBefore()!", secondNode.isSame(initialFirstNode)); } /** * Creates two child nodes, reorders second node before first, uses * parentNode's {@link Node#save()}. */ public void testOrderBeforeSecondToFirstParentSave() throws RepositoryException, NotExecutableException { checkOrderableNodeType(getProperty("nodetype2")); prepareTest(); // ok lets reorder and save parentNode.orderBefore(initialSecondNode.getName(), initialFirstNode.getName()); parentNode.save(); // get child node refs NodeIterator it = parentNode.getNodes(); Node firstNode = it.nextNode(); Node secondNode = it.nextNode(); // lets see if reordering worked assertTrue("Child nodes are not added in proper order after Node.orderBefore()!", firstNode.isSame(initialSecondNode)); assertTrue("Child nodes are not added in proper order after Node.orderBefore()!", secondNode.isSame(initialFirstNode)); } /** * Creates two child nodes than reorders second node before first, saves * using {@link Session#save()}. */ public void testOrderBeforeSecondToFirstSessionSave() throws RepositoryException, NotExecutableException { checkOrderableNodeType(getProperty("nodetype2")); prepareTest(); // ok lets reorder and save parentNode.orderBefore(initialSecondNode.getName(), initialFirstNode.getName()); superuser.save(); // get child node refs NodeIterator it = parentNode.getNodes(); Node firstNode = it.nextNode(); Node secondNode = it.nextNode(); // lets see if reordering worked assertTrue("Child nodes are not added in proper order after Node.orderBefore()!", firstNode.isSame(initialSecondNode)); assertTrue("Child nodes are not added in proper order after Node.orderBefore()!", secondNode.isSame(initialFirstNode)); } /** * Sets up the test content needed for the test cases. */ private void prepareTest() throws RepositoryException { // get root node Node defaultRootNode = (Node) superuser.getItem(testRootNode.getPath()); // create testNode parentNode = defaultRootNode.addNode(nodeName1, getProperty("nodetype2")); // add child node Node firstNode = parentNode.addNode(nodeName2, getProperty("nodetype3")); // add a second child node Node secondNode = parentNode.addNode(nodeName3, getProperty("nodetype3")); // save the new nodes superuser.save(); // get child node refs NodeIterator it = parentNode.getNodes(); initialFirstNode = it.nextNode(); initialSecondNode = it.nextNode(); // first lets test if the nodes have been added in the right order assertTrue("Child nodes are not added in proper order ", firstNode.isSame(initialFirstNode)); assertTrue("Child nodes are not added in proper order ", secondNode.isSame(initialSecondNode)); } /** * Checks if the NodeType with name ntName supports orderable * child nodes. If not a {@link NotExecutableException} is thrown. * @param ntName the name of the node type. */ private void checkOrderableNodeType(String ntName) throws RepositoryException, NotExecutableException { NodeType nt = superuser.getWorkspace().getNodeTypeManager().getNodeType(ntName); if (!nt.hasOrderableChildNodes()) { throw new NotExecutableException("NodeType: " + ntName + " does not support orderable child nodes."); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy