You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by st...@apache.org on 2005/04/09 18:30:51 UTC
svn commit: r160691 - in incubator/jackrabbit/trunk/src:
java/org/apache/jackrabbit/core/ java/org/apache/jackrabbit/core/nodetype/
test/org/apache/jackrabbit/test/api/
Author: stefan
Date: Sat Apr 9 09:30:47 2005
New Revision: 160691
URL: http://svn.apache.org/viewcvs?view=rev&rev=160691
Log:
fixed incorrect test cases and fixed code that caused valid testcases to fail
Modified:
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/NodeImpl.java
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/PropertyImpl.java
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/nodetype/NodeTypeImpl.java
incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/AbstractWorkspaceCopyBetweenTest.java
incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/SetPropertyStringTest.java
incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/SetPropertyValueTest.java
incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/WorkspaceCloneReferenceableTest.java
incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/WorkspaceCloneSameNameSibsTest.java
incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/WorkspaceCopyBetweenWorkspacesTest.java
incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/WorkspaceCopyTest.java
incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/WorkspaceMoveTest.java
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/NodeImpl.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/NodeImpl.java?view=diff&r1=160690&r2=160691
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/NodeImpl.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/NodeImpl.java Sat Apr 9 09:30:47 2005
@@ -2476,15 +2476,19 @@
}
// check lock status
- checkLock();
+ if (isLocked()) {
+ return false;
+ }
QName ntName;
try {
ntName = QName.fromJCRName(mixinName, session.getNamespaceResolver());
} catch (IllegalNameException ine) {
- throw new RepositoryException("invalid mixin type name: " + mixinName, ine);
+ throw new RepositoryException("invalid mixin type name: "
+ + mixinName, ine);
} catch (UnknownPrefixException upe) {
- throw new RepositoryException("invalid mixin type name: " + mixinName, upe);
+ throw new RepositoryException("invalid mixin type name: "
+ + mixinName, upe);
}
NodeTypeManagerImpl ntMgr = session.getNodeTypeManager();
@@ -2496,7 +2500,8 @@
return false;
}
- // build effective node type of mixins & primary type in order to detect conflicts
+ // build effective node type of mixins & primary type
+ // in order to detect conflicts
NodeTypeRegistry ntReg = ntMgr.getNodeTypeRegistry();
EffectiveNodeType entExisting;
try {
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/PropertyImpl.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/PropertyImpl.java?view=diff&r1=160690&r2=160691
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/PropertyImpl.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/PropertyImpl.java Sat Apr 9 09:30:47 2005
@@ -1053,6 +1053,25 @@
// check lock status
((NodeImpl) getParent()).checkLock();
+ if (values != null) {
+ // check type of values
+ int valueType = PropertyType.UNDEFINED;
+ for (int i = 0; i < values.length; i++) {
+ if (values[i] == null) {
+ // skip null values as those will be purged later
+ continue;
+ }
+ if (valueType == PropertyType.UNDEFINED) {
+ valueType = values[i].getType();
+ } else if (valueType != values[i].getType()) {
+ // inhomogeneous types
+ String msg = "inhomogeneous type of values";
+ log.debug(msg);
+ throw new ValueFormatException(msg);
+ }
+ }
+ }
+
int reqType = definition.getRequiredType();
InternalValue[] internalValues = null;
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/nodetype/NodeTypeImpl.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/nodetype/NodeTypeImpl.java?view=diff&r1=160690&r2=160691
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/nodetype/NodeTypeImpl.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/nodetype/NodeTypeImpl.java Sat Apr 9 09:30:47 2005
@@ -481,6 +481,10 @@
// determine type of values
int type = PropertyType.UNDEFINED;
for (int i = 0; i < values.length; i++) {
+ if (values[i] == null) {
+ // skip null values as those would be purged
+ continue;
+ }
if (type == PropertyType.UNDEFINED) {
type = values[i].getType();
} else if (type != values[i].getType()) {
Modified: incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/AbstractWorkspaceCopyBetweenTest.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/AbstractWorkspaceCopyBetweenTest.java?view=diff&r1=160690&r2=160691
==============================================================================
--- incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/AbstractWorkspaceCopyBetweenTest.java (original)
+++ incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/AbstractWorkspaceCopyBetweenTest.java Sat Apr 9 09:30:47 2005
@@ -35,6 +35,11 @@
protected Session superuserW2;
/**
+ * A read-write session for the non default workspace
+ */
+ protected Session rwSessionW2;
+
+ /**
* The workspace in the non default session.
*/
Workspace workspaceW2;
@@ -59,6 +64,7 @@
// init second workspace
superuserW2 = helper.getSuperuserSession(workspaceName);
+ rwSessionW2 = helper.getReadWriteSession(workspaceName);
workspaceW2 = superuserW2.getWorkspace();
initNodesW2();
Modified: incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/SetPropertyStringTest.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/SetPropertyStringTest.java?view=diff&r1=160690&r2=160691
==============================================================================
--- incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/SetPropertyStringTest.java (original)
+++ incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/SetPropertyStringTest.java Sat Apr 9 09:30:47 2005
@@ -210,10 +210,16 @@
/**
* Tests if <code>Node.setProperty(String, String[])</code> throws a {@link
- * javax.jcr.ValueFormatException} when trying to set a single-value
- * property to a multi-value
+ * javax.jcr.ValueFormatException} when trying to set an existing
+ * single-valued property to a multi-value
*/
public void testSetSingleStringArrayValueFormatException() throws Exception {
+ // prerequisite: existing single-valued STRING property
+ if (!testNode.hasProperty(propertyName1)) {
+ testNode.setProperty(propertyName1, s1);
+ testNode.getParent().save();
+ }
+
try {
testNode.setProperty(propertyName1, sArray1);
fail("setProperty(singleValueProperty, String[]) not throwing a ValueFormatException");
@@ -315,10 +321,16 @@
/**
* Tests if <code>Node.setProperty(String, String[], int)</code> throws a
- * {@link javax.jcr.ValueFormatException} when trying to set a single-value
- * property to a multi-value
+ * {@link javax.jcr.ValueFormatException} when trying to set an existing
+ * single-value property to a multi-value
*/
public void testSetSingleStringArrayValueFormatExceptionWithPropertyType() throws Exception {
+ // prerequisite: existing single-valued STRING property
+ if (!testNode.hasProperty(propertyName1)) {
+ testNode.setProperty(propertyName1, s1);
+ testNode.getParent().save();
+ }
+
try {
testNode.setProperty(propertyName1, sArray1, PropertyType.STRING);
fail("setProperty(singleValueProperty, String[], int) not throwing a ValueFormatException");
Modified: incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/SetPropertyValueTest.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/SetPropertyValueTest.java?view=diff&r1=160690&r2=160691
==============================================================================
--- incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/SetPropertyValueTest.java (original)
+++ incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/SetPropertyValueTest.java Sat Apr 9 09:30:47 2005
@@ -223,10 +223,16 @@
/**
* Tests if <code>Node.setProperty(String, Value[])</code> throws a {@link
- * javax.jcr.ValueFormatException} when trying to set a single-value
- * property to a multi-value
+ * javax.jcr.ValueFormatException} when trying to set an existing
+ * single-valued property to a multi-value
*/
public void testSetSingleValueArrayValueFormatException() throws Exception {
+ // prerequisite: existing single-valued property
+ if (!testNode.hasProperty(propertyName1)) {
+ testNode.setProperty(propertyName1, v1);
+ testNode.getParent().save();
+ }
+
try {
testNode.setProperty(propertyName1, vArray1);
fail("setProperty(singleValueProperty, Value[]) not throwing a ValueFormatException");
@@ -357,10 +363,16 @@
/**
* Tests if <code>Node.setProperty(String, Value[], int)</code> throws a
- * {@link javax.jcr.ValueFormatException} when trying to set a single-value
- * property to a multi-value
+ * {@link javax.jcr.ValueFormatException} when trying to set an existing
+ * single-valued property to a multi-value
*/
public void testSetSingleValueArrayValueFormatExceptionWithPropertyType() throws Exception {
+ // prerequisite: existing single-valued property
+ if (!testNode.hasProperty(propertyName1)) {
+ testNode.setProperty(propertyName1, v1);
+ testNode.getParent().save();
+ }
+
try {
testNode.setProperty(propertyName1, vArray1, PropertyType.STRING);
fail("setProperty(singleValueProperty, Value[], int) not throwing a ValueFormatException");
Modified: incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/WorkspaceCloneReferenceableTest.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/WorkspaceCloneReferenceableTest.java?view=diff&r1=160690&r2=160691
==============================================================================
--- incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/WorkspaceCloneReferenceableTest.java (original)
+++ incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/WorkspaceCloneReferenceableTest.java Sat Apr 9 09:30:47 2005
@@ -18,6 +18,7 @@
import javax.jcr.Node;
import javax.jcr.RepositoryException;
+import javax.jcr.ItemExistsException;
/**
* <code>WorkspaceCloneReferenceableTest</code> contains tests for cloning
@@ -61,7 +62,7 @@
*/
public void testCloneNodesRemoveExistingTrue() throws RepositoryException {
// add mixin referenceable to node1
- /*addMixinReferenceableToNode(testRootNode, node1);
+ addMixinReferenceableToNode(testRootNode, node1);
// clone a node from default workspace to have the same uuid on second workspace
String dstAbsPath = node2W2.getPath() + "/" + nodeName2;
@@ -70,7 +71,6 @@
// clone node1 from default workspace to second workspace
dstAbsPath = node2W2.getPath() + "/" + nodeName3;
- //@TODO: Testcase corrupts workspace and functionality is not implemented right now, so it's commented.
workspaceW2.clone(workspace.getName(), node1.getPath(), dstAbsPath, true);
Node clonedNode2 = node2W2.getNode(nodeName3);
@@ -80,8 +80,7 @@
// ... and is copied to this workspace as part of the copied subtree (that is, not into the former location of the old node).
Node clonedNodeMoved = clonedNode2.getNode(clonedNode.getName());
- assertTrue(testRootNodeW2.hasNode(clonedNodeMoved.getName()));*/
- fail("Testcase corrupts workspace, so it's commented.");
+ assertTrue(testRootNodeW2.hasNode(clonedNodeMoved.getName()));
}
/**
@@ -90,21 +89,18 @@
*/
public void testCloneNodesRemoveExistingFalse() throws RepositoryException {
// add mixin referenceable to node1
- /*addMixinReferenceableToNode(testRootNode, node1);
+ addMixinReferenceableToNode(testRootNode, node1);
// clone a node from default workspace to have the same uuid on second workspace
workspaceW2.clone(workspace.getName(), node1.getPath(), testRootNodeW2.getPath() + "/" + nodeName2, false);
// clone node1 from default workspace to second workspace
try {
- //@TODO: Testcase corrupts workspace, so it's commented.
workspaceW2.clone(workspace.getName(), node1.getPath(), testRootNodeW2.getPath() + "/" + nodeName3, false);
fail("If removeExisting is false then a UUID collision should throw a ItemExistsException");
} catch (ItemExistsException e) {
// successful
- } */
-
- fail("Testcase corrupts workspace, so it's commented.");
+ }
}
/**
Modified: incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/WorkspaceCloneSameNameSibsTest.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/WorkspaceCloneSameNameSibsTest.java?view=diff&r1=160690&r2=160691
==============================================================================
--- incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/WorkspaceCloneSameNameSibsTest.java (original)
+++ incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/WorkspaceCloneSameNameSibsTest.java Sat Apr 9 09:30:47 2005
@@ -19,6 +19,7 @@
import javax.jcr.ItemExistsException;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
+import javax.jcr.NodeIterator;
/**
* <code>WorkspaceCloneSameNameSibsTest</code> contains tests for cloning nodes
@@ -38,7 +39,7 @@
*/
public void testCloneNodesOrderingSupportedByParent() throws RepositoryException {
// test assumes that repositry supports Orderable Child Node Support (optional)
- /*String[] orderList = {nodeName1, nodeName2, nodeName3};
+ String[] orderList = {nodeName1, nodeName2, nodeName3};
// copy node three times below a node and check the order
for (int i = 0; i < orderList.length; i++) {
@@ -54,9 +55,7 @@
assertTrue(n.getName().equals(orderList[cnt]));
cnt++;
- } */
- //@TODO: Testcase corrupts workspace, so it's commented.
- fail("Testcase corrupts workspace, so it's commented.");
+ }
}
/**
Modified: incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/WorkspaceCopyBetweenWorkspacesTest.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/WorkspaceCopyBetweenWorkspacesTest.java?view=diff&r1=160690&r2=160691
==============================================================================
--- incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/WorkspaceCopyBetweenWorkspacesTest.java (original)
+++ incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/WorkspaceCopyBetweenWorkspacesTest.java Sat Apr 9 09:30:47 2005
@@ -160,20 +160,25 @@
// we assume repository supports locking
String dstAbsPath = node2W2.getPath() + "/" + node1.getName();
+ // get lock target node in destination wsp through other session
+ Node lockTarget = (Node) rwSessionW2.getItem(node2W2.getPath());
+
// add mixin "lockable" to be able to lock the node
- if (!node2W2.getPrimaryNodeType().isNodeType(mixLockable)) {
- node2W2.addMixin(mixLockable);
- testRootNodeW2.save();
+ if (!lockTarget.getPrimaryNodeType().isNodeType(mixLockable)) {
+ lockTarget.addMixin(mixLockable);
+ lockTarget.getParent().save();
}
- // lock dst parent node
- node2W2.lock(true, true);
+ // lock dst parent node using other session
+ lockTarget.lock(true, true);
try {
workspaceW2.copy(workspace.getName(), node1.getPath(), dstAbsPath);
fail("LockException was expected.");
} catch (LockException e) {
// successful
+ } finally {
+ lockTarget.unlock();
}
}
Modified: incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/WorkspaceCopyTest.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/WorkspaceCopyTest.java?view=diff&r1=160690&r2=160691
==============================================================================
--- incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/WorkspaceCopyTest.java (original)
+++ incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/WorkspaceCopyTest.java Sat Apr 9 09:30:47 2005
@@ -138,20 +138,28 @@
// we assume repository supports locking
String dstAbsPath = node2.getPath() + "/" + node1.getName();
+ // get other session
+ Session otherSession = helper.getReadWriteSession();
+
+ // get lock target node in destination wsp through other session
+ Node lockTarget = (Node) otherSession.getItem(node2.getPath());
+
// add mixin "lockable" to be able to lock the node
- if (!node2.getPrimaryNodeType().isNodeType(mixLockable)) {
- node2.addMixin(mixLockable);
- testRootNode.save();
+ if (!lockTarget.getPrimaryNodeType().isNodeType(mixLockable)) {
+ lockTarget.addMixin(mixLockable);
+ lockTarget.getParent().save();
}
- // lock dst parent node
- node2.lock(true, true);
+ // lock dst parent node using other session
+ lockTarget.lock(true, true);
try {
workspace.copy(node1.getPath(), dstAbsPath);
fail("LockException was expected.");
} catch (LockException e) {
// successful
+ } finally {
+ lockTarget.unlock();
}
}
}
Modified: incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/WorkspaceMoveTest.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/WorkspaceMoveTest.java?view=diff&r1=160690&r2=160691
==============================================================================
--- incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/WorkspaceMoveTest.java (original)
+++ incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/api/WorkspaceMoveTest.java Sat Apr 9 09:30:47 2005
@@ -139,20 +139,28 @@
// we assume repository supports locking
String dstAbsPath = node2.getPath() + "/" + node1.getName();
+ // get other session
+ Session otherSession = helper.getReadWriteSession();
+
+ // get lock target node in destination wsp through other session
+ Node lockTarget = (Node) otherSession.getItem(node2.getPath());
+
// add mixin "lockable" to be able to lock the node
- if (!node2.getPrimaryNodeType().isNodeType(mixLockable)) {
- node2.addMixin(mixLockable);
- testRootNode.save();
+ if (!lockTarget.getPrimaryNodeType().isNodeType(mixLockable)) {
+ lockTarget.addMixin(mixLockable);
+ lockTarget.getParent().save();
}
- // lock dst parent node
- node2.lock(true, true);
+ // lock dst parent node using other session
+ lockTarget.lock(true, true);
try {
workspace.move(node1.getPath(), dstAbsPath);
fail("LockException was expected.");
} catch (LockException e) {
// successful
+ } finally {
+ lockTarget.unlock();
}
}
}