Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* 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 javax.jcr.ItemNotFoundException;
import javax.jcr.RepositoryException;
import javax.jcr.Value;
import javax.jcr.ValueFormatException;
import javax.jcr.PropertyType;
import javax.jcr.Node;
import javax.jcr.Property;
/**
* Tests a path property. If the workspace does not contain a node with a path
* property a {@link org.apache.jackrabbit.test.NotExecutableException} is
* thrown.
*
*/
public class PathPropertyTest extends AbstractPropertyTest {
/**
* Returns {@link javax.jcr.PropertyType#PATH}.
*
* @return {@link javax.jcr.PropertyType#PATH}.
*/
protected int getPropertyType() {
return PropertyType.PATH;
}
/**
* Returns "does not matter" (null).
* @return null.
*/
protected Boolean getPropertyIsMultivalued() {
return null;
}
/**
* Tests conversion from Path type to String type and if the resulting
* string has correct format.
*/
public void testGetString() throws RepositoryException {
Value val = PropertyUtil.getValue(prop);
assertTrue("Not a valid Path property: " + prop.getName(),
PropertyUtil.checkPathFormat(val.getString(), session));
}
/**
* Tests failure of conversion from Path type to Boolean type.
*/
public void testGetBoolean() throws RepositoryException {
try {
Value val = PropertyUtil.getValue(prop);
val.getBoolean();
fail("Conversion from a Path value to a Boolean value " +
"should throw a ValueFormatException.");
} catch (ValueFormatException vfe) {
//ok
}
}
/**
* Tests failure of conversion from Path type to Date type.
*/
public void testGetDate() throws RepositoryException {
try {
Value val = PropertyUtil.getValue(prop);
val.getDate();
fail("Conversion from a Path value to a Date value " +
"should throw a ValueFormatException.");
} catch (ValueFormatException vfe) {
//ok
}
}
/**
* Tests failure from Path type to Double type.
*/
public void testGetDouble() throws RepositoryException {
try {
Value val = PropertyUtil.getValue(prop);
val.getDouble();
fail("Conversion from a Path value to a Double value " +
"should throw a ValueFormatException.");
} catch (ValueFormatException vfe) {
//ok
}
}
/**
* Tests failure of conversion from Path type to Long type.
*/
public void testGetLong() throws RepositoryException {
try {
Value val = PropertyUtil.getValue(prop);
val.getLong();
fail("Conversion from a Path value to a Long value " +
"should throw a ValueFormatException.");
} catch (ValueFormatException vfe) {
//ok
}
}
/**
* Tests if Value.getType() returns the same as Property.getType() and also
* tests that prop.getDefinition().getRequiredType() returns the same type
* in case it is not of Undefined type.
*/
public void testGetType() throws RepositoryException {
assertTrue("Value.getType() returns wrong type.",
PropertyUtil.checkGetType(prop, PropertyType.PATH));
}
/**
* Since JCR 2.0 a path property can be dereferenced if it points to a
* Node.
* TODO: create several tests out of this one
*/
public void testGetNode() throws RepositoryException {
if (!multiple) {
String nodePath = prop.getParent().getPath();
String propName = prop.getName();
// absolute nodes path
prop.getParent().setProperty(propName, nodePath, PropertyType.PATH);
String value = prop.getString();
Node n = prop.getNode();
assertEquals("The path of the dereferenced property must be equal to the value", n.getPath(), value);
assertTrue("The property value must be resolved to the correct node.", prop.getParent().isSame(n));
// relative node path
prop.getParent().setProperty(propName, ".", PropertyType.PATH);
n = prop.getNode();
assertTrue("The property value must be resolved to the correct node.", prop.getParent().getNode(".").isSame(n));
// non-existing property path
while (session.nodeExists(nodePath)) {
nodePath += "x";
}
prop.getParent().setProperty(propName, nodePath, PropertyType.PATH);
try {
prop.getNode();
fail("Calling Property.getNode() for a PATH value that doesn't have a corresponding Node, ItemNotFoundException is expected");
} catch (ItemNotFoundException e) {
//ok
}
} else {
try {
prop.getNode();
fail("Property.getNode() called on a multivalue property " +
"should throw a ValueFormatException.");
} catch (ValueFormatException vfe) {
//ok
}
}
}
/**
* Since JCR 2.0 a path property can be dereferenced if it points to a
* Property.
* TODO: create several tests out of this one
*/
public void testGetProperty() throws RepositoryException {
if (!multiple) {
String propPath = prop.getPath();
String propName = prop.getName();
// absolute property path
prop.getParent().setProperty(propName, propPath, PropertyType.PATH);
String path = prop.getString();
Property p = prop.getProperty();
assertEquals("The path of the dereferenced property must be equal to the value", path, p.getPath());
assertTrue("The property value must be resolved to the correct property.", prop.isSame(p));
// relative property path
prop.getParent().setProperty(propName, propName, PropertyType.PATH);
path = prop.getString();
p = prop.getProperty();
assertEquals("The path of the dereferenced property must be equal to the value", path, p.getName());
assertTrue("The property value must be resolved to the correct property.", prop.getParent().getProperty(path).isSame(p));
// non-existing property path
while (session.propertyExists(propPath)) {
propPath += "x";
}
prop.getParent().setProperty(propName, propPath, PropertyType.PATH);
try {
prop.getProperty();
fail("Calling Property.getProperty() for a PATH value that doesn't have a corresponding Property, ItemNotFoundException is expected");
} catch (ItemNotFoundException e) {
//ok
}
} else {
try {
prop.getProperty();
fail("Property.getNode() called on a multivalue property " +
"should throw a ValueFormatException.");
} catch (ValueFormatException vfe) {
// ok
}
}
}
}