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

org.apache.jackrabbit.test.api.NamespaceRegistryTest 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 javax.jcr.Item;
import javax.jcr.NamespaceRegistry;
import javax.jcr.RepositoryException;
import javax.jcr.NamespaceException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

/**
 * NamespaceRegistryTest tests whether the repository registers and
 * unregisters namespaces correctly. This is a level 2 feature.
 * 

* NOTE: Implementations are free to not support unregistering. In other words: * Even a repository that supports namespaces may always legally throw an * exception when you try to unregister. * */ public class NamespaceRegistryTest extends AbstractJCRTest { /** The system namespace prefixes */ private static final String[] SYSTEM_PREFIXES = {"jcr", "nt", "mix", "sv"}; /** Default value of test prefix */ private static final String TEST_PREFIX = "tst"; /** Default value of test namespace uri */ private static final String TEST_URI = "http://www.apache.org/jackrabbit/test/namespaceRegistryTest"; /** The namespace registry of the superuser session */ private NamespaceRegistry nsp; /** The namespace prefix we use for the tests */ private String namespacePrefix; /** The namespace uri we use for the tests */ private String namespaceUri; protected void setUp() throws Exception { super.setUp(); nsp = superuser.getWorkspace().getNamespaceRegistry(); namespacePrefix = getUnusedPrefix(); namespaceUri = getUnusedURI(); } protected void tearDown() throws Exception { try { if (Arrays.asList(nsp.getPrefixes()).contains(namespacePrefix)) { nsp.unregisterNamespace(namespacePrefix); } } catch (NamespaceException e) { log.println("Unable to unregister name space with prefix " + namespacePrefix + ": " + e.toString()); } finally { nsp = null; super.tearDown(); } } /** * Trying to register a system namespace must throw a NamespaceException */ public void testRegisterNamespaceExceptions() throws RepositoryException { try { nsp.registerNamespace("jcr", namespaceUri); fail("Trying to register the namespace 'jcr' must throw a NamespaceException."); } catch (NamespaceException e) { // expected behaviour } try { nsp.registerNamespace("nt", namespaceUri); fail("Trying to register the namespace 'nt' must throw a NamespaceException."); } catch (NamespaceException e) { // expected behaviour } try { nsp.registerNamespace("mix", namespaceUri); fail("Trying to register the namespace 'mix' must throw a NamespaceException."); } catch (NamespaceException e) { // expected behaviour } try { nsp.registerNamespace("sv", namespaceUri); fail("Trying to register the namespace 'sv' must throw a NamespaceException."); } catch (NamespaceException e) { // expected behaviour } } /** * Trying to register "xml" or anything that starts with "xml" as a * namespace must throw a repository exception */ public void testRegisterNamespaceXmlExceptions() throws RepositoryException { try { nsp.registerNamespace("xml", namespaceUri); fail("Trying to register the namespace 'xml' must throw a NamespaceException."); } catch (NamespaceException e) { // expected behaviour } try { nsp.registerNamespace("xml" + Math.floor(Math.random() * 999999), namespaceUri); fail("Trying to register a namespace that starts with 'xml' must throw a NamespaceException."); } catch (NamespaceException e) { // expected behaviour } } /** * Tries to register a namespace. */ public void testRegisterNamespace() throws RepositoryException { nsp.registerNamespace(namespacePrefix, namespaceUri); assertEquals("Namespace prefix was not registered.", namespacePrefix, nsp.getPrefix(namespaceUri)); assertEquals("Namespace URI was not registered.", namespaceUri, nsp.getURI(namespacePrefix)); Item created; try { created = testRootNode.addNode(namespacePrefix + ":root"); testRootNode.getSession().save(); } catch (RepositoryException ex) { // that didn't work; maybe the repository allows a property here? testRootNode.getSession().refresh(false); created = testRootNode.setProperty(namespacePrefix + ":root", "test"); testRootNode.getSession().save(); } // Need to remove it here, otherwise teardown can't unregister the NS. testRootNode.getSession().getItem(created.getPath()).remove(); testRootNode.getSession().save(); } /** * Tests whether unregistering a system namespace or an undefined namespace * throws the expected exception. */ public void testUnregisterNamespaceExceptions() throws RepositoryException { // Attempting to unregister a built-in namespace // must throw a NamespaceException. for (int t = 0; t < SYSTEM_PREFIXES.length; t++) { try { nsp.unregisterNamespace(SYSTEM_PREFIXES[t]); fail("Trying to unregister " + SYSTEM_PREFIXES[t] + " must fail"); } catch (NamespaceException e) { // expected behaviour } } // An attempt to unregister a namespace that is not currently registered // must throw a NamespaceException. try { nsp.unregisterNamespace("ThisNamespaceIsNotCurrentlyRegistered"); fail("Trying to unregister an unused prefix must fail"); } catch (NamespaceException e) { // expected behaviour } } //------------------------< internal >-------------------------------------- /** * Returns a namespace prefix that currently not used in the namespace * registry. * @return an unused namespace prefix. */ private String getUnusedPrefix() throws RepositoryException { Set prefixes = new HashSet(Arrays.asList(nsp.getPrefixes())); String prefix = TEST_PREFIX; int i = 0; while (prefixes.contains(prefix)) { prefix += i++; } return prefix; } /** * Returns a namespace URI that currently not used in the namespace * registry. * @return an unused namespace URI. */ private String getUnusedURI() throws RepositoryException { Set uris = new HashSet(Arrays.asList(nsp.getURIs())); String uri = TEST_URI; int i = 0; while (uris.contains(uri)) { uri += i++; } return uri; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy