/**
* This file Copyright (c) 2011-2012 Magnolia International
* Ltd. (http://www.magnolia-cms.com). All rights reserved.
*
*
* This file is dual-licensed under both the Magnolia
* Network Agreement and the GNU General Public License.
* You may elect to use one or the other of these licenses.
*
* This file is distributed in the hope that it will be
* useful, but AS-IS and WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE, TITLE, or NONINFRINGEMENT.
* Redistribution, except as permitted by whichever of the GPL
* or MNA you select, is prohibited.
*
* 1. For the GPL license (GPL), you can redistribute and/or
* modify this file under the terms of the GNU General
* Public License, Version 3, as published by the Free Software
* Foundation. You should have received a copy of the GNU
* General Public License, Version 3 along with this program;
* if not, write to the Free Software Foundation, Inc., 51
* Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* 2. For the Magnolia Network Agreement (MNA), this file
* and the accompanying materials are made available under the
* terms of the MNA which accompanies this distribution, and
* is available at http://www.magnolia-cms.com/mna.html
*
* Any modifications to this file must keep this entire header
* intact.
*
*/
package info.magnolia.jcr.util;
import info.magnolia.test.mock.jcr.MockNode;
import info.magnolia.test.mock.jcr.MockValue;
import java.math.BigDecimal;
import java.util.Calendar;
import java.util.Date;
import javax.jcr.Property;
import javax.jcr.RepositoryException;
import javax.jcr.Value;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Tests for PropertyUtil.
*/
public class PropertyUtilTest {
private MockNode root;
private static final String PROPERTY_NAME = "test";
@Before
public void setUp() {
root = new MockNode("root");
}
@Test
public void testOrderLast() throws RepositoryException {
// GIVEN
final String newPropertyName = "newPropertyName";
final Property property = root.setProperty(PROPERTY_NAME, "value");
// WHEN
PropertyUtil.renameProperty(property, newPropertyName);
// THEN
assertTrue(!root.hasProperty(PROPERTY_NAME));
assertEquals("value", root.getProperty(newPropertyName).getString());
}
@Test(expected = IllegalArgumentException.class)
public void testSetPropertyThrowsExceptionOnNullNode() throws RepositoryException {
PropertyUtil.setProperty(null, null, null);
}
@Test(expected = IllegalArgumentException.class)
public void testSetPropertyThrowsExceptionOnNullName() throws RepositoryException {
PropertyUtil.setProperty(root, null, null);
}
@Test
public void testSetPropertyToString() throws RepositoryException {
// GIVEN
final Object value = "value";
PropertyUtil.setProperty(root, PROPERTY_NAME, value);
// WHEN
String res = root.getProperty(PROPERTY_NAME).getString();
// THEN
assertEquals(value, res);
}
@Test
public void testSetPropertyToBigDecimal() throws RepositoryException {
// GIVEN
final Object value = BigDecimal.ONE;
PropertyUtil.setProperty(root, PROPERTY_NAME, value);
// WHEN
BigDecimal res = root.getProperty(PROPERTY_NAME).getDecimal();
// THEN
assertEquals(value, res);
}
@Test
public void testSetPropertyToCalendar() throws RepositoryException {
// GIVEN
final Object value = Calendar.getInstance();
PropertyUtil.setProperty(root, PROPERTY_NAME, value);
// WHEN
Calendar res = root.getProperty(PROPERTY_NAME).getDate();
// THEN
assertEquals(value, res);
}
@Test
public void testSetPropertyToDate() throws RepositoryException {
// GIVEN
final Object value = new Date();
PropertyUtil.setProperty(root, PROPERTY_NAME, value);
// WHEN
Calendar res = root.getProperty(PROPERTY_NAME).getDate();
// THEN
assertEquals(value, res.getTime());
}
@Test
public void testSetPropertyToValue() throws RepositoryException {
// GIVEN
final Object value = new MockValue("x");
PropertyUtil.setProperty(root, PROPERTY_NAME, value);
// WHEN
Value res = root.getProperty(PROPERTY_NAME).getValue();
// THEN
assertEquals(value, res);
}
@Test
public void testSetPropertyToLong() throws RepositoryException {
// GIVEN
final Object value = Long.valueOf(123l);
PropertyUtil.setProperty(root, PROPERTY_NAME, value);
// WHEN
long resr = root.getProperty(PROPERTY_NAME).getLong();
// THEN
assertEquals(value, resr);
}
@Test
public void testSetPropertyToDouble() throws RepositoryException {
// GIVEN
final Object value = Double.valueOf("42.195");
PropertyUtil.setProperty(root, PROPERTY_NAME, value);
// WHEN
double res = root.getProperty(PROPERTY_NAME).getDouble();
// THEN
assertEquals(value, res);
}
@Test
public void testSetPropertyToBoolean() throws RepositoryException {
// GIVEN
final Object value = Boolean.TRUE;
PropertyUtil.setProperty(root, PROPERTY_NAME, value);
// WHEN
boolean res = root.getProperty(PROPERTY_NAME).getBoolean();
// THEN
assertEquals(value, res);
}
@Test
public void testSetPropertyToNode() throws RepositoryException {
// GIVEN
final String identifier = "identifier";
final MockNode referenced = new MockNode("referenced");
referenced.setIdentifier(identifier);
PropertyUtil.setProperty(root, PROPERTY_NAME, referenced);
// WHEN
String res = root.getProperty(PROPERTY_NAME).getString();
// THEN
assertEquals(identifier, res);
}
@Test
public void testSetPropertyToNul() throws RepositoryException {
// GIVEN
final Object value = null;
// WHEN
PropertyUtil.setProperty(root, PROPERTY_NAME, value);
// THEN
assertFalse(root.hasProperty(PROPERTY_NAME));
}
@Test
public void testGetStringTwoArgs() throws RepositoryException {
// GIVEN
String value = "value";
root.setProperty(PROPERTY_NAME, value);
// WHEN
String res = PropertyUtil.getString(root, PROPERTY_NAME);
// THEN
assertEquals(value, res);
}
@Test
public void testGetStringThreeArgs() throws RepositoryException {
// GIVEN
String defaultValue = "defaultValue";
String value = "value";
root.setProperty(PROPERTY_NAME, value);
// WHEN
String res = PropertyUtil.getString(root, PROPERTY_NAME, defaultValue);
// THEN
assertEquals(value, res);
}
@Test
public void testGetStringThreeArgsBadNodeName() throws RepositoryException {
// GIVEN
String defaultValue = "defaultValue";
String value = "value";
root.setProperty(PROPERTY_NAME + "xx", value);
// WHEN
String res = PropertyUtil.getString(root, PROPERTY_NAME, defaultValue);
// THEN
assertEquals(defaultValue, res);
}
@Test
public void testGetStringThreeArgsBadNodeType() throws RepositoryException {
// GIVEN
String defaultValue = "defaultValue";
BigDecimal value = BigDecimal.ONE;
root.setProperty(PROPERTY_NAME, value);
// WHEN
String res = PropertyUtil.getString(root, PROPERTY_NAME, defaultValue);
// THEN
assertEquals(value.toString(), res);
}
@Test
public void testGetDateTwoArgs() throws RepositoryException {
// GIVEN
Calendar value = Calendar.getInstance();
value.set(Calendar.YEAR, 2011);
value.set(Calendar.MONTH, 9 - 1);
value.set(Calendar.DAY_OF_MONTH, 5);
value.set(Calendar.HOUR_OF_DAY, 0);
value.set(Calendar.MINUTE, 0);
value.set(Calendar.SECOND, 0);
value.set(Calendar.MILLISECOND, 0);
root.setProperty(PROPERTY_NAME, value);
// WHEN
Calendar res = PropertyUtil.getDate(root, PROPERTY_NAME);
// THEN
assertEquals(value, res);
}
@Test
public void testGetDateThreeArgs() throws RepositoryException {
// GIVEN
Calendar defaultValue = Calendar.getInstance();
Calendar value = Calendar.getInstance();
value.set(Calendar.YEAR, 2011);
value.set(Calendar.MONTH, 9 - 1);
value.set(Calendar.DAY_OF_MONTH, 5);
value.set(Calendar.HOUR_OF_DAY, 0);
value.set(Calendar.MINUTE, 0);
value.set(Calendar.SECOND, 0);
value.set(Calendar.MILLISECOND, 0);
root.setProperty(PROPERTY_NAME, value);
// WHEN
Calendar res = PropertyUtil.getDate(root, PROPERTY_NAME, defaultValue);
// THEN
assertEquals(value, res);
}
@Test
public void testGetDetThreeArgsBadNodeName() throws RepositoryException {
// GIVEN
Calendar defaultValue = Calendar.getInstance();
Calendar value = Calendar.getInstance();
value.set(Calendar.YEAR, 2011);
value.set(Calendar.MONTH, 9 - 1);
value.set(Calendar.DAY_OF_MONTH, 5);
value.set(Calendar.HOUR_OF_DAY, 0);
value.set(Calendar.MINUTE, 0);
value.set(Calendar.SECOND, 0);
value.set(Calendar.MILLISECOND, 0);
root.setProperty(PROPERTY_NAME + "xx", value);
// WHEN
Calendar res = PropertyUtil.getDate(root, PROPERTY_NAME, defaultValue);
// THEN
assertEquals(defaultValue, res);
}
@Test
public void testGetDateThreeArgsBadNodeType() throws RepositoryException {
// GIVEN
Calendar defaultValue = Calendar.getInstance();
BigDecimal value = BigDecimal.ONE;
root.setProperty(PROPERTY_NAME, value);
// WHEN
Calendar res = PropertyUtil.getDate(root, PROPERTY_NAME, defaultValue);
// THEN
assertEquals(defaultValue, res);
}
@Test
public void testGetBoolean() throws RepositoryException {
boolean defaultValue = false;
boolean value = true;
root.setProperty(PROPERTY_NAME, value);
// WHEN
boolean res = PropertyUtil.getBoolean(root, PROPERTY_NAME, defaultValue);
// THEN
assertEquals(value, res);
}
@Test
public void testGetBooleanBadNodeName() throws RepositoryException {
// GIVEN
boolean defaultValue = false;
boolean value = true;
root.setProperty(PROPERTY_NAME + "xx", value);
// WHEN
boolean res = PropertyUtil.getBoolean(root, PROPERTY_NAME, defaultValue);
// THEN
assertEquals(defaultValue, res);
}
@Test
public void testGetBooleanBadNodeType() throws RepositoryException {
// GIVEN
boolean defaultValue = false;
BigDecimal value = BigDecimal.ONE;
root.setProperty(PROPERTY_NAME, value);
// WHEN
boolean res = PropertyUtil.getBoolean(root, PROPERTY_NAME, defaultValue);
// THEN
assertEquals(defaultValue, res);
}
@Test
public void testGetPropertyOrNull() throws RepositoryException {
// GIVEN
final String propertyValue = "value";
final String propertyName = "myProperty";
root.setProperty(propertyName, propertyValue);
// WHEN
final Property res = PropertyUtil.getPropertyOrNull(root, "myProperty");
// THEN
assertEquals("Props Name should be " + propertyName, propertyName, res.getName());
assertEquals("Props Value should be " + propertyValue, propertyValue, res.getString());
}
@Test
public void testGetPropertyOrNullPathNotFoundException() throws RepositoryException {
// GIVEN
final String propertyValue = "value";
final String propertyName = "myProperty";
root.setProperty(propertyName, propertyValue);
// WHEN
final Property res = PropertyUtil.getPropertyOrNull(root, "myProperty"+2);
// THEN
assertEquals("Should be Null ", null, res);
}
@Test
public void testGetPropertyValueObjectDouble() throws RepositoryException {
// GIVEN
final Object value = Double.valueOf("42.195");
PropertyUtil.setProperty(root, PROPERTY_NAME, value);
// WHEN
double res = (Double)PropertyUtil.getPropertyValueObject(root,PROPERTY_NAME);
// THEN
assertEquals(value, res);
}
@Test
public void testGetPropertyValueObjectString() throws RepositoryException {
// GIVEN
final Object value = "value";
PropertyUtil.setProperty(root, PROPERTY_NAME, value);
// WHEN
String res = (String)PropertyUtil.getPropertyValueObject(root,PROPERTY_NAME);
// THEN
assertEquals(value, res);
}
@Test
public void testGetPropertyValueObjectCalendar() throws RepositoryException {
// GIVEN
final Object value = Calendar.getInstance();
PropertyUtil.setProperty(root, PROPERTY_NAME, value);
// WHEN
Calendar res = Calendar.getInstance();
res.setTime((Date)PropertyUtil.getPropertyValueObject(root,PROPERTY_NAME));
// THEN
assertEquals(value, res);
}
@Test
public void testGetPropertyValueObjectDate() throws RepositoryException {
// GIVEN
final Object value = new Date();
PropertyUtil.setProperty(root, PROPERTY_NAME, value);
// WHEN
Date res = (Date)PropertyUtil.getPropertyValueObject(root,PROPERTY_NAME);
// THEN
assertEquals(value, res);
}
@Test
public void testGetPropertyValueObjectBoolean() throws RepositoryException {
// GIVEN
final Object value = Boolean.TRUE;
PropertyUtil.setProperty(root, PROPERTY_NAME, value);
// WHEN
boolean res = (Boolean)PropertyUtil.getPropertyValueObject(root,PROPERTY_NAME);
// THEN
assertEquals(value, res);
}
@Test
public void testGetPropertyValueObjectLong() throws RepositoryException {
// GIVEN
final Object value = Long.valueOf(123l);
PropertyUtil.setProperty(root, PROPERTY_NAME, value);
// WHEN
long resr = (Long)PropertyUtil.getPropertyValueObject(root,PROPERTY_NAME);
// THEN
assertEquals(value, resr);
}
}