/* * Bitronix Transaction Manager * * Copyright (c) 2010, Bitronix Software. * * This copyrighted material is made available to anyone wishing to use, modify, * copy, or redistribute it subject to the terms and conditions of the GNU * Lesser General Public License, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution; if not, write to: * Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor * Boston, MA 02110-1301 USA */ package bitronix.tm.utils; import junit.framework.TestCase; import java.util.Properties; import java.util.Map; /** * * @author lorban */ public class PropertyUtilsTest extends TestCase { public void testSetProperties() throws Exception { Destination destination = new Destination(); PropertyUtils.setProperty(destination, "props.key", "value"); assertEquals("value", destination.getProps().getProperty("key")); PropertyUtils.setProperty(destination, "subDestination.props.key", "value"); assertEquals("value", destination.getSubDestination().getProps().getProperty("key")); PropertyUtils.setProperty(destination, "anInteger", "10"); assertEquals(10, destination.getAnInteger()); PropertyUtils.setProperty(destination, "subDestination.anInteger", "20"); assertEquals(20, destination.getSubDestination().getAnInteger()); PropertyUtils.setProperty(destination, "aBoolean", "true"); assertEquals(true, destination.isABoolean()); PropertyUtils.setProperty(destination, "aWriteOnlyInt", "20"); PrivateDestination privateDestination = new PrivateDestination(); try { PropertyUtils.setProperty(privateDestination, "subDestination.props.key", "value"); fail("it is not possible to set the 'subDestination' property, PropertyException should have been thrown"); } catch (PropertyException ex) { assertEquals("cannot set property 'subDestination.props.key' - 'subDestination' is null and cannot be auto-filled", ex.getMessage()); } } public void testSetPropertiesObjectLongKey() throws Exception { PrivateDestination destination = new PrivateDestination(); PropertyUtils.setProperty(destination, "props.key", "value1"); PropertyUtils.setProperty(destination, "props.a.dotted.key", "value2"); assertEquals("value1", destination.getProps().get("key")); assertEquals("value2", destination.getProps().get("a.dotted.key")); } public void testSmartGetProperties() throws Exception { Destination destination = new Destination(); destination.setAnInteger(10); destination.setABoolean(true); Properties props = new Properties(); props.setProperty("number1", "one"); props.setProperty("number2", "two"); destination.setProps(props); Map map = PropertyUtils.getProperties(destination); assertEquals(12, map.size()); assertEquals("one", map.get("props.number1")); assertEquals("two", map.get("props.number2")); assertEquals(new Integer(10), map.get("anInteger")); assertEquals(new Boolean(true), map.get("aBoolean")); assertEquals(new Boolean(false), map.get("anotherBoolean")); assertNull(map.get("subDestination")); } public void testSetPrimitiveTypes() throws Exception { Destination destination = new Destination(); PropertyUtils.setProperty(destination, "aString", "this is my string"); PropertyUtils.setProperty(destination, "aBoolean", "true"); PropertyUtils.setProperty(destination, "aByte", "100"); PropertyUtils.setProperty(destination, "aShort", "20000"); PropertyUtils.setProperty(destination, "anInteger", "300000"); PropertyUtils.setProperty(destination, "aLong", "4000000"); PropertyUtils.setProperty(destination, "aFloat", "3.14"); PropertyUtils.setProperty(destination, "aDouble", "0.654987"); assertEquals("this is my string", destination.getAString()); assertEquals(true, destination.isABoolean()); assertEquals(100, destination.getAByte()); assertEquals(20000, destination.getAShort()); assertEquals(300000, destination.getAnInteger()); assertEquals(4000000, destination.getALong()); assertEquals(3.14f, destination.getAFloat(), 0.01f); assertEquals(0.654987, destination.getADouble(), 0.000001); } public void testGetPrimitiveTypes() throws Exception { Destination destination = new Destination(); destination.setAString("this is my string"); destination.setABoolean(true); destination.setAByte((byte) 100); destination.setAShort((short) 20000); destination.setAnInteger(300000); destination.setALong(4000000L); destination.setAFloat(3.14f); destination.setADouble(0.654987); assertEquals("this is my string", PropertyUtils.getProperty(destination, "aString")); assertEquals(Boolean.TRUE, PropertyUtils.getProperty(destination, "aBoolean")); assertEquals(new Byte((byte) 100), PropertyUtils.getProperty(destination, "aByte")); assertEquals(new Short((short) 20000), PropertyUtils.getProperty(destination, "aShort")); assertEquals(new Integer(300000), PropertyUtils.getProperty(destination, "anInteger")); assertEquals(new Long(4000000L), PropertyUtils.getProperty(destination, "aLong")); assertEquals(new Float(3.14f), PropertyUtils.getProperty(destination, "aFloat")); assertEquals(new Double(0.654987), PropertyUtils.getProperty(destination, "aDouble")); } public static class Destination { private Properties props; private Destination subDestination; private int anInteger; private int aWriteOnlyInt; private boolean aBoolean; private boolean anotherBoolean; private String aString; private byte aByte; private short aShort; private long aLong; private float aFloat; private double aDouble; public Properties getProps() { return props; } public void setProps(Properties props) { this.props = props; } public Destination getSubDestination() { return subDestination; } public void setSubDestination(Destination subDestination) { this.subDestination = subDestination; } public int getAnInteger() { return anInteger; } public void setAnInteger(int anInteger) { this.anInteger = anInteger; } public void setAWriteOnlyInt(int aWriteOnlyInt) { this.aWriteOnlyInt = aWriteOnlyInt; } public boolean isABoolean() { return aBoolean; } public void setABoolean(boolean aBoolean) { this.aBoolean = aBoolean; } public boolean isAnotherBoolean() { return anotherBoolean; } public void setAnotherBoolean(boolean anotherBoolean) { this.anotherBoolean = anotherBoolean; } public String getAString() { return aString; } public void setAString(String aString) { this.aString = aString; } public byte getAByte() { return aByte; } public void setAByte(byte aByte) { this.aByte = aByte; } public short getAShort() { return aShort; } public void setAShort(short aShort) { this.aShort = aShort; } public long getALong() { return aLong; } public void setALong(long aLong) { this.aLong = aLong; } public float getAFloat() { return aFloat; } public void setAFloat(float aFloat) { this.aFloat = aFloat; } public double getADouble() { return aDouble; } public void setADouble(double aDouble) { this.aDouble = aDouble; } } private class PrivateDestination { private Properties props; private PrivateDestination subDestination; public Properties getProps() { return props; } public void setProps(Properties props) { this.props = props; } public PrivateDestination getSubDestination() { return subDestination; } public void setSubDestination(PrivateDestination subDestination) { this.subDestination = subDestination; } } }