You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by dp...@apache.org on 2005/05/03 16:22:59 UTC
svn commit: r167911 - in
/incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api:
NamespaceRemappingTest.java SessionTest.java ValueFactoryTest.java
Author: dpfister
Date: Tue May 3 07:22:59 2005
New Revision: 167911
URL: http://svn.apache.org/viewcvs?rev=167911&view=rev
Log:
Added and enhanced tests
Added:
incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/ValueFactoryTest.java (with props)
Modified:
incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/NamespaceRemappingTest.java
incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/SessionTest.java
Modified: incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/NamespaceRemappingTest.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/NamespaceRemappingTest.java?rev=167911&r1=167910&r2=167911&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/NamespaceRemappingTest.java (original)
+++ incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/NamespaceRemappingTest.java Tue May 3 07:22:59 2005
@@ -174,6 +174,40 @@
}
/**
+ * Tests if {@link javax.jcr.Session#getNamespacePrefixes()} returns
+ * all prefixes currently set for this session, including all those
+ * registered in the NamespaceRegistry but not over-ridden by a
+ * Session.setNamespacePrefix, plus those currently set locally by
+ * Session.setNamespacePrefix.
+ */
+ public void testGetNamespacePrefixes() throws RepositoryException {
+ String testPrefix = getUnusedPrefix();
+
+ // remap the jcr uri
+ session.setNamespacePrefix(testPrefix, NS_JCR_URI);
+
+ String prefixes[] = session.getNamespacePrefixes();
+
+ assertEquals("Session.getNamespacePrefixes() must return all prefixes " +
+ "currently set for this session.",
+ nsr.getPrefixes().length,
+ session.getNamespacePrefixes().length);
+
+ // the prefix of the jcr uri as set in the namespace registry
+ String prefixNSR = nsr.getPrefix(NS_JCR_URI);
+
+ // test if the "NSR prefix" (and over-ridden by the session) is not
+ // returned by Session.getNamespacePrefixes()
+ for (int i = 0; i < prefixes.length; i++) {
+ if (prefixes[i].equals(prefixNSR)) {
+ fail("Session.getNamespacePrefixes() must not return the " +
+ "prefixes over-ridden by Session.setNamespacePrefix");
+ }
+ }
+ }
+
+
+ /**
* Returns a namespace prefix that is not in use.
*
* @return a namespace prefix that is not in use.
@@ -204,4 +238,4 @@
}
return uri + count;
}
-}
\ No newline at end of file
+}
Modified: incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/SessionTest.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/SessionTest.java?rev=167911&r1=167910&r2=167911&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/SessionTest.java (original)
+++ incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/SessionTest.java Tue May 3 07:22:59 2005
@@ -17,6 +17,7 @@
package org.apache.jackrabbit.test.api;
import org.apache.jackrabbit.test.AbstractJCRTest;
+import org.apache.jackrabbit.test.NotExecutableException;
import javax.jcr.nodetype.ConstraintViolationException;
import javax.jcr.RepositoryException;
@@ -26,6 +27,13 @@
import javax.jcr.Session;
import javax.jcr.InvalidItemStateException;
import javax.jcr.Value;
+import javax.jcr.Repository;
+import javax.jcr.NamespaceRegistry;
+import javax.jcr.lock.LockException;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.Arrays;
+import java.util.Hashtable;
/**
* <code>SessionTest</code> contains all test cases for the
@@ -224,6 +232,58 @@
} catch (ConstraintViolationException e) {
// ok try to save the source
}
+ }
+
+ /**
+ * Calls <code>{@link javax.jcr.Session#move(String src, String dest)} where
+ * the parent node of src is locked.<br/> <br/> Should throw a <code>{@link
+ * javax.jcr.LockException} immediately or on save.
+ */
+ public void testMoveLockException()
+ throws NotExecutableException, RepositoryException {
+
+ Session session = superuser;
+
+ if (session.getRepository().getDescriptor(Repository.OPTION_LOCKING_SUPPORTED) == null) {
+ throw new NotExecutableException("Locking is not supported.");
+ }
+
+ // create a node that is lockable
+ Node lockableNode = testRootNode.addNode(nodeName1, testNodeType);
+ // or try to make it lockable if it is not
+ if (!lockableNode.isNodeType(mixLockable)) {
+ if (lockableNode.canAddMixin(mixLockable)) {
+ lockableNode.addMixin(mixLockable);
+ } else {
+ throw new NotExecutableException("Node " + nodeName1 + " is not lockable and does not " +
+ "allow to add mix:lockable");
+ }
+ }
+
+ // add a sub node (the one that is tried to move later on)
+ Node srcNode = lockableNode.addNode(nodeName1, testNodeType);
+
+ testRootNode.save();
+
+ // remove first slash of path to get rel path to root
+ String pathRelToRoot = lockableNode.getPath().substring(1);
+
+ // access node through another session to lock it
+ Session session2 = helper.getSuperuserSession();
+ Node node2 = session2.getRootNode().getNode(pathRelToRoot);
+ node2.lock(true, true);
+
+ try {
+ String destPath = testRoot + "/" + nodeName2;
+ session.move(srcNode.getPath(), destPath);
+ testRootNode.save();
+ fail("A LockException is thrown either immediately or on save if a lock prevents the move.");
+ }
+ catch (LockException e){
+ // success
+ }
+
+ session2.logout();
}
/**
Added: incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/ValueFactoryTest.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/ValueFactoryTest.java?rev=167911&view=auto
==============================================================================
--- incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/ValueFactoryTest.java (added)
+++ incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/ValueFactoryTest.java Tue May 3 07:22:59 2005
@@ -0,0 +1,306 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation or its licensors,
+ * as applicable.
+ *
+ * Licensed 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.Session;
+import javax.jcr.ValueFactory;
+import javax.jcr.Node;
+import javax.jcr.PropertyType;
+import javax.jcr.UnsupportedRepositoryOperationException;
+import javax.jcr.RepositoryException;
+import javax.jcr.PathNotFoundException;
+import javax.jcr.Value;
+import javax.jcr.ValueFormatException;
+import java.util.Calendar;
+import java.util.ArrayList;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+
+/**
+ * <code>ValueFactoryTest</code> tests the different ValueFactory.createValue methods.
+ *
+ * @test
+ * @sources ValueFactoryTest.java
+ * @executeClass org.apache.jackrabbit.test.api.ValueFactoryTest
+ * @keywords level2
+ */
+public class ValueFactoryTest extends AbstractJCRTest {
+
+ private Session session;
+ private ValueFactory valueFactory;
+
+ private static final boolean booleanValue = false;
+ private Calendar dateValue = null;
+ private static final double doubleValue = 3.1414926;
+ private static final long longValue = Long.MAX_VALUE;
+ private Node referenceNode = null;
+ private Node notReferenceableNode = null;
+ private static final String stringValue = "a string";
+ private static String nameValue = "aName";
+ private static String pathValue = "/a/Path[1]";
+ private byte[] binaryValue = null;
+
+ private ArrayList values = new ArrayList();
+
+ private String dateValueFail = nameValue;
+ private static final String doubleValueFail = nameValue;
+ private static final String longValueFail = nameValue;
+ private static String nameValueFail = ";pre fix::name;";
+ private static String pathValueFail =nameValueFail;
+
+ private static int[] types = {PropertyType.DATE, PropertyType.DOUBLE, PropertyType.LONG,
+ PropertyType.NAME, PropertyType.PATH, PropertyType.REFERENCE,
+ PropertyType.STRING, PropertyType.BINARY, PropertyType.BOOLEAN};
+
+
+ public void setUp() throws Exception {
+ super.setUp();
+ session = helper.getReadWriteSession();
+ try {
+ valueFactory = session.getValueFactory();
+ } catch (UnsupportedRepositoryOperationException e) {
+ String message = "ValueFactory Test not executable: " + e.getMessage();
+ throw new NotExecutableException(message);
+ }
+ //notReferenceableNode = getProperty(not_ReferenceableNode);
+ nameValue = testRootNode.getName();
+ pathValue = testRootNode.getPath();
+ dateValue = Calendar.getInstance();
+ binaryValue = createRandomString(10).getBytes();
+ referenceNode = createReferenceableNode(nodeName1);
+ }
+
+ /**
+ * Create a referenceable node under the testRootNode
+ * or null if it is not possible to create one.
+ * @param name
+ * @return
+ * @throws RepositoryException
+ */
+ public Node createReferenceableNode(String name) throws RepositoryException {
+ // remove a yet existing node at the target
+ try {
+ Node node = testRootNode.getNode(name);
+ node.remove();
+ session.save();
+ } catch (PathNotFoundException pnfe) {
+ // ok
+ }
+ // a referenceable node
+ Node n1 = testRootNode.addNode(name);
+ if (n1.canAddMixin(mixReferenceable)) {
+ n1.addMixin(mixReferenceable);
+ // make sure jcr:uuid is available
+ testRootNode.save();
+ return n1;
+ }
+ else {
+ return null;
+ }
+ }
+
+ /**
+ * Tests if the type of a created value is set correctly.
+ *
+ * @throws RepositoryException
+ */
+ public void testValueType() throws RepositoryException {
+ Value value = null;
+ int type = -1;
+ for (int i = 0; i < types.length; i++) {
+
+ switch (types[i]) {
+
+ case PropertyType.BINARY:
+ try {
+ ByteArrayInputStream in = new ByteArrayInputStream(binaryValue);
+ value = valueFactory.createValue(in);
+ session.save();
+ type = value.getType();
+ in.close();
+ } catch (IOException ioe) {
+
+ }
+ assertTrue("Type of created value not correct: Expected: "
+ + PropertyType.nameFromValue(PropertyType.BINARY)
+ + " but was: " + PropertyType.nameFromValue(type),
+ PropertyType.BINARY == type);
+ break;
+
+ case PropertyType.BOOLEAN:
+ value = valueFactory.createValue(booleanValue);
+ session.save();
+ type = value.getType();
+ assertTrue("Type of created value not correct: Expected: "
+ + PropertyType.nameFromValue(PropertyType.BOOLEAN)
+ + " but was: " + PropertyType.nameFromValue(type),
+ PropertyType.BOOLEAN == type);
+ break;
+
+ case PropertyType.DATE:
+ value = valueFactory.createValue(dateValue);
+ session.save();
+ type = value.getType();
+ assertTrue("Type of created value not correct: Expected: "
+ + PropertyType.nameFromValue(PropertyType.DATE)
+ + " but was: " + PropertyType.nameFromValue(type),
+ PropertyType.DATE == type);
+ break;
+
+ case PropertyType.DOUBLE:
+ value = valueFactory.createValue(doubleValue);
+ session.save();
+ type = value.getType();
+ assertTrue("Type of created value not correct: Expected: "
+ + PropertyType.nameFromValue(PropertyType.DOUBLE)
+ + " but was: " + PropertyType.nameFromValue(type),
+ PropertyType.DOUBLE == type);
+ break;
+
+ case PropertyType.LONG:
+ value = valueFactory.createValue(longValue);
+ session.save();
+ type = value.getType();
+ assertTrue("Type of created value not correct: Expected: "
+ + PropertyType.nameFromValue(PropertyType.LONG)
+ + " but was: " + PropertyType.nameFromValue(type),
+ PropertyType.LONG == type);
+ break;
+
+ case PropertyType.NAME:
+ value = valueFactory.createValue(nameValue, PropertyType.NAME);
+ session.save();
+ type = value.getType();
+ assertTrue("Type of created value not correct: Expected: "
+ + PropertyType.nameFromValue(PropertyType.NAME)
+ + " but was: " + PropertyType.nameFromValue(type),
+ PropertyType.NAME == type);
+ break;
+
+ case PropertyType.PATH:
+ value = valueFactory.createValue(pathValue, PropertyType.PATH);
+ session.save();
+ type = value.getType();
+ assertTrue("Type of created value not correct: Expected: "
+ + PropertyType.nameFromValue(PropertyType.PATH)
+ + " but was: " + PropertyType.nameFromValue(type),
+ PropertyType.PATH == type);
+
+ break;
+
+ case PropertyType.REFERENCE:
+ if (referenceNode != null) {
+ value = valueFactory.createValue(referenceNode);
+ session.save();
+ type = value.getType();
+ assertTrue("Type of created value not correct: Expected: "
+ + PropertyType.nameFromValue(PropertyType.REFERENCE)
+ + " but was: " + PropertyType.nameFromValue(type),
+ PropertyType.REFERENCE == type);
+ // correct value?
+ assertEquals("Reference value does not contain the UUID of the " +
+ "referenced node.", referenceNode.getUUID(), value.getString());
+ }
+ break;
+
+ case PropertyType.STRING:
+ value = valueFactory.createValue(stringValue);
+ session.save();
+ type = value.getType();
+ assertTrue("Type of created value not correct: Expected: "
+ + PropertyType.nameFromValue(PropertyType.STRING)
+ + " but was: " + PropertyType.nameFromValue(type),
+ PropertyType.STRING == type);
+ break;
+
+ }
+ }
+
+ }
+
+ /**
+ * Tests if a ValueFormatexception is thrown in case the passed string
+ * cannot be converted to the required value type.
+ * value creation.
+ * @throws RepositoryException
+ */
+ public void testValueFormatException() throws RepositoryException {
+ Value value = null;
+ for (int i = 0; i < types.length; i++) {
+
+ switch (types[i]) {
+
+ case PropertyType.DATE:
+ try {
+ value = valueFactory.createValue(dateValueFail,PropertyType.DATE);
+ fail("Conversion from String " + dateValueFail
+ + " to a Date value should throw ValueFormatException.");
+ } catch (ValueFormatException vfe) {
+ //ok
+ }
+ break;
+
+ case PropertyType.DOUBLE:
+ try {
+ value = valueFactory.createValue(doubleValueFail,PropertyType.DOUBLE);
+ fail("Conversion from String " + doubleValueFail
+ + " to a Date value should throw ValueFormatException.");
+ } catch (ValueFormatException vfe) {
+ //ok
+ }
+ break;
+
+ case PropertyType.LONG:
+ try {
+ value = valueFactory.createValue(longValueFail,PropertyType.LONG);
+ fail("Conversion from String " + longValueFail
+ + " to a Date value should throw ValueFormatException.");
+ } catch (ValueFormatException vfe) {
+ //ok
+ }
+ break;
+
+ case PropertyType.NAME:
+ try {
+ value = valueFactory.createValue(nameValueFail,PropertyType.NAME);
+ fail("Conversion from String " + nameValueFail
+ + " to a Date value should throw ValueFormatException.");
+ } catch (ValueFormatException vfe) {
+ //ok
+ }
+ break;
+
+ case PropertyType.PATH:
+ try {
+ value = valueFactory.createValue(pathValueFail,PropertyType.PATH);
+ fail("Conversion from String " + pathValueFail
+ + " to a Date value should throw ValueFormatException.");
+ } catch (ValueFormatException vfe) {
+ //ok
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ }
+}
\ No newline at end of file
Propchange: incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/ValueFactoryTest.java
------------------------------------------------------------------------------
svn:eol-style = native