package ch.x42.terye; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import java.math.BigDecimal; import java.util.Calendar; import java.util.GregorianCalendar; import javax.jcr.Node; import javax.jcr.PathNotFoundException; import javax.jcr.Property; import javax.jcr.PropertyType; import javax.jcr.RepositoryException; import javax.jcr.Session; import org.junit.Before; import org.junit.Test; public class PropertyTest extends BaseTest { private Property property1; @Override @Before public void setUp() throws Exception { super.setUp(); property1 = session.getProperty("/property1"); } @Test public void testStringProperty() throws RepositoryException { String value = "abcdef"; Property property = root.setProperty("string", value); assertEquals(PropertyType.STRING, property.getType()); assertEquals(value, property.getString()); assertEquals(PropertyType.STRING, property.getValue().getType()); assertEquals(value, property.getValue().getString()); session.save(); // verify property when fetched from persistent state Session session2 = repository.login(); property = session2.getRootNode().getProperty("string"); assertEquals(PropertyType.STRING, property.getType()); assertEquals(value, property.getString()); assertEquals(PropertyType.STRING, property.getValue().getType()); assertEquals(value, property.getValue().getString()); session2.logout(); } @Test public void testLongProperty() throws RepositoryException { long value = 1234567890123456L; Property property = root.setProperty("long", value); assertEquals(PropertyType.LONG, property.getType()); assertEquals(value, property.getLong()); assertEquals(PropertyType.LONG, property.getValue().getType()); assertEquals(value, property.getValue().getLong()); session.save(); // verify property when fetched from persistent state Session session2 = repository.login(); property = session2.getRootNode().getProperty("long"); assertEquals(PropertyType.LONG, property.getType()); assertEquals(value, property.getLong()); assertEquals(PropertyType.LONG, property.getValue().getType()); assertEquals(value, property.getValue().getLong()); session2.logout(); } @Test public void testDoubleProperty() throws RepositoryException { double value = 0.5D; Property property = root.setProperty("double", value); assertEquals(PropertyType.DOUBLE, property.getType()); assertEquals(value, property.getDouble(), 0); assertEquals(PropertyType.DOUBLE, property.getValue().getType()); assertEquals(value, property.getValue().getDouble(), 0); session.save(); // verify property when fetched from persistent state Session session2 = repository.login(); property = session2.getRootNode().getProperty("double"); assertEquals(PropertyType.DOUBLE, property.getType()); assertEquals(value, property.getDouble(), 0); assertEquals(PropertyType.DOUBLE, property.getValue().getType()); assertEquals(value, property.getValue().getDouble(), 0); session2.logout(); } @Test public void testDecimalProperty() throws RepositoryException { BigDecimal value = new BigDecimal( "3.141592653589793238462643383279502884197169399375105820974944592307816406286"); Property property = root.setProperty("decimal", value); assertEquals(PropertyType.DECIMAL, property.getType()); assertEquals(value, property.getDecimal()); assertEquals(PropertyType.DECIMAL, property.getValue().getType()); assertEquals(value, property.getValue().getDecimal()); session.save(); // verify property when fetched from persistent state Session session2 = repository.login(); property = session2.getRootNode().getProperty("decimal"); assertEquals(PropertyType.DECIMAL, property.getType()); assertEquals(value, property.getDecimal()); assertEquals(PropertyType.DECIMAL, property.getValue().getType()); assertEquals(value, property.getValue().getDecimal()); session2.logout(); } @Test public void testBooleanProperty() throws RepositoryException { boolean value = true; Property property = root.setProperty("boolean", value); assertEquals(PropertyType.BOOLEAN, property.getType()); assertEquals(value, property.getBoolean()); assertEquals(PropertyType.BOOLEAN, property.getValue().getType()); assertEquals(value, property.getValue().getBoolean()); session.save(); // verify property when fetched from persistent state Session session2 = repository.login(); property = session2.getRootNode().getProperty("boolean"); assertEquals(PropertyType.BOOLEAN, property.getType()); assertEquals(value, property.getBoolean()); assertEquals(PropertyType.BOOLEAN, property.getValue().getType()); assertEquals(value, property.getValue().getBoolean()); session2.logout(); } @Test public void testDateProperty() throws RepositoryException { Calendar value = new GregorianCalendar(2012, Calendar.SEPTEMBER, 21); Property property = root.setProperty("date", value); assertEquals(PropertyType.DATE, property.getType()); assertEquals(value, property.getDate()); assertEquals(PropertyType.DATE, property.getValue().getType()); assertEquals(value, property.getValue().getDate()); session.save(); // verify property when fetched from persistent state Session session2 = repository.login(); property = session2.getRootNode().getProperty("date"); assertEquals(PropertyType.DATE, property.getType()); assertEquals(value, property.getDate()); assertEquals(PropertyType.DATE, property.getValue().getType()); assertEquals(value, property.getValue().getDate()); session2.logout(); } @Test public void testGetParent() throws RepositoryException { Node parent = property1.getParent(); assertEquals(root.getName(), parent.getName()); assertEquals(root.getPath(), parent.getPath()); } @Test(expected = PathNotFoundException.class) public void testRemove() throws RepositoryException { property1.remove(); assertFalse(session.propertyExists("/property1")); assertFalse(root.hasProperty("property1")); assertFalse(root.hasProperties()); root.getProperty("property1"); } @Test public void testRemoveSave() throws RepositoryException { property1.remove(); session.save(); Session session2 = repository.login(); assertFalse(session2.propertyExists("/property1")); assertFalse(session2.getRootNode().hasProperty("property1")); assertFalse(session2.getRootNode().hasProperties()); session2.logout(); } @Test public void testIsNode() throws RepositoryException { assertFalse(property1.isNode()); } }