// Copyright (c) 2003-present, Jodd Team (http://jodd.org) // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // // 2. Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. package jodd.bean; import jodd.bean.fixtures.Abean; import jodd.bean.fixtures.Bbean; import jodd.bean.fixtures.Cbean; import jodd.bean.fixtures.Color; import jodd.bean.fixtures.EnumBean; import jodd.bean.fixtures.FooBean; import jodd.bean.fixtures.FooBean2; import jodd.bean.fixtures.FooBean3; import jodd.bean.fixtures.FooBean4; import jodd.bean.fixtures.FooBeanSlim; import jodd.bean.fixtures.GetIsBool; import jodd.bean.fixtures.Gig; import jodd.bean.fixtures.IsGetBool; import jodd.bean.fixtures.MixBean; import jodd.bean.fixtures.Status; import jodd.bean.fixtures.SubBean; import jodd.bean.fixtures.SupBean; import jodd.bean.fixtures.UppercaseBean; import jodd.bean.fixtures.XBean; import jodd.bean.fixtures.ZBean; import jodd.introspector.ClassDescriptor; import jodd.introspector.ClassIntrospector; import jodd.introspector.MethodDescriptor; import jodd.introspector.PropertyDescriptor; import jodd.mutable.MutableInteger; import org.junit.Test; import java.math.BigDecimal; import java.sql.Date; import java.sql.Time; import java.sql.Timestamp; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import static org.junit.Assert.*; @SuppressWarnings("UnnecessaryBoxing") public class BeanUtilTest { @Test public void testSimpleProperty() { FooBean fb = new FooBean(); // read non initialized property (null) assertNull(BeanUtil.pojo.getSimpleProperty(fb, "fooInteger")); assertTrue(BeanUtil.pojo.hasProperty(fb, "fooInteger")); assertEquals(Integer.class, BeanUtil.pojo.getPropertyType(fb, "fooInteger")); // set property BeanUtil.pojo.setSimpleProperty(fb, "fooInteger", new Integer(173)); // read initialized property assertEquals(new Integer(173), BeanUtil.pojo.getSimpleProperty(fb, "fooInteger")); // read non-initialized simple property (zero) assertEquals(new Integer(0), BeanUtil.pojo.getSimpleProperty(fb, "fooint")); assertTrue(BeanUtil.pojo.hasProperty(fb, "fooint")); assertEquals(int.class, BeanUtil.pojo.getPropertyType(fb, "fooint")); assertFalse(BeanUtil.pojo.hasProperty(fb, "fooint-xxx")); assertNull(BeanUtil.pojo.getPropertyType(fb, "fooint-xxx")); // read forced non-initialized property (not null) assertTrue(BeanUtil.pojo.hasProperty(fb, "fooByte")); assertEquals(Byte.class, BeanUtil.pojo.getPropertyType(fb, "fooByte")); assertEquals(new Byte((byte) 0), BeanUtil.forced.getSimpleProperty(fb, "fooByte")); Map m = new HashMap(); // set property in map BeanUtil.pojo.setSimpleProperty(m, "foo", new Integer(173)); // read property from map assertTrue(BeanUtil.pojo.hasProperty(m, "foo")); assertEquals(new Integer(173), BeanUtil.pojo.getSimpleProperty(m, "foo")); // read non-initialized map property assertTrue(BeanUtil.pojo.hasProperty(fb, "fooMap")); assertEquals(Map.class, BeanUtil.pojo.getPropertyType(fb, "fooMap")); assertNull(BeanUtil.pojo.getSimpleProperty(fb, "fooMap")); // read forced non-initialized map property assertNotNull(BeanUtil.forced.getSimpleProperty(fb, "fooMap")); // read non-initialized list property assertTrue(BeanUtil.pojo.hasProperty(fb, "fooList")); assertEquals(List.class, BeanUtil.pojo.getPropertyType(fb, "fooList")); assertNull(BeanUtil.pojo.getSimpleProperty(fb, "fooList")); // read forced non-initialized list property assertNotNull(BeanUtil.forced.getSimpleProperty(fb, "fooList")); // read non-initialized array (null) assertTrue(BeanUtil.pojo.hasProperty(fb, "fooStringA")); assertEquals(String[].class, BeanUtil.pojo.getPropertyType(fb, "fooStringA")); assertNull(BeanUtil.pojo.getSimpleProperty(fb, "fooStringA")); String[] tmp = new String[10]; tmp[2] = "foo"; // set array property BeanUtil.pojo.setSimpleProperty(fb, "fooStringA", tmp); // read array property tmp = BeanUtil.pojo.getSimpleProperty(fb, "fooStringA"); assertEquals("foo", tmp[2]); fb.setFooStringA(null); // read non-initialized array property assertTrue(BeanUtil.pojo.hasProperty(fb, "fooStringA")); assertEquals(String[].class, BeanUtil.pojo.getPropertyType(fb, "fooStringA")); assertNull(BeanUtil.pojo.getSimpleProperty(fb, "fooStringA")); // read forced non-initialized array property assertNotNull(BeanUtil.forced.getSimpleProperty(fb, "fooStringA")); } @Test public void testSimplePropertySlimPrivate() { FooBeanSlim fb = new FooBeanSlim(); // read non initialized property (null) assertTrue(BeanUtil.declared.hasProperty(fb, "fooInteger")); assertNull(BeanUtil.declared.getSimpleProperty(fb, "fooInteger")); assertNull(BeanUtil.pojo.getPropertyType(fb, "fooInteger")); assertEquals(Integer.class, BeanUtil.declared.getPropertyType(fb, "fooInteger")); // set property BeanUtil.declared.setSimpleProperty(fb, "fooInteger", new Integer(173)); // read initialized property assertEquals(new Integer(173), BeanUtil.declared.getSimpleProperty(fb, "fooInteger")); // read non-initialized simple property (zero) assertTrue(BeanUtil.declared.hasProperty(fb, "fooint")); assertEquals(new Integer(0), BeanUtil.declared.getSimpleProperty(fb, "fooint")); // read forced non-initialized property (not null) assertTrue(BeanUtil.declared.hasProperty(fb, "fooByte")); assertEquals(new Byte((byte) 0), BeanUtil.declaredForced.getSimpleProperty(fb, "fooByte")); Map m = new HashMap(); // set property in map assertFalse(BeanUtil.declared.hasProperty(m, "foo")); BeanUtil.declared.setSimpleProperty(m, "foo", new Integer(173)); // read property from map assertTrue(BeanUtil.declared.hasProperty(m, "foo")); assertEquals(new Integer(173), BeanUtil.declared.getSimpleProperty(m, "foo")); // read non-initialized map property assertTrue(BeanUtil.declared.hasProperty(fb, "fooMap")); assertNull(BeanUtil.declared.getSimpleProperty(fb, "fooMap")); // read forced non-initialized map property assertNotNull(BeanUtil.declaredForced.getSimpleProperty(fb, "fooMap")); // read non-initialized list property assertTrue(BeanUtil.declared.hasProperty(fb, "fooList")); assertNull(BeanUtil.declared.getSimpleProperty(fb, "fooList")); // read forced non-initialized list property assertNotNull(BeanUtil.declaredForced.getSimpleProperty(fb, "fooList")); // read non-initialized array (null) assertTrue(BeanUtil.declared.hasProperty(fb, "fooStringA")); assertNull(BeanUtil.declared.getSimpleProperty(fb, "fooStringA")); String[] tmp = new String[10]; tmp[2] = "foo"; // set array property BeanUtil.declared.setSimpleProperty(fb, "fooStringA", tmp); // read array property tmp = BeanUtil.declared.getSimpleProperty(fb, "fooStringA"); assertEquals("foo", tmp[2]); fb = new FooBeanSlim(); // read non-initialized array property assertNull(BeanUtil.declared.getSimpleProperty(fb, "fooStringA")); // read forced non-initialized array property assertNotNull(BeanUtil.declaredForced.getSimpleProperty(fb, "fooStringA")); } @Test public void testIndexProperty() { FooBean fb = new FooBean(); // read forced non-initialized array property assertNull(fb.getFooStringA()); assertFalse(BeanUtil.declared.hasProperty(fb, "fooStringA[0]")); assertEquals(String.class, BeanUtil.declared.getPropertyType(fb, "fooStringA[0]")); try { BeanUtil.forced.getIndexProperty(fb, "fooStringA", 0); fail(); } catch (ArrayIndexOutOfBoundsException aioobex) { // ignore } assertNotNull(fb.getFooStringA()); assertEquals(0, fb.getFooStringA().length); // set array property (non-forced) assertFalse(BeanUtil.declared.hasProperty(fb, "fooStringA[7]")); assertEquals(String.class, BeanUtil.declared.getPropertyType(fb, "fooStringA[7]")); try { BeanUtil.pojo.setIndexProperty(fb, "fooStringA", 7, "xxx"); fail(); } catch (ArrayIndexOutOfBoundsException aioobex) { // ignore } // set forced array property BeanUtil.forced.setIndexProperty(fb, "fooStringA", 40, "zzz"); assertTrue(BeanUtil.declared.hasProperty(fb, "fooStringA[40]")); assertEquals(String.class, BeanUtil.declared.getPropertyType(fb, "fooStringA[40]")); assertEquals(String[].class, BeanUtil.declared.getPropertyType(fb, "fooStringA")); assertEquals(String.class, BeanUtil.declared.getPropertyType(fb, "fooStringA[40]")); assertEquals("zzz", fb.getFooStringA()[40]); assertEquals(41, fb.getFooStringA().length); // set null assertFalse(BeanUtil.declared.hasProperty(fb, "fooStringA[43]")); assertEquals(String.class, BeanUtil.declared.getPropertyType(fb, "fooStringA[43]")); BeanUtil.forced.setIndexProperty(fb, "fooStringA", 43, null); assertTrue(BeanUtil.declared.hasProperty(fb, "fooStringA[43]")); assertEquals(String.class, BeanUtil.declared.getPropertyType(fb, "fooStringA[43]")); assertNull(fb.getFooStringA()[43]); assertEquals(44, fb.getFooStringA().length); // get forced assertTrue(BeanUtil.declared.hasProperty(fb, "fooStringA[15]")); assertNotNull(BeanUtil.forced.getIndexProperty(fb, "fooStringA", 15)); assertNull(fb.getFooStringA()[0]); assertNotNull(fb.getFooStringA()[15]); // set uninitialized array property fb.setFooStringA(null); assertEquals(String.class, BeanUtil.declared.getPropertyType(fb, "fooStringA[43]")); BeanUtil.forced.setIndexProperty(fb, "fooStringA", 7, "ccc"); assertEquals("ccc", fb.getFooStringA()[7]); // read forced non-initialized list property assertNull(fb.getFooList()); assertFalse(BeanUtil.declared.hasProperty(fb, "fooList[1]")); assertEquals(Object.class, BeanUtil.declared.getPropertyType(fb, "fooList[1]")); try { BeanUtil.forced.getIndexProperty(fb, "fooList", 1); fail(); } catch (IndexOutOfBoundsException ioobex) { // ignore } assertNotNull(fb.getFooList()); // set list property (non-forced) try { BeanUtil.pojo.setIndexProperty(fb, "fooList", 1, "xxx"); fail(); } catch (IndexOutOfBoundsException ioobex) { // ignore } // set forced list property assertFalse(BeanUtil.declared.hasProperty(fb, "fooList[40]")); BeanUtil.forced.setIndexProperty(fb, "fooList", 40, "zzz"); assertTrue(BeanUtil.declared.hasProperty(fb, "fooList[40]")); assertEquals(Object.class, BeanUtil.declared.getPropertyType(fb, "fooList[40]")); // method type, not values type assertEquals(Object.class, BeanUtil.declared.getPropertyType(fb, "fooList[39]")); assertEquals("zzz", fb.getFooList().get(40)); assertEquals(41, fb.getFooList().size()); // set forced unitialized list property fb.setFooList(null); assertFalse(BeanUtil.declared.hasProperty(fb, "fooList[1]")); BeanUtil.forced.setIndexProperty(fb, "fooList", 1, "xxx"); assertTrue(BeanUtil.declared.hasProperty(fb, "fooList[1]")); assertEquals("xxx", fb.getFooList().get(1)); assertEquals(2, fb.getFooList().size()); // read forced non-initialized map property assertFalse(BeanUtil.declared.hasProperty(fb, "fooMap[foo]")); assertEquals(Object.class, BeanUtil.declared.getPropertyType(fb, "fooMap[foo]")); assertNull(BeanUtil.forced.getProperty(fb, "fooMap[foo]")); assertNotNull(fb.getFooMap()); // set non-initialized map property fb.setFooMap(null); assertFalse(BeanUtil.declared.hasProperty(fb, "fooMap[foo]")); BeanUtil.forced.setProperty(fb, "fooMap[foo]", "xxx"); assertTrue(BeanUtil.declared.hasProperty(fb, "fooMap[foo]")); assertEquals("xxx", fb.getFooMap().get("foo")); assertEquals(1, fb.getFooMap().size()); } @Test public void testIndexPropertySlimPrivate() { FooBeanSlim fb = new FooBeanSlim(); // read forced non-initialized array property assertNull(fb.getStringA()); try { BeanUtil.declaredForced.getIndexProperty(fb, "fooStringA", 0); fail(); } catch (ArrayIndexOutOfBoundsException aioobex) { // ignore } assertNotNull(fb.getStringA()); assertEquals(0, fb.getStringA().length); // set array property (non-forced) try { BeanUtil.declared.setIndexProperty(fb, "fooStringA", 7, "xxx"); fail(); } catch (ArrayIndexOutOfBoundsException aioobex) { // ignore } // set forced array property BeanUtil.declaredForced.setIndexProperty(fb, "fooStringA", 40, "zzz"); assertEquals("zzz", fb.getStringA()[40]); assertEquals(41, fb.getStringA().length); BeanUtil.declaredForced.setIndexProperty(fb, "fooStringA", 43, null); assertNull(fb.getStringA()[43]); assertEquals(44, fb.getStringA().length); // set uninitialized array property fb = new FooBeanSlim(); assertNull(fb.getStringA()); BeanUtil.declaredForced.setIndexProperty(fb, "fooStringA", 7, "ccc"); assertNotNull(fb.getStringA()); assertEquals("ccc", fb.getStringA()[7]); // read forced non-initialized list property assertNull(fb.getList()); try { BeanUtil.declaredForced.getIndexProperty(fb, "fooList", 1); fail(); } catch (IndexOutOfBoundsException ioobex) { // ignore } assertNotNull(fb.getList()); // set list property (non-forced) try { BeanUtil.declared.setIndexProperty(fb, "fooList", 1, "xxx"); fail(); } catch (IndexOutOfBoundsException ioobex) { // ignore } // set forced list property BeanUtil.declaredForced.setIndexProperty(fb, "fooList", 40, "zzz"); assertEquals("zzz", fb.getList().get(40)); assertEquals(41, fb.getList().size()); // set forced unitialized list property fb = new FooBeanSlim(); BeanUtil.declaredForced.setIndexProperty(fb, "fooList", 1, "xxx"); assertEquals("xxx", fb.getList().get(1)); // read forced non-initialized map property assertNull(fb.getMap()); assertNull(BeanUtil.declaredForced.getProperty(fb, "fooMap[foo]")); assertNotNull(fb.getMap()); // set non-initialized map property fb = new FooBeanSlim(); assertNull(fb.getMap()); BeanUtil.declaredForced.setProperty(fb, "fooMap[foo]", "xxx"); assertNotNull(fb.getMap()); assertEquals("xxx", fb.getMap().get("foo")); } // ---------------------------------------------------------------- types @Test public void testSetPropertyNumbers() { FooBean fb = new FooBean(); // Integer String propName = "fooInteger"; BeanUtil.pojo.setProperty(fb, propName, new Integer(1)); assertEquals(1, fb.getFooInteger().intValue()); BeanUtil.pojo.setProperty(fb, propName, null); assertNull(fb.getFooInteger()); BeanUtil.pojo.setProperty(fb, propName, "2"); // valid string assertEquals(2, fb.getFooInteger().intValue()); try { BeanUtil.pojo.setProperty(fb, propName, "x"); // invalid string - value stays the same fail(); } catch (Exception ignored) { } assertEquals(2, fb.getFooInteger().intValue()); // int propName = "fooint"; BeanUtil.pojo.setProperty(fb, propName, new Integer(1)); assertEquals(1, fb.getFooint()); try { BeanUtil.pojo.setProperty(fb, propName, null); // null is not an int fail(); } catch (Exception ignored) { } assertEquals(1, fb.getFooint()); BeanUtil.pojo.setProperty(fb, propName, "2"); assertEquals(2, fb.getFooint()); try { BeanUtil.pojo.setProperty(fb, propName, "w"); // invalid string fail(); } catch (Exception ignored) { } assertEquals(2, fb.getFooint()); // Long propName = "fooLong"; BeanUtil.pojo.setProperty(fb, propName, new Long(1)); assertEquals(1L, fb.getFooLong().longValue()); BeanUtil.pojo.setProperty(fb, propName, new Integer(3)); assertEquals(3L, fb.getFooLong().longValue()); BeanUtil.pojo.setProperty(fb, propName, null); assertNull(fb.getFooLong()); BeanUtil.pojo.setProperty(fb, propName, "2"); // valid string assertEquals(2L, fb.getFooLong().longValue()); try { BeanUtil.pojo.setProperty(fb, propName, "x"); // invalid string - value stays the same fail(); } catch (Exception ignored) { } assertEquals(2L, fb.getFooLong().longValue()); // long propName = "foolong"; BeanUtil.pojo.setProperty(fb, propName, new Long(1)); assertEquals(1L, fb.getFoolong()); BeanUtil.pojo.setProperty(fb, propName, new Integer(3)); assertEquals(3L, fb.getFoolong()); try { BeanUtil.pojo.setProperty(fb, propName, null); // null is not a long fail(); } catch (Exception ignored) { } assertEquals(3L, fb.getFoolong()); BeanUtil.pojo.setProperty(fb, propName, "2"); // valid string assertEquals(2L, fb.getFoolong()); try { BeanUtil.pojo.setProperty(fb, propName, "w"); // invalid string fail(); } catch (Exception ignored) { } assertEquals(2L, fb.getFoolong()); // Byte propName = "fooByte"; BeanUtil.pojo.setProperty(fb, propName, new Byte((byte) 1)); assertEquals(1, fb.getFooByte().byteValue()); BeanUtil.pojo.setProperty(fb, propName, new Integer(3)); assertEquals(3, fb.getFooByte().byteValue()); BeanUtil.pojo.setProperty(fb, propName, new Integer(257)); assertEquals(1, fb.getFooByte().byteValue()); // lower byte of 257 BeanUtil.pojo.setProperty(fb, propName, null); assertNull(fb.getFooByte()); BeanUtil.pojo.setProperty(fb, propName, "2"); // valid string assertEquals(2, fb.getFooByte().byteValue()); try { BeanUtil.pojo.setProperty(fb, propName, "x"); // invalid string - value stays the same fail(); } catch (Exception ignored) { } assertEquals(2, fb.getFooByte().byteValue()); // byte propName = "foobyte"; BeanUtil.pojo.setProperty(fb, propName, new Byte((byte) 1)); assertEquals(1, fb.getFoobyte()); BeanUtil.pojo.setProperty(fb, propName, new Integer(3)); assertEquals(3, fb.getFoobyte()); BeanUtil.pojo.setProperty(fb, propName, new Integer(257)); assertEquals(1, fb.getFoobyte()); try { BeanUtil.pojo.setProperty(fb, propName, null); // null is not a byte fail(); } catch (Exception ignored) { } assertEquals(1, fb.getFoobyte()); BeanUtil.pojo.setProperty(fb, propName, "2"); // valid string assertEquals(2, fb.getFoobyte()); try { BeanUtil.pojo.setProperty(fb, propName, "x"); // invalid string - value stays the same fail(); } catch (Exception ignored) { } assertEquals(2, fb.getFoobyte()); // Boolean propName = "fooBoolean"; BeanUtil.pojo.setProperty(fb, propName, Boolean.TRUE); assertTrue(fb.getFooBoolean()); BeanUtil.pojo.setProperty(fb, propName, Boolean.FALSE); assertFalse(fb.getFooBoolean()); BeanUtil.pojo.setProperty(fb, propName, null); assertNull(fb.getFooBoolean()); BeanUtil.pojo.setProperty(fb, propName, "yes"); assertTrue(fb.getFooBoolean()); BeanUtil.pojo.setProperty(fb, propName, "y"); assertTrue(fb.getFooBoolean()); BeanUtil.pojo.setProperty(fb, propName, "true"); assertTrue(fb.getFooBoolean()); BeanUtil.pojo.setProperty(fb, propName, "on"); assertTrue(fb.getFooBoolean()); BeanUtil.pojo.setProperty(fb, propName, "1"); assertTrue(fb.getFooBoolean()); BeanUtil.pojo.setProperty(fb, propName, "no"); assertFalse(fb.getFooBoolean()); BeanUtil.pojo.setProperty(fb, propName, "n"); assertFalse(fb.getFooBoolean()); BeanUtil.pojo.setProperty(fb, propName, "false"); assertFalse(fb.getFooBoolean()); BeanUtil.pojo.setProperty(fb, propName, "off"); assertFalse(fb.getFooBoolean()); BeanUtil.pojo.setProperty(fb, propName, "0"); assertFalse(fb.getFooBoolean()); // boolean propName = "fooboolean"; BeanUtil.pojo.setProperty(fb, propName, Boolean.TRUE); assertTrue(fb.getFooboolean()); BeanUtil.pojo.setProperty(fb, propName, Boolean.FALSE); assertFalse(fb.getFooboolean()); try { BeanUtil.pojo.setProperty(fb, propName, null); fail(); } catch (Exception ignored) { } assertFalse(fb.getFooboolean()); BeanUtil.pojo.setProperty(fb, propName, "yes"); assertTrue(fb.getFooboolean()); BeanUtil.pojo.setProperty(fb, propName, "y"); assertTrue(fb.getFooboolean()); BeanUtil.pojo.setProperty(fb, propName, "true"); assertTrue(fb.getFooboolean()); BeanUtil.pojo.setProperty(fb, propName, "on"); assertTrue(fb.getFooboolean()); BeanUtil.pojo.setProperty(fb, propName, "1"); assertTrue(fb.getFooboolean()); BeanUtil.pojo.setProperty(fb, propName, "no"); assertFalse(fb.getFooboolean()); BeanUtil.pojo.setProperty(fb, propName, "n"); assertFalse(fb.getFooboolean()); BeanUtil.pojo.setProperty(fb, propName, "false"); assertFalse(fb.getFooboolean()); BeanUtil.pojo.setProperty(fb, propName, "off"); assertFalse(fb.getFooboolean()); BeanUtil.pojo.setProperty(fb, propName, "0"); assertFalse(fb.getFooboolean()); // Float propName = "fooFloat"; BeanUtil.pojo.setProperty(fb, propName, new Float(1.1)); assertEquals(1.1, fb.getFooFloat(), 0.0005); BeanUtil.pojo.setProperty(fb, propName, new Integer(3)); assertEquals(3.0, fb.getFooFloat(), 0.0005); BeanUtil.pojo.setProperty(fb, propName, null); assertNull(fb.getFooFloat()); BeanUtil.pojo.setProperty(fb, propName, "2.2"); // valid string assertEquals(2.2, fb.getFooFloat(), 0.0005); try { BeanUtil.pojo.setProperty(fb, propName, "x"); // invalid string - value stays the same fail(); } catch (Exception ignored) { } assertEquals(2.2, fb.getFooFloat(), 0.0005); // float propName = "foofloat"; BeanUtil.pojo.setProperty(fb, propName, new Float(1.1)); assertEquals(1.1, fb.getFoofloat(), 0.0005); BeanUtil.pojo.setProperty(fb, propName, new Integer(3)); assertEquals(3.0, fb.getFoofloat(), 0.0005); try { BeanUtil.pojo.setProperty(fb, propName, null); // null is not a long fail(); } catch (Exception ignored) { } assertEquals(3.0, fb.getFoofloat(), 0.0005); BeanUtil.pojo.setProperty(fb, propName, "2.2"); // valid string assertEquals(2.2, fb.getFoofloat(), 0.0005); try { BeanUtil.pojo.setProperty(fb, propName, "w"); // invalid string fail(); } catch (Exception ignored) { } assertEquals(2.2, fb.getFoofloat(), 0.0005); // Double propName = "fooDouble"; BeanUtil.pojo.setProperty(fb, propName, new Double(1.1)); assertEquals(1.1, fb.getFooDouble(), 0.0005); BeanUtil.pojo.setProperty(fb, propName, new Integer(3)); assertEquals(3.0, fb.getFooDouble(), 0.0005); BeanUtil.pojo.setProperty(fb, propName, null); assertNull(fb.getFooDouble()); BeanUtil.pojo.setProperty(fb, propName, "2.2"); // valid string assertEquals(2.2, fb.getFooDouble(), 0.0005); try { BeanUtil.pojo.setProperty(fb, propName, "x"); // invalid string - value stays the same fail(); } catch (Exception ignored) { } assertEquals(2.2, fb.getFooDouble(), 0.0005); // double propName = "foodouble"; BeanUtil.pojo.setProperty(fb, propName, new Double(1.1)); assertEquals(1.1, fb.getFoodouble(), 0.0005); BeanUtil.pojo.setProperty(fb, propName, new Integer(3)); assertEquals(3.0, fb.getFoodouble(), 0.0005); try { BeanUtil.pojo.setProperty(fb, propName, null); // null is not a long fail(); } catch (Exception ignored) { } assertEquals(3.0, fb.getFoodouble(), 0.0005); BeanUtil.pojo.setProperty(fb, propName, "2.2"); // valid string assertEquals(2.2, fb.getFoodouble(), 0.0005); try { BeanUtil.pojo.setProperty(fb, propName, "w"); // invalid string fail(); } catch (Exception ignored) { } assertEquals(2.2, fb.getFoodouble(), 0.0005); } @Test public void testSetPropertySql() { FooBean2 fb = new FooBean2(); String propName = "fooTimestamp"; //noinspection deprecation Timestamp ts = new Timestamp(101, 0, 17, 1, 2, 3, 4); assertEquals(Timestamp.class, BeanUtil.pojo.getPropertyType(fb, propName)); BeanUtil.pojo.setProperty(fb, propName, ts); assertEquals("2001-01-17 01:02:03.000000004", fb.getFooTimestamp().toString()); propName = "fooTime"; //noinspection deprecation Time t = new Time(17, 13, 15); BeanUtil.pojo.setProperty(fb, propName, t); assertEquals("17:13:15", fb.getFooTime().toString()); propName = "fooDate"; //noinspection deprecation Date d = new Date(101, 1, 17); assertEquals(Date.class, BeanUtil.pojo.getPropertyType(fb, propName)); BeanUtil.pojo.setProperty(fb, propName, d); assertEquals("2001-02-17", fb.getFooDate().toString()); } @Test public void testSetPropertyMath() { FooBean2 fb = new FooBean2(); String propName = "fooBigDecimal"; assertEquals(BigDecimal.class, BeanUtil.pojo.getPropertyType(fb, propName)); BeanUtil.pojo.setProperty(fb, propName, new BigDecimal("1.2")); assertEquals(1.2, fb.getFooBigDecimal().doubleValue(), 0.0005); } @Test public void testSetPropertyString() { FooBean fb = new FooBean(); // String String propName = "fooString"; BeanUtil.pojo.setProperty(fb, propName, "string"); assertEquals("string", fb.getFooString()); BeanUtil.pojo.setProperty(fb, propName, null); assertNull(fb.getFooString()); // String array propName = "fooStringA"; String[] sa = new String[]{"one", "two", "three"}; BeanUtil.pojo.setProperty(fb, propName, sa); assertEquals("one", fb.getFooStringA()[0]); assertEquals("two", fb.getFooStringA()[1]); assertEquals("three", fb.getFooStringA()[2]); BeanUtil.pojo.setProperty(fb, propName, "just a string"); sa = BeanUtil.pojo.getProperty(fb, propName); assertEquals(1, sa.length); assertEquals("just a string", sa[0]); // Character propName = "fooCharacter"; BeanUtil.pojo.setProperty(fb, propName, new Character('a')); assertEquals('a', fb.getFooCharacter().charValue()); BeanUtil.pojo.setProperty(fb, propName, "1"); assertEquals('1', fb.getFooCharacter().charValue()); BeanUtil.pojo.setProperty(fb, propName, new Integer(789)); assertEquals(789, fb.getFooCharacter().charValue()); // char propName = "foochar"; BeanUtil.pojo.setProperty(fb, propName, new Character('a')); assertEquals('a', fb.getFoochar()); BeanUtil.pojo.setProperty(fb, propName, "1"); assertEquals('1', fb.getFoochar()); BeanUtil.pojo.setProperty(fb, propName, new Integer(789)); assertEquals(789, fb.getFoochar()); } @Test public void testGet() { FooBean fb = new FooBean(); fb.setFooInteger(new Integer(101)); fb.setFooint(102); fb.setFooLong(new Long(103)); fb.setFoolong(104); fb.setFooByte(new Byte((byte) 105)); fb.setFoobyte((byte) 106); fb.setFooCharacter(new Character('7')); fb.setFoochar('8'); fb.setFooBoolean(Boolean.TRUE); fb.setFooboolean(false); fb.setFooFloat(new Float(109.0)); fb.setFoofloat((float) 110.0); fb.setFooDouble(new Double(111.0)); fb.setFoodouble(112.0); fb.setFooString("113"); fb.setFooStringA(new String[]{"114", "115"}); Integer v = BeanUtil.pojo.getProperty(fb, "fooInteger"); assertEquals(101, v.intValue()); v = BeanUtil.pojo.getProperty(fb, "fooint"); assertEquals(102, v.intValue()); Long vl = BeanUtil.pojo.getProperty(fb, "fooLong"); assertEquals(103, vl.longValue()); vl = BeanUtil.pojo.getProperty(fb, "foolong"); assertEquals(104, vl.longValue()); Byte vb = BeanUtil.pojo.getProperty(fb, "fooByte"); assertEquals(105, vb.intValue()); vb = BeanUtil.pojo.getProperty(fb, "foobyte"); assertEquals(106, vb.intValue()); Character c = BeanUtil.pojo.getProperty(fb, "fooCharacter"); assertEquals('7', c.charValue()); c = BeanUtil.pojo.getProperty(fb, "foochar"); assertEquals('8', c.charValue()); Boolean b = BeanUtil.pojo.getProperty(fb, "fooBoolean"); assertTrue(b); b = BeanUtil.pojo.getProperty(fb, "fooboolean"); assertFalse(b); Float f = BeanUtil.pojo.getProperty(fb, "fooFloat"); assertEquals(109.0, f, 0.005); f = BeanUtil.pojo.getProperty(fb, "foofloat"); assertEquals(110.0, f, 0.005); Double d = BeanUtil.pojo.getProperty(fb, "fooDouble"); assertEquals(111.0, d, 0.005); d = BeanUtil.pojo.getProperty(fb, "foodouble"); assertEquals(112.0, d, 0.005); String s = BeanUtil.pojo.getProperty(fb, "fooString"); assertEquals("113", s); String[] sa = BeanUtil.pojo.getProperty(fb, "fooStringA"); assertEquals(2, sa.length); assertEquals("114", sa[0]); assertEquals("115", sa[1]); } @Test public void testNested() { Cbean cbean = new Cbean(); String value = "testnest"; String value2 = "nesttest"; assertEquals(String.class, BeanUtil.declared.getPropertyType(cbean, "bbean.abean.fooProp")); assertTrue(BeanUtil.declared.hasProperty(cbean, "bbean.abean.fooProp")); assertTrue(BeanUtil.declared.hasRootProperty(cbean, "bbean.abean.fooProp")); BeanUtil.pojo.setProperty(cbean, "bbean.abean.fooProp", value); assertEquals(value, BeanUtil.pojo.getProperty(cbean, "bbean.abean.fooProp")); Bbean bbean = BeanUtil.pojo.getProperty(cbean, "bbean"); assertTrue(BeanUtil.declared.hasProperty(bbean, "abean.fooProp")); assertTrue(BeanUtil.declared.hasRootProperty(bbean, "abean.fooProp")); assertEquals(value, BeanUtil.pojo.getProperty(bbean, "abean.fooProp")); Abean abean = BeanUtil.pojo.getProperty(bbean, "abean"); assertEquals(value, BeanUtil.pojo.getProperty(abean, "fooProp")); BeanUtil.pojo.setProperty(bbean, "abean.fooProp", value2); assertEquals(value2, BeanUtil.pojo.getProperty(bbean, "abean.fooProp")); } @Test public void testIster() { Abean abean = new Abean(); Boolean b = BeanUtil.pojo.getProperty(abean, "something"); assertTrue(b); try { BeanUtil.pojo.getProperty(abean, "Something"); fail(); } catch (BeanException bex) { // ignore } } @Test public void testMap() { Cbean cbean = new Cbean(); Abean abean = cbean.getBbean().getAbean(); assertNull(BeanUtil.declared.getPropertyType(abean, "mval")); BeanUtil.pojo.setProperty(abean, "mval", new Integer(173)); BeanUtil.pojo.setProperty(abean, "mval2", new Integer(1)); assertEquals((abean.get("mval")).intValue(), 173); assertEquals(173, ((Integer) BeanUtil.pojo.getProperty(abean, "mval")).intValue()); assertEquals(1, ((Integer) BeanUtil.pojo.getProperty(abean, "mval2")).intValue()); assertTrue(BeanUtil.declared.hasProperty(cbean, "bbean.abean.mval")); assertTrue(BeanUtil.declared.hasRootProperty(cbean, "bbean.abean.mval")); BeanUtil.pojo.setProperty(cbean, "bbean.abean.mval", new Integer(3)); assertEquals(3, ((Integer) BeanUtil.pojo.getProperty(abean, "mval")).intValue()); assertEquals(3, ((Integer) BeanUtil.pojo.getProperty(cbean, "bbean.abean.mval")).intValue()); HashMap map = new HashMap(); BeanUtil.pojo.setProperty(map, "val1", new Integer(173)); assertEquals(173, ((Integer) map.get("val1")).intValue()); Integer i = BeanUtil.pojo.getProperty(map, "val1"); assertEquals(173, i.intValue()); } @Test public void testMap2() { Map<String, String> m = new HashMap<>(); m.put("dd.dd", "value"); m.put("dd", "value2"); Map<String, Object> m2 = new HashMap<>(); m2.put("map", m); FooBean fb = new FooBean(); fb.setFooMap(m); assertEquals(Object.class, BeanUtil.declared.getPropertyType(fb, "fooMap[dd]")); assertEquals("value2", BeanUtil.pojo.getProperty(fb, "fooMap[dd]")); assertEquals("value2", BeanUtil.pojo.getProperty(m2, "map[dd]")); assertEquals("value", BeanUtil.pojo.getProperty(fb, "fooMap[dd.dd]")); assertEquals(Object.class, BeanUtil.declared.getPropertyType(fb, "fooMap[dd.dd]")); assertEquals("value", BeanUtil.pojo.getProperty(m2, "map[dd.dd]")); } @Test public void testMap3() { Map m = new HashMap(); BeanUtil.pojo.setProperty(m, "Foo", "John"); assertEquals("John", m.get("Foo")); assertNull(m.get("foo")); assertFalse(BeanUtil.declared.hasProperty(m, "foo")); assertFalse(BeanUtil.declared.hasRootProperty(m, "foo")); BeanUtil.pojo.setProperty(m, "foo", new HashMap()); assertTrue(BeanUtil.declared.hasProperty(m, "foo")); assertTrue(BeanUtil.declared.hasRootProperty(m, "foo")); assertFalse(BeanUtil.declared.hasProperty(m, "foo.Name")); assertTrue(BeanUtil.declared.hasRootProperty(m, "foo.Name")); BeanUtil.pojo.setProperty(m, "foo.Name", "Doe"); assertEquals("John", m.get("Foo")); assertEquals("Doe", ((HashMap) m.get("foo")).get("Name")); assertNull("Doe", ((HashMap) m.get("foo")).get("name")); assertEquals("John", BeanUtil.pojo.getProperty(m, "Foo")); assertEquals("Doe", BeanUtil.pojo.getProperty(m, "foo.Name")); try { assertNull(BeanUtil.pojo.getProperty(m, "foo.name")); fail(); } catch (Exception ignored) { } } @Test public void testNotDeclared() { FooBean3 fb = new FooBean3(); try { BeanUtil.pojo.setProperty(fb, "pprotected", new Integer(1)); fail(); } catch (Exception ignored) { } try { BeanUtil.pojo.getProperty(fb, "pprotected"); fail(); } catch (Exception ignored) { } try { BeanUtil.pojo.setProperty(fb, "ppackage", new Integer(2)); fail(); } catch (Exception ignored) { } try { BeanUtil.pojo.getProperty(fb, "ppackage"); fail(); } catch (Exception ignored) { } try { BeanUtil.pojo.setProperty(fb, "pprivate", new Integer(3)); fail(); } catch (Exception ignored) { } try { BeanUtil.pojo.getProperty(fb, "pprivate"); fail(); } catch (Exception ignored) { } } @Test public void testDeclared() { FooBean3 fb = new FooBean3(); BeanUtil.declared.setProperty(fb, "pprotected", new Integer(1)); Integer value = BeanUtil.declared.getProperty(fb, "pprotected"); assertNotNull(value); assertEquals(1, value.intValue()); BeanUtil.declared.setProperty(fb, "ppackage", new Integer(2)); value = BeanUtil.declared.getProperty(fb, "ppackage"); assertNotNull(value); assertEquals(2, value.intValue()); BeanUtil.declared.setProperty(fb, "pprivate", new Integer(3)); value = BeanUtil.declared.getProperty(fb, "pprivate"); assertNotNull(value); assertEquals(3, value.intValue()); } static class Dummy { private FooBean4 fb = new FooBean4(); public FooBean4 getFb() { return fb; } public void setFb(FooBean4 fb) { this.fb = fb; } /** * @noinspection UnnecessaryBoxing */ private Integer[] data = new Integer[]{Integer.valueOf("173"), Integer.valueOf("2")}; public Integer[] getData() { return data; } } @Test public void testArrays() { FooBean4 fb4 = new FooBean4(); Dummy dummy = new Dummy(); assertTrue(BeanUtil.declared.hasProperty(fb4, "data[0].bbean.abean.fooProp")); assertTrue(BeanUtil.declared.hasRootProperty(fb4, "data[0].bbean.abean.fooProp")); assertEquals("xxx", BeanUtil.pojo.getProperty(fb4, "data[0].bbean.abean.fooProp")); assertTrue(BeanUtil.declared.hasProperty(fb4, "data[1].bbean.abean.fooProp")); assertTrue(BeanUtil.declared.hasRootProperty(fb4, "data[1].bbean.abean.fooProp")); assertEquals("yyy", BeanUtil.pojo.getProperty(fb4, "data[1].bbean.abean.fooProp")); assertTrue(BeanUtil.declared.hasProperty(fb4, "data[2].bbean.abean.fooProp")); assertEquals("zzz", BeanUtil.pojo.getProperty(fb4, "data[2].bbean.abean.fooProp")); BeanUtil.pojo.setProperty(fb4, "data[2].bbean.abean.fooProp", "ZZZ"); assertEquals("ZZZ", BeanUtil.pojo.getProperty(fb4, "data[2].bbean.abean.fooProp")); assertTrue(BeanUtil.declared.hasProperty(fb4, "list[0].bbean.abean.fooProp")); assertEquals("LLL", BeanUtil.pojo.getProperty(fb4, "list[0].bbean.abean.fooProp")); BeanUtil.pojo.setProperty(fb4, "list[0].bbean.abean.fooProp", "EEE"); assertEquals("EEE", BeanUtil.pojo.getProperty(fb4, "list[0].bbean.abean.fooProp")); assertEquals("lll", BeanUtil.pojo.getProperty(fb4, "list[1]")); BeanUtil.pojo.setProperty(fb4, "list[1]", "eee"); assertFalse(BeanUtil.declared.hasProperty(fb4, "list[1].bbean.abean.fooProp")); assertTrue(BeanUtil.declared.hasRootProperty(fb4, "list[1].bbean.abean.fooProp")); assertTrue(BeanUtil.declared.hasProperty(fb4, "list[1]")); assertEquals("eee", BeanUtil.pojo.getProperty(fb4, "list[1]")); assertTrue(BeanUtil.declared.hasProperty(dummy, "fb.data[0].bbean.abean.fooProp")); assertTrue(BeanUtil.declared.hasProperty(dummy, "fb.data[1].bbean.abean.fooProp")); assertTrue(BeanUtil.declared.hasProperty(dummy, "fb.data[2].bbean.abean.fooProp")); assertEquals("xxx", BeanUtil.pojo.getProperty(dummy, "fb.data[0].bbean.abean.fooProp")); assertEquals("yyy", BeanUtil.pojo.getProperty(dummy, "fb.data[1].bbean.abean.fooProp")); assertEquals("zzz", BeanUtil.pojo.getProperty(dummy, "fb.data[2].bbean.abean.fooProp")); BeanUtil.pojo.setProperty(dummy, "fb.data[2].bbean.abean.fooProp", "ZZZ"); assertEquals("ZZZ", BeanUtil.pojo.getProperty(dummy, "fb.data[2].bbean.abean.fooProp")); assertEquals(new Integer(173), BeanUtil.pojo.getProperty(dummy, "data[0]")); BeanUtil.pojo.setProperty(dummy, "data[0]", new Integer(-173)); assertEquals(new Integer(-173), BeanUtil.pojo.getProperty(dummy, "data[0]")); } @Test public void testForced() { XBean x = new XBean(); assertTrue(BeanUtil.declared.hasProperty(x, "y")); assertFalse(BeanUtil.declared.hasProperty(x, "y.foo")); assertTrue(BeanUtil.declared.hasRootProperty(x, "y.foo")); assertFalse(BeanUtil.declared.hasProperty(x, "y[23].foo")); assertTrue(BeanUtil.declared.hasRootProperty(x, "y[23].foo")); try { BeanUtil.pojo.setProperty(x, "y.foo", "yyy"); fail(); } catch (Exception ignored) { } assertNull(x.getY()); BeanUtil.forced.setProperty(x, "y.foo", "yyy"); assertTrue(BeanUtil.declared.hasProperty(x, "y.foo")); assertEquals("yyy", x.getY().getFoo()); assertNotNull(x.getYy()); assertFalse(BeanUtil.declared.hasProperty(x, "yy[2].foo")); assertTrue(BeanUtil.declared.hasRootProperty(x, "yy[2].foo")); try { BeanUtil.pojo.setProperty(x, "yy[2].foo", "yyy"); fail(); } catch (Exception ignored) { } assertNull(x.getYy()[2]); BeanUtil.forced.setProperty(x, "yy[2].foo", "xxx"); assertTrue(BeanUtil.declared.hasProperty(x, "yy[2].foo")); assertEquals("xxx", x.getYy()[2].getFoo()); assertFalse(BeanUtil.declared.hasProperty(x, "yy[20].foo")); assertTrue(BeanUtil.declared.hasRootProperty(x, "yy[20].foo")); BeanUtil.forced.setProperty(x, "yy[20].foo", "zzz"); assertTrue(BeanUtil.declared.hasProperty(x, "yy[20].foo")); assertEquals("zzz", x.getYy()[20].getFoo()); } @Test public void testSilent() { FooBean fb = new FooBean(); assertFalse(BeanUtil.declared.hasProperty(fb, "notexisting")); assertFalse(BeanUtil.declared.hasRootProperty(fb, "notexisting")); try { BeanUtil.pojo.setProperty(fb, "notexisting", null); fail(); } catch (Exception ignored) { } try { BeanUtil.silent.setProperty(fb, "notexisting", null); } catch (Exception ex) { fail(); } } @Test public void testGenerics() { Gig gig = new Gig(); assertEquals(String.class, BeanUtil.declared.getPropertyType(gig, "listOfStrings[1]")); BeanUtil.forced.setProperty(gig, "listOfStrings[1]", "string"); assertNull(gig.getListOfStrings().get(0)); assertEquals("string", gig.getListOfStrings().get(1)); assertEquals(2, gig.getListOfStrings().size()); assertEquals(MutableInteger.class, BeanUtil.declared.getPropertyType(gig, "listOfIntegers[1]")); BeanUtil.forced.setProperty(gig, "listOfIntegers[1]", Integer.valueOf(1)); assertNull(gig.getListOfIntegers().get(0)); assertEquals(1, gig.getListOfIntegers().get(1).intValue()); assertEquals(2, gig.getListOfStrings().size()); assertEquals(MutableInteger.class, BeanUtil.declared.getPropertyType(gig, "listOfIntegers[3]")); BeanUtil.forced.setProperty(gig, "listOfIntegers[3]", "3"); assertNull(gig.getListOfIntegers().get(0)); assertEquals(1, gig.getListOfIntegers().get(1).intValue()); assertNull(gig.getListOfIntegers().get(2)); assertEquals(3, gig.getListOfIntegers().get(3).intValue()); assertEquals(4, gig.getListOfIntegers().size()); assertNull(BeanUtil.declared.getPropertyType(gig, "listOfAbeans[1].fooProp")); // [1] doesnt exist yet BeanUtil.forced.setProperty(gig, "listOfAbeans[1].fooProp", "xxx"); assertEquals(String.class, BeanUtil.declared.getPropertyType(gig, "listOfAbeans[1].fooProp")); assertNull(gig.getListOfAbeans().get(0)); assertEquals("xxx", gig.getListOfAbeans().get(1).getFooProp()); assertEquals(2, gig.getListOfAbeans().size()); assertEquals(Integer.class, BeanUtil.declared.getPropertyType(gig, "mapOfIntegers[kkk]")); BeanUtil.forced.setProperty(gig, "mapOfIntegers[kkk]", "173"); assertEquals(173, gig.getMapOfIntegers().get("kkk").intValue()); assertEquals(1, gig.getMapOfIntegers().size()); assertEquals(Abean.class, BeanUtil.declared.getPropertyType(gig, "mapOfAbeans[kkk]")); BeanUtil.forced.setProperty(gig, "mapOfAbeans[kkk].fooProp", "zzz"); assertEquals("zzz", gig.getMapOfAbeans().get("kkk").getFooProp()); assertEquals(1, gig.getMapOfAbeans().size()); } @Test public void testNoGenerics() { Gig gig = new Gig(); BeanUtil.forced.setProperty(gig, "listOfStrings2[1]", "string"); assertNull(gig.getListOfStrings2().get(0)); assertEquals("string", gig.getListOfStrings2().get(1)); assertEquals(2, gig.getListOfStrings2().size()); BeanUtil.forced.setProperty(gig, "listOfIntegers2[1]", Integer.valueOf(1)); assertNull(gig.getListOfIntegers2().get(0)); assertEquals(1, ((Integer) gig.getListOfIntegers2().get(1)).intValue()); assertEquals(2, gig.getListOfStrings2().size()); BeanUtil.forced.setProperty(gig, "listOfIntegers2[3]", "3"); assertNull(gig.getListOfIntegers2().get(0)); assertEquals(1, ((Integer) gig.getListOfIntegers2().get(1)).intValue()); assertNull(gig.getListOfIntegers2().get(2)); assertEquals("3", gig.getListOfIntegers2().get(3)); assertEquals(4, gig.getListOfIntegers2().size()); BeanUtil.forced.setProperty(gig, "listOfAbeans2[1].fooProp", "xxx"); assertNull(gig.getListOfAbeans2().get(0)); assertEquals("xxx", ((Map) gig.getListOfAbeans2().get(1)).get("fooProp")); assertEquals(2, gig.getListOfAbeans2().size()); BeanUtil.forced.setProperty(gig, "mapOfIntegers2[kkk]", "173"); assertEquals("173", gig.getMapOfIntegers2().get("kkk")); assertEquals(1, gig.getMapOfIntegers2().size()); BeanUtil.forced.setProperty(gig, "mapOfAbeans2[kkk].fooProp", "zzz"); assertEquals("zzz", ((Map) gig.getMapOfAbeans2().get("kkk")).get("fooProp")); assertEquals(1, gig.getMapOfAbeans2().size()); } /** * All exceptions. */ @Test public void testExceptions() { Map map = new HashMap(); Gig gig = new Gig(); try { BeanUtil.pojo.getProperty(map, "xxx"); fail(); } catch (Exception e) { System.out.println(e.getMessage()); } try { BeanUtil.pojo.getProperty(gig, "doo"); fail(); } catch (Exception e) { System.out.println(e.getMessage()); } try { BeanUtil.pojo.setProperty(gig, "xxx", "value"); fail(); } catch (Exception e) { System.out.println(e.getMessage()); } try { BeanUtil.pojo.getProperty(gig, "listOfAbeans[1].fooProp"); fail(); } catch (Exception e) { System.out.println(e.getMessage()); } try { BeanUtil.forced.setProperty(gig, "listOfAbeans[xxx].fooProp", "123"); fail(); } catch (Exception e) { System.out.println(e.getMessage()); } try { gig.setZoro("zoro"); BeanUtil.pojo.getProperty(gig, "zoro[1].fooProp"); fail(); } catch (Exception e) { System.out.println(e.getMessage()); } try { BeanUtil.pojo.setProperty(gig, "zoro[1]", "foo"); fail(); } catch (Exception e) { System.out.println(e.getMessage()); } try { BeanUtil.silent.setProperty(gig, "zoro[1].doo", "foo"); } catch (Exception e) { fail(); System.out.println(e.getMessage()); } } @Test public void testGeneralMapOnly() { Map map = new HashMap(); BeanUtil.forced.setProperty(map, "foo.lll", "value"); assertNotNull(map.get("foo")); assertEquals("value", ((Map) map.get("foo")).get("lll")); map = new HashMap(); BeanUtil.forced.setProperty(map, "foo.lll[2]", "value"); assertNotNull(map.get("foo")); assertNotNull(((Map) map.get("foo")).get("lll")); assertEquals("value", ((Map) ((Map) map.get("foo")).get("lll")).get("2")); } @Test public void testInheritance() { ZBean zb = new ZBean(); assertEquals("public", BeanUtil.pojo.getProperty(zb, "ppublic")); try { assertEquals("protected", BeanUtil.pojo.getProperty(zb, "pprotected")); fail(); } catch (BeanException ignored) { } assertEquals("protected", BeanUtil.declared.getProperty(zb, "pprotected")); try { assertEquals("private", BeanUtil.declared.getProperty(zb, "pprivate")); fail(); } catch (BeanException ignored) { } // top assertEquals("public", BeanUtil.pojo.getProperty(zb, "tpublic")); try { assertEquals("protected", BeanUtil.pojo.getProperty(zb, "tprotected")); fail(); } catch (BeanException ignored) { } assertEquals("protected", BeanUtil.declared.getProperty(zb, "tprotected")); assertEquals("private", BeanUtil.declared.getProperty(zb, "tprivate")); } @Test public void testSimpleThis() { FooBean fb = new FooBean(); BeanUtilBean beanUtilBean = new BeanUtilBean(); beanUtilBean.setSimpleProperty(fb, "fooString", "test"); assertEquals("test", fb.getFooString()); assertEquals("test", beanUtilBean.getSimpleProperty(fb, "fooString")); assertEquals("test", beanUtilBean.getProperty(fb, "fooString")); FooBean4 fb4 = new FooBean4(); assertEquals("xxx", beanUtilBean.getProperty(fb4, "data[0].bbean.abean.fooProp")); assertEquals("xxx", beanUtilBean.getProperty(fb4, "data.[0].bbean.abean.fooProp")); assertEquals("foo", beanUtilBean.extractThisReference("foo.aaa")); assertEquals("foo", beanUtilBean.extractThisReference("foo[1].aaa")); assertEquals("foo", beanUtilBean.extractThisReference("foo")); } @Test public void testIsGetBoolean() { IsGetBool i = new IsGetBool(); Object value = BeanUtil.pojo.getProperty(i, "flag"); assertNotNull(value); assertTrue((Boolean) value); ClassDescriptor cd = ClassIntrospector.lookup(IsGetBool.class); PropertyDescriptor[] propertyDescriptors = cd.getAllPropertyDescriptors(); assertEquals(1, propertyDescriptors.length); assertEquals("flag", propertyDescriptors[0].getName()); assertEquals("isFlag", propertyDescriptors[0].getReadMethodDescriptor().getMethod().getName()); MethodDescriptor[] mds = cd.getAllMethodDescriptors(); int c = 0; for (MethodDescriptor md : mds) { if (md.isPublic()) c++; } assertEquals(3, c); GetIsBool i2 = new GetIsBool(); value = BeanUtil.pojo.getProperty(i2, "flag"); assertNotNull(value); assertTrue((Boolean) value); cd = ClassIntrospector.lookup(GetIsBool.class); assertEquals("flag", propertyDescriptors[0].getName()); assertEquals("isFlag", propertyDescriptors[0].getReadMethodDescriptor().getMethod().getName()); mds = cd.getAllMethodDescriptors(); c = 0; for (MethodDescriptor md : mds) { if (md.isPublic()) c++; } assertEquals(3, c); } @Test public void testUppercase() { UppercaseBean ub = new UppercaseBean(); try { BeanUtil.pojo.getProperty(ub, "URLaddress"); } catch (Exception ex) { fail(); } } @Test public void testPropertiesWithDot() { Properties props = new Properties(); BeanUtil.pojo.setProperty(props, "ldap", "data"); assertEquals("data", props.getProperty("ldap")); BeanUtil.pojo.setProperty(props, "[ldap.auth.enabled]", "data2"); assertEquals("data", props.getProperty("ldap")); assertEquals("data2", props.getProperty("ldap.auth.enabled")); Map map = new HashMap(); FooBean fb = new FooBean(); BeanUtil.pojo.setProperty(map, "[aaa.bbb]", fb); BeanUtil.forced.setProperty(map, "[aaa.bbb].fooMap[xxx.ccc]", "zzzz"); assertEquals("zzzz", ((FooBean) map.get("aaa.bbb")).getFooMap().get("xxx.ccc")); BeanUtil.forced.setProperty(fb, "fooint", "123"); assertEquals(123, fb.getFooint()); try { BeanUtil.pojo.setProperty(map, ".[aaa.bbb]", "zzzz"); fail(); } catch (Exception ignored) { } try { BeanUtil.forced.setProperty(fb, "..fooint", "123"); fail(); } catch (Exception ignored) { } BeanUtil.forced.setProperty(map, "[aaa.bbb].fooMap.[eee.ccc]", "zzzz"); // forced works because *this is a map! assertEquals("zzzz", BeanUtil.pojo.getProperty(map, "[aaa.bbb].fooMap.[eee.ccc]")); } @Test public void testEnums() { EnumBean enumBean = new EnumBean(); BeanUtil.pojo.setProperty(enumBean, "id", Integer.valueOf(123)); BeanUtil.pojo.setProperty(enumBean, "color", "RED"); BeanUtil.pojo.setProperty(enumBean, "status", "STARTED"); assertEquals(123, enumBean.getId()); assertEquals(Color.RED, enumBean.getColor()); assertEquals(Status.STARTED, enumBean.getStatus()); } @Test public void testSubSup1() { SupBean supBean = new SupBean(); //BeanUtil.pojo.setProperty(supBean, "v1", "V1"); String v = BeanUtil.pojo.getProperty(supBean, "v1"); assertEquals("v1sup", v); supBean = new SubBean(); BeanUtil.pojo.setProperty(supBean, "v1", "V1"); v = BeanUtil.pojo.getProperty(supBean, "v1"); assertEquals("V1sup", v); } @Test public void testSubSup2() { SupBean supBean = new SubBean(); BeanUtil.pojo.setProperty(supBean, "v2", "V2"); //String v = (String) BeanUtil.pojo.getProperty(supBean, "v2"); String v = BeanUtil.pojo.getProperty(supBean, "v2"); assertEquals("V2sub", v); } @Test public void testCollections() { MixBean mixBean = new MixBean(); BeanUtil.pojo.setProperty(mixBean, "data", "1,2,3"); assertNotNull(mixBean.data); assertEquals(3, mixBean.data.size()); assertEquals(1, mixBean.data.get(0).intValue()); BeanUtil.pojo.setProperty(mixBean, "data2", "1,2,3,4"); assertNotNull(mixBean.getData2()); assertEquals(4, mixBean.getData2().size()); assertEquals(1, mixBean.getData2().get(0).intValue()); BeanUtil.pojo.setProperty(mixBean, "data5", "1,2,3,4,5"); assertNotNull(mixBean.getData5()); assertEquals(5, mixBean.getData5().size()); assertEquals(1, mixBean.getData5().get(0).intValue()); } @Test public void testMapWithKeyWithADot() { Map innerMap = new HashMap(); innerMap.put("zzz.xxx", "hey"); Map map = new HashMap(); map.put("foo.bar", innerMap); Object value = BeanUtil.pojo.getProperty(map, "[foo.bar]"); assertNotNull(value); value = BeanUtil.pojo.getProperty(map, "[foo.bar].[zzz.xxx]"); assertNotNull(value); assertEquals("hey", value.toString()); } }