testall.java

来自「jsr170接口的java实现。是个apache的开源项目。」· Java 代码 · 共 580 行 · 第 1/2 页

JAVA
580
字号
/* * 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.core.nodetype.xml;import junit.framework.AssertionFailedError;import junit.framework.TestCase;import org.apache.jackrabbit.api.JackrabbitNodeTypeManager;import org.apache.jackrabbit.core.TestRepository;import org.apache.jackrabbit.core.nodetype.InvalidNodeTypeDefException;import org.apache.jackrabbit.core.nodetype.NodeDef;import org.apache.jackrabbit.core.nodetype.NodeTypeDef;import org.apache.jackrabbit.core.nodetype.PropDef;import org.apache.jackrabbit.core.value.InternalValue;import org.apache.jackrabbit.name.NamespaceResolver;import org.apache.jackrabbit.name.QName;import javax.jcr.NamespaceException;import javax.jcr.NamespaceRegistry;import javax.jcr.PropertyType;import javax.jcr.RepositoryException;import javax.jcr.Session;import javax.jcr.version.OnParentVersionAction;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.Arrays;/** * Test cases for reading and writing node type definition files. */public class TestAll extends TestCase {    /** The dummy test namespace. */    private static final String TEST_NAMESPACE = "test-namespace";    /** Name of the include test node type definition file. */    private static final String TEST_NODETYPES =        "org/apache/jackrabbit/core/nodetype/xml/test_nodetypes.xml";    /** Name of the xml nodetype file for import and namespace registration. */    private static final String TEST_NS_XML_NODETYPES =        "test_ns_xml_nodetypes.xml";    /** Name of the cnd nodetype file for import and namespace registration. */    private static final String TEST_NS_CND_NODETYPES =        "test_ns_cnd_nodetypes.cnd";    /** Test node types definitions. */    private NodeTypeDef[] types;    /** Registry for the test namespaces. */    private NamespaceRegistry registry;    /**     * Initializes the node type formatter tests.     *     * @throws Exception on initialization errors     */    protected void setUp() throws Exception {        InputStream xml =            getClass().getClassLoader().getResourceAsStream(TEST_NODETYPES);        types = NodeTypeReader.read(xml);        registry = new SimpleNamespaceRegistry();        registry.registerNamespace("test", TEST_NAMESPACE);    }    /**     * Returns the named node type definition. If the node type does not     * exist, an assertion failure is generated.     *     * @param name node type name     * @return node type definition     */    private NodeTypeDef getNodeType(String name) {        QName qname = new QName(TEST_NAMESPACE, name);        for (int i = 0; i < types.length; i++) {            if (qname.equals(types[i].getName())) {                return types[i];            }        }        throw new AssertionFailedError("Node type " + name + " does not exist");    }    /**     * Returns the named property definition from the named node type     * definition. If either of the definitions do not exist, an assertion     * failure is generated.     * <p>     * If the given property name is <code>null</code>, then the residual     * property definition (if one exists) is returned.     *     * @param typeName node type name     * @param propertyName property name, or <code>null</code>     * @return property definition     */    private PropDef getProperty(String typeName, String propertyName) {        QName name;        if (propertyName != null) {            name = new QName(TEST_NAMESPACE, propertyName);        } else {            name = PropDef.ANY_NAME;        }        NodeTypeDef def = getNodeType(typeName);        PropDef[] defs = def.getPropertyDefs();        for (int i = 0; i < defs.length; i++) {            if (name.equals(defs[i].getName())) {                return defs[i];            }        }        throw new AssertionFailedError(                "Property " + propertyName + " does not exist");    }    /**     * Returns the string value of the identified property default value.     *     * @param def property definition     * @param index default value index     * @return default value     */    private String getDefaultValue(PropDef def, int index) {        try {            InternalValue[] values = def.getDefaultValues();            NamespaceResolver resolver = new AdditionalNamespaceResolver(registry);            return values[index].toJCRValue(resolver).getString();        } catch (RepositoryException e) {            throw new AssertionFailedError(e.getMessage());        }    }    /**     * Returns the named child node definition from the named node type     * definition. If either of the definitions do not exist, an assertion     * failure is generated.     *     * @param typeName node type name     * @param nodeName child node name     * @return child node definition     */    private NodeDef getChildNode(String typeName, String nodeName) {        QName name = new QName(TEST_NAMESPACE, nodeName);        NodeTypeDef def = getNodeType(typeName);        NodeDef[] defs = def.getChildNodeDefs();        for (int i = 0; i < defs.length; i++) {            if (name.equals(defs[i].getName())) {                return defs[i];            }        }        throw new AssertionFailedError(                "Child node " + nodeName + " does not exist");    }    /**     * Test for reading a node type definition file. The test file     * has already been read during the test setup, so this method     * just verifies the number of node types.     */    public void testRead() {        assertEquals("number of node types", 6, types.length);    }    /** Test for the empty node type. */    public void testEmptyNodeType() {        NodeTypeDef def = getNodeType("emptyNodeType");        assertNotNull("emptyNodeType exists", def);        assertEquals("emptyNodeType mixin",                false, def.isMixin());        assertEquals("emptyNodeType hasOrderableChildNodes",                false, def.hasOrderableChildNodes());        assertEquals("emptyNodeType primaryItemName",                null, def.getPrimaryItemName());        assertEquals("emptyNodeType childNodeDefs",                0, def.getChildNodeDefs().length);        assertEquals("emptyNodeType propertyDefs",                0, def.getPropertyDefs().length);    }    /** Test for the <code>mixin</code> node type attribute. */    public void testMixinNodeType() {        NodeTypeDef def = getNodeType("mixinNodeType");        assertEquals("mixinNodeType mixin",                true, def.isMixin());    }    /** Test for the <code>hasOrderableChildNodes</code> node type attribute. */    public void testOrderedNodeType() {        NodeTypeDef def = getNodeType("orderedNodeType");        assertEquals("orderedNodeType hasOrderableChildNodes",                true, def.hasOrderableChildNodes());    }    /** Test for node type item definitions. */    public void testItemNodeType() {        NodeTypeDef def = getNodeType("itemNodeType");        assertEquals("itemNodeType primaryItemName",                new QName(TEST_NAMESPACE, "emptyItem"),                def.getPrimaryItemName());        assertEquals("itemNodeType propertyDefs",                10, def.getPropertyDefs().length);        PropDef pdef = getProperty("itemNodeType", null);        assertTrue("itemNodeType wildcard property", pdef.definesResidual());    }    /** Test for namespace registration on node type import. */    public void testImportXMLNodeTypes() throws Exception {        Session session = TestRepository.getInstance().login();        try {            session.getNamespacePrefix("test-namespace2");            // Ignore test case, node type and namespace already registered        } catch (NamespaceException e1) {            // Namespace testns2 not yet registered            JackrabbitNodeTypeManager ntm = (JackrabbitNodeTypeManager)                session.getWorkspace().getNodeTypeManager();            ntm.registerNodeTypes(                    TestAll.class.getResourceAsStream(TEST_NS_XML_NODETYPES),                    JackrabbitNodeTypeManager.TEXT_XML);            try {                session.getNamespacePrefix("test-namespace2");            } catch (NamespaceException e2) {                fail("xml test2 namespace not registered");            }        } finally {            session.logout();        }    }    /** Test for namespace registration on node type import. */    public void testImportCNDNodeTypes() throws Exception {        Session session = TestRepository.getInstance().login();        try {            session.getNamespacePrefix("test-namespace3");            // Ignore test case, node type and namespace already registered        } catch (NamespaceException e1) {            JackrabbitNodeTypeManager ntm = (JackrabbitNodeTypeManager)                session.getWorkspace().getNodeTypeManager();            ntm.registerNodeTypes(                    TestAll.class.getResourceAsStream(TEST_NS_CND_NODETYPES),                    JackrabbitNodeTypeManager.TEXT_X_JCR_CND);            try {                session.getNamespacePrefix("test-namespace3");            } catch (NamespaceException e2) {                fail("cnd test3 namespace not registered");            }        } finally {            session.logout();        }    }    /** Test for the empty item definition. */    public void testEmptyItem() {        PropDef def = getProperty("itemNodeType", "emptyItem");        assertEquals("emptyItem autoCreate",                false, def.isAutoCreated());        assertEquals("emptyItem mandatory",                false, def.isMandatory());        assertEquals("emptyItem onParentVersion",                OnParentVersionAction.IGNORE, def.getOnParentVersion());        assertEquals("emptyItem protected",                false, def.isProtected());    }    /** Test for the <code>autoCreated</code> item definition attribute. */    public void testAutoCreateItem() {        PropDef def = getProperty("itemNodeType", "autoCreatedItem");        assertEquals("autoCreatedItem autoCreated",                true, def.isAutoCreated());    }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?