/*
* 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.nodetype;
import org.apache.jackrabbit.test.AbstractJCRTest;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.nodetype.NodeTypeManager;
import javax.jcr.nodetype.NodeTypeIterator;
import javax.jcr.nodetype.NodeType;
import javax.jcr.nodetype.NoSuchNodeTypeException;
/**
* Tests if the {@link NodeTypeManager} properly returns primary types an mixin
* types.
*
*/
public class NodeTypeManagerTest extends AbstractJCRTest {
/**
* The node type manager we use for the test cases
*/
private NodeTypeManager manager;
/**
* The session for reading from the default workspace
*/
private Session session;
/**
* Sets up the fixture for the test cases.
*/
protected void setUp() throws Exception {
isReadOnly = true;
super.setUp();
session = getHelper().getReadOnlySession();
manager = session.getWorkspace().getNodeTypeManager();
}
/**
* Releases the session aquired in {@link #setUp()}.
*/
protected void tearDown() throws Exception {
if (session != null) {
session.logout();
session = null;
}
manager = null;
super.tearDown();
}
/**
* Test if getNodeType(String nodeTypeName) returns the expected NodeType and
* if a NoSuchTypeException is thrown if no according node type is existing
*/
public void testGetNodeType() throws RepositoryException {
NodeType type = manager.getAllNodeTypes().nextNodeType();
assertEquals("getNodeType(String nodeTypeName) does not return correct " +
"NodeType",
manager.getNodeType(type.getName()).getName(),
type.getName());
StringBuffer notExistingName = new StringBuffer("X");
NodeTypeIterator types = manager.getAllNodeTypes();
while (types.hasNext()) {
// build a name which is for sure not existing
// (":" of namespace prefix will be replaced later on)
notExistingName.append(types.nextNodeType().getName());
}
try {
manager.getNodeType(notExistingName.toString().replaceAll(":", ""));
fail("getNodeType(String nodeTypeName) must throw a " +
"NoSuchNodeTypeException if no according NodeType " +
"does exist");
} catch (NoSuchNodeTypeException e) {
// success
}
}
/**
* Test if getAllNodeTypes() returns all primary and mixin node types
*/
public void testGetAllNodeTypes() throws RepositoryException {
long sizeAll = getSize(manager.getAllNodeTypes());
long sizePrimary = getSize(manager.getPrimaryNodeTypes());
long sizeMixin = getSize(manager.getMixinNodeTypes());
assertEquals("sizeAll() must return all primary and mixin node types:",
sizePrimary + sizeMixin,
sizeAll);
}
/**
* Test if getPrimaryNodeTypes does not return any mixin node types
*/
public void testGetPrimaryNodeTypes() throws RepositoryException {
NodeTypeIterator types = manager.getPrimaryNodeTypes();
while (types.hasNext()) {
assertFalse("getPrimaryNodeTypes() must not return mixin " +
"node types",
types.nextNodeType().isMixin());
}
}
/**
* Test if getMixinNodeTypes does return exclusively mixin node types
*/
public void testGetMixinNodeTypes() throws RepositoryException {
NodeTypeIterator types = manager.getMixinNodeTypes();
while (types.hasNext()) {
assertTrue("getMixinNodeTypes() must return exclusively mixin " +
"node types",
types.nextNodeType().isMixin());
}
}
}