@Test public void getNestedProperty() { Person target = createPerson("John", "London", "UK"); AbstractPropertyAccessor accessor = createAccessor(target); assertThat(accessor.getPropertyValue("address.city"), is("London")); }
@Test public void getSimpleProperty() { Simple target = new Simple("John", 2); AbstractPropertyAccessor accessor = createAccessor(target); assertThat(accessor.getPropertyValue("name"), is("John")); }
@Test public void getNestedDeepProperty() { Person target = createPerson("John", "London", "UK"); AbstractPropertyAccessor accessor = createAccessor(target); assertThat(accessor.getPropertyValue("address.country.name"), is("UK")); }
@Test public void getAnotherNestedDeepProperty() { ITestBean target = new TestBean("rod", 31); ITestBean kerry = new TestBean("kerry", 35); target.setSpouse(kerry); kerry.setSpouse(target); AbstractPropertyAccessor accessor = createAccessor(target); Integer KA = (Integer) accessor.getPropertyValue("spouse.age"); assertTrue("kerry is 35", KA == 35); Integer RA = (Integer) accessor.getPropertyValue("spouse.spouse.age"); assertTrue("rod is 31, not" + RA, RA == 31); ITestBean spousesSpouse = (ITestBean) accessor.getPropertyValue("spouse.spouse"); assertTrue("spousesSpouse = initial point", target == spousesSpouse); }
assertTrue("Correct short2 value", new Short("2").equals(accessor.getPropertyValue("short2"))); assertTrue("Correct short2 value", new Short("2").equals(target.getShort2())); assertTrue("Correct int2 value", new Integer("8").equals(accessor.getPropertyValue("int2"))); assertTrue("Correct int2 value", new Integer("8").equals(target.getInt2())); assertTrue("Correct long2 value", new Long("6").equals(accessor.getPropertyValue("long2"))); assertTrue("Correct long2 value", new Long("6").equals(target.getLong2())); assertTrue("Correct bigInteger value", new BigInteger("3").equals(accessor.getPropertyValue("bigInteger"))); assertTrue("Correct bigInteger value", new BigInteger("3").equals(target.getBigInteger())); assertTrue("Correct float2 value", new Float("8.1").equals(accessor.getPropertyValue("float2"))); assertTrue("Correct float2 value", new Float("8.1").equals(target.getFloat2())); assertTrue("Correct double2 value", new Double("6.1").equals(accessor.getPropertyValue("double2"))); assertTrue("Correct double2 value", new Double("6.1").equals(target.getDouble2())); assertTrue("Correct bigDecimal value", new BigDecimal("4.0").equals(accessor.getPropertyValue("bigDecimal"))); assertTrue("Correct bigDecimal value", new BigDecimal("4.0").equals(target.getBigDecimal()));
assertTrue("Correct short2 value", new Short("2").equals(accessor.getPropertyValue("short2"))); assertTrue("Correct short2 value", new Short("2").equals(target.getShort2())); assertTrue("Correct int2 value", new Integer("8").equals(accessor.getPropertyValue("int2"))); assertTrue("Correct int2 value", new Integer("8").equals(target.getInt2())); assertTrue("Correct long2 value", new Long("6").equals(accessor.getPropertyValue("long2"))); assertTrue("Correct long2 value", new Long("6").equals(target.getLong2())); assertTrue("Correct bigInteger value", new BigInteger("3").equals(accessor.getPropertyValue("bigInteger"))); assertTrue("Correct bigInteger value", new BigInteger("3").equals(target.getBigInteger())); assertTrue("Correct float2 value", new Float("8.1").equals(accessor.getPropertyValue("float2"))); assertTrue("Correct float2 value", new Float("8.1").equals(target.getFloat2())); assertTrue("Correct double2 value", new Double("6.1").equals(accessor.getPropertyValue("double2"))); assertTrue("Correct double2 value", new Double("6.1").equals(target.getDouble2())); assertTrue("Correct bigDecimal value", new BigDecimal("4.0").equals(accessor.getPropertyValue("bigDecimal"))); assertTrue("Correct bigDecimal value", new BigDecimal("4.0").equals(target.getBigDecimal()));
@Test public void setBooleanProperty() { BooleanTestBean target = new BooleanTestBean(); AbstractPropertyAccessor accessor = createAccessor(target); accessor.setPropertyValue("bool2", "true"); assertTrue("Correct bool2 value", Boolean.TRUE.equals(accessor.getPropertyValue("bool2"))); assertTrue("Correct bool2 value", target.getBool2()); accessor.setPropertyValue("bool2", "false"); assertTrue("Correct bool2 value", Boolean.FALSE.equals(accessor.getPropertyValue("bool2"))); assertTrue("Correct bool2 value", !target.getBool2()); }
@Test public void getUnknownNestedProperty() { Person target = createPerson("John", "London", "UK"); AbstractPropertyAccessor accessor = createAccessor(target); thrown.expect(NotReadablePropertyException.class); accessor.getPropertyValue("address.bar"); }
@Test public void testErrorMessageOfNestedProperty() { ITestBean target = new TestBean(); ITestBean child = new DifferentTestBean(); child.setName("test"); target.setSpouse(child); AbstractPropertyAccessor accessor = createAccessor(target); try { accessor.getPropertyValue("spouse.bla"); } catch (NotReadablePropertyException ex) { assertTrue(ex.getMessage().contains(TestBean.class.getName())); } }
@Test public void getPropertyIntermediatePropertyIsNullWithAutoGrow() { Person target = createPerson("John", "London", "UK"); target.address = null; AbstractPropertyAccessor accessor = createAccessor(target); accessor.setAutoGrowNestedPaths(true); assertEquals("DefaultCountry", accessor.getPropertyValue("address.country.name")); }
TestBean tb4 = ((TestBean) target.getMap().get("key1")); TestBean tb5 = ((TestBean) target.getMap().get("key2")); assertEquals(tb0, accessor.getPropertyValue("array[0]")); assertEquals(tb1, accessor.getPropertyValue("array[1]")); assertEquals(tb2, accessor.getPropertyValue("list[0]")); assertEquals(tb3, accessor.getPropertyValue("list[1]")); assertEquals(tb6, accessor.getPropertyValue("set[0]")); assertEquals(tb7, accessor.getPropertyValue("set[1]")); assertEquals(tb4, accessor.getPropertyValue("map[key1]")); assertEquals(tb5, accessor.getPropertyValue("map[key2]")); assertEquals(tb4, accessor.getPropertyValue("map['key1']")); assertEquals(tb5, accessor.getPropertyValue("map[\"key2\"]")); assertEquals(tb4, (target.getMap().get("key5"))); assertEquals(tb5, (target.getMap().get("key9"))); assertEquals(tb5, accessor.getPropertyValue("array[0]")); assertEquals(tb4, accessor.getPropertyValue("array[1]")); assertEquals(tb3, accessor.getPropertyValue("list[0]")); assertEquals(tb2, accessor.getPropertyValue("list[1]")); assertEquals(tb0, accessor.getPropertyValue("list[2]")); assertEquals(null, accessor.getPropertyValue("list[3]")); assertEquals(tb1, accessor.getPropertyValue("list[4]")); assertEquals(tb1, accessor.getPropertyValue("map[\"key1\"]")); assertEquals(tb0, accessor.getPropertyValue("map['key2']")); assertEquals(tb4, accessor.getPropertyValue("map[\"key5\"]")); assertEquals(tb5, accessor.getPropertyValue("map['key9']"));
assertEquals("name4", tb4.getName()); assertEquals("name5", tb5.getName()); assertEquals("name0", accessor.getPropertyValue("array[0].name")); assertEquals("name1", accessor.getPropertyValue("array[1].name")); assertEquals("name2", accessor.getPropertyValue("list[0].name")); assertEquals("name3", accessor.getPropertyValue("list[1].name")); assertEquals("name6", accessor.getPropertyValue("set[0].name")); assertEquals("name7", accessor.getPropertyValue("set[1].name")); assertEquals("name4", accessor.getPropertyValue("map[key1].name")); assertEquals("name5", accessor.getPropertyValue("map[key.3].name")); assertEquals("name4", accessor.getPropertyValue("map['key1'].name")); assertEquals("name5", accessor.getPropertyValue("map[\"key.3\"].name")); assertEquals("nameX", accessor.getPropertyValue("map[key4][0].name")); assertEquals("nameY", accessor.getPropertyValue("map[key4][1].name")); assertEquals("name1", tb4.getName()); assertEquals("name0", tb5.getName()); assertEquals("name5", accessor.getPropertyValue("array[0].name")); assertEquals("name4", accessor.getPropertyValue("array[1].name")); assertEquals("name3", accessor.getPropertyValue("list[0].name")); assertEquals("name2", accessor.getPropertyValue("list[1].name")); assertEquals("name8", accessor.getPropertyValue("set[0].name")); assertEquals("name9", accessor.getPropertyValue("set[1].name")); assertEquals("name1", accessor.getPropertyValue("map[\"key1\"].name")); assertEquals("name0", accessor.getPropertyValue("map['key.3'].name")); assertEquals("nameA", accessor.getPropertyValue("map[key4][0].name")); assertEquals("nameB", accessor.getPropertyValue("map[key4][1].name"));
@Test public void setPropertyInProtectedBaseBean() { DerivedFromProtectedBaseBean target = new DerivedFromProtectedBaseBean(); AbstractPropertyAccessor accessor = createAccessor(target); accessor.setPropertyValue("someProperty", "someValue"); assertEquals("someValue", accessor.getPropertyValue("someProperty")); assertEquals("someValue", target.getSomeProperty()); }
@Test public void setPropertyIsReflectedImmediately() { TestBean target = new TestBean(); int newAge = 33; try { AbstractPropertyAccessor accessor = createAccessor(target); target.setAge(newAge); Object bwAge = accessor.getPropertyValue("age"); assertTrue("Age is an integer", bwAge instanceof Integer); assertTrue("Bean wrapper must pick up changes", (int) bwAge == newAge); } catch (Exception ex) { fail("Shouldn't throw exception when everything is valid"); } }
@Test public void getUnknownProperty() { Simple target = new Simple("John", 2); AbstractPropertyAccessor accessor = createAccessor(target); try { accessor.getPropertyValue("foo"); fail("Should have failed to get an unknown property."); } catch (NotReadablePropertyException e) { assertEquals(Simple.class, e.getBeanClass()); assertEquals("foo", e.getPropertyName()); } }
@Test public void getPropertyIntermediatePropertyIsNull() { Person target = createPerson("John", "London", "UK"); target.address = null; AbstractPropertyAccessor accessor = createAccessor(target); try { accessor.getPropertyValue("address.country.name"); fail("Should have failed to get value with null intermediate path"); } catch (NullValueInNestedPathException e) { assertEquals("address", e.getPropertyName()); assertEquals(Person.class, e.getBeanClass()); } }
@Test public void setNestedPropertyPolymorphic() throws Exception { ITestBean target = new TestBean("rod", 31); ITestBean kerry = new Employee(); AbstractPropertyAccessor accessor = createAccessor(target); accessor.setPropertyValue("spouse", kerry); accessor.setPropertyValue("spouse.age", new Integer(35)); accessor.setPropertyValue("spouse.name", "Kerry"); accessor.setPropertyValue("spouse.company", "Lewisham"); assertTrue("kerry name is Kerry", kerry.getName().equals("Kerry")); assertTrue("nested set worked", target.getSpouse() == kerry); assertTrue("no back relation", kerry.getSpouse() == null); accessor.setPropertyValue(new PropertyValue("spouse.spouse", target)); assertTrue("nested set worked", kerry.getSpouse() == target); AbstractPropertyAccessor kerryAccessor = createAccessor(kerry); assertTrue("spouse.spouse.spouse.spouse.company=Lewisham", "Lewisham".equals(kerryAccessor.getPropertyValue("spouse.spouse.spouse.spouse.company"))); }
@Test public void setAnotherNestedProperty() throws Exception { ITestBean target = new TestBean("rod", 31); ITestBean kerry = new TestBean("kerry", 0); AbstractPropertyAccessor accessor = createAccessor(target); accessor.setPropertyValue("spouse", kerry); assertTrue("nested set worked", target.getSpouse() == kerry); assertTrue("no back relation", kerry.getSpouse() == null); accessor.setPropertyValue(new PropertyValue("spouse.spouse", target)); assertTrue("nested set worked", kerry.getSpouse() == target); assertTrue("kerry age not set", kerry.getAge() == 0); accessor.setPropertyValue(new PropertyValue("spouse.age", 35)); assertTrue("Set primitive on spouse", kerry.getAge() == 35); assertEquals(kerry, accessor.getPropertyValue("spouse")); assertEquals(target, accessor.getPropertyValue("spouse.spouse")); }