/* * Copyright 2001-2013 Geert Bevin (gbevin[remove] at uwyn dot com) * Licensed under the Apache License, Version 2.0 (the "License") */ package com.uwyn.rife.ioc; import com.uwyn.rife.ioc.exceptions.IncompatiblePropertyValueTypeException; import com.uwyn.rife.ioc.exceptions.ParticipantUnknownException; import com.uwyn.rife.ioc.exceptions.PropertyValueException; import java.math.BigDecimal; import java.util.Date; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import junit.framework.TestCase; public class TestHierarchicalProperties extends TestCase { public TestHierarchicalProperties(String name) { super(name); } public void testInstantiation() { HierarchicalProperties properties = new HierarchicalProperties(); assertNotNull(properties); assertEquals(0, properties.size()); assertNotNull(properties.getNames()); assertEquals(0, properties.getNames().size()); assertNotNull(properties.getInjectableNames()); assertEquals(0, properties.getInjectableNames().size()); assertNotNull(properties.getLocalMap()); assertEquals(0, properties.getLocalMap().size()); } public void testSingleInstance() { Iterator names_it; PropertyValue property1 = new PropertyValueObject("value1"); PropertyValue property2 = new PropertyValueObject("value2"); PropertyValue property3 = new PropertyValueObject("value3"); PropertyValue property4 = new PropertyValueObject("value4"); PropertyValue property5 = new PropertyValueObject("value5"); HierarchicalProperties properties = new HierarchicalProperties(); assertSame(properties, properties.put("name1", property1)); assertSame(properties, properties.put("name2", property2)); assertSame(properties, properties.put("non.identifier.name3", property3)); assertEquals(3, properties.size()); assertNotNull(properties.getLocalMap()); assertEquals(3, properties.getLocalMap().size()); assertTrue(properties.contains("name1")); assertTrue(properties.contains("name2")); assertTrue(properties.contains("non.identifier.name3")); assertSame(property1, properties.get("name1")); assertSame(property2, properties.get("name2")); assertSame(property3, properties.get("non.identifier.name3")); assertEquals("value1", properties.getValue("name1")); assertEquals("value2", properties.getValue("name2")); assertEquals("value3", properties.getValue("non.identifier.name3")); assertEquals("value1", properties.getValueString("name1")); assertEquals("value2", properties.getValueString("name2")); assertEquals("value3", properties.getValueString("non.identifier.name3")); names_it = properties.getNames().iterator(); assertEquals("name1", names_it.next()); assertEquals("name2", names_it.next()); assertEquals("non.identifier.name3", names_it.next()); assertFalse(names_it.hasNext()); names_it = properties.getInjectableNames().iterator(); assertEquals("name1", names_it.next()); assertEquals("name2", names_it.next()); assertFalse(names_it.hasNext()); assertSame(property2, properties.remove("name2")); assertEquals(2, properties.size()); assertTrue(properties.contains("name1")); assertFalse(properties.contains("name2")); assertTrue(properties.contains("non.identifier.name3")); names_it = properties.getNames().iterator(); assertEquals("name1", names_it.next()); assertEquals("non.identifier.name3", names_it.next()); assertFalse(names_it.hasNext()); names_it = properties.getInjectableNames().iterator(); assertEquals("name1", names_it.next()); assertFalse(names_it.hasNext()); HierarchicalProperties properties_alternative = new HierarchicalProperties(); assertSame(properties_alternative, properties_alternative.put("name4", property4)); assertSame(properties_alternative, properties_alternative.put("non.identifier.name5", property5)); assertEquals(2, properties_alternative.size()); assertSame(properties, properties.putAll(properties_alternative)); assertEquals(4, properties.size()); assertTrue(properties.contains("name1")); assertTrue(properties.contains("non.identifier.name3")); assertTrue(properties.contains("name4")); assertTrue(properties.contains("non.identifier.name5")); assertSame(property1, properties.get("name1")); assertSame(property3, properties.get("non.identifier.name3")); assertSame(property4, properties.get("name4")); assertSame(property5, properties.get("non.identifier.name5")); assertEquals("value1", properties.getValue("name1")); assertNull(properties.getValue("name2")); Integer default_value = 34; assertSame(default_value, properties.getValue("name2", default_value)); assertEquals("value3", properties.getValue("non.identifier.name3")); assertEquals("value4", properties.getValue("name4")); assertEquals("value5", properties.getValue("non.identifier.name5")); assertEquals("value1", properties.getValueString("name1")); assertNull(properties.getValueString("name2")); assertEquals("somevalue", properties.getValueString("name2", "somevalue")); assertEquals("value3", properties.getValueString("non.identifier.name3")); assertEquals("value4", properties.getValueString("name4")); assertEquals("value5", properties.getValueString("non.identifier.name5")); names_it = properties.getNames().iterator(); assertEquals("name1", names_it.next()); assertEquals("non.identifier.name3", names_it.next()); assertEquals("name4", names_it.next()); assertEquals("non.identifier.name5", names_it.next()); assertFalse(names_it.hasNext()); names_it = properties.getInjectableNames().iterator(); assertEquals("name1", names_it.next()); assertEquals("name4", names_it.next()); assertFalse(names_it.hasNext()); } public void testHierarchy() { /* * This is the hierarchy that's being built. * * grandparent * ----------- * name1 (property1d) * name2 (property2d) * name2_grandparent (property2d) * non.identifier.name3 (property3d) * | * ______________|___________________________ * / \ * / \ * parent1 parent2 * ------- ------- * name1 (property1c) name2 (property2c) * name2_parent (property2c) non.identifier.name3_parent (property3c) * | | * ___________|___________________ | * / \ | * / \ | * child1 child2 child3 * ------ ------ ------ * name1 (property1) name1 (property1b) non.identifier.name3 (property3b) * name2 (property2) name2 (property2b) * non.identifier.name3 (property3) */ Iterator names_it; PropertyValue property1 = new PropertyValueObject("value1"); PropertyValue property2 = new PropertyValueObject("value2"); PropertyValue property3 = new PropertyValueObject("value3"); PropertyValue property1b = new PropertyValueObject("value1b"); PropertyValue property2b = new PropertyValueObject("value2b"); PropertyValue property3b = new PropertyValueObject("value3b"); PropertyValue property1c = new PropertyValueObject("value1c"); PropertyValue property2c = new PropertyValueObject("value2c"); PropertyValue property3c = new PropertyValueObject("value3c"); PropertyValue property1d = new PropertyValueObject("value1d"); PropertyValue property2d = new PropertyValueObject("value2d"); PropertyValue property3d = new PropertyValueObject("value3d"); HierarchicalProperties properties_child1 = new HierarchicalProperties(); assertSame(properties_child1, properties_child1.put("name1", property1)); assertSame(properties_child1, properties_child1.put("name2", property2)); assertSame(properties_child1, properties_child1.put("non.identifier.name3", property3)); assertEquals(3, properties_child1.size()); assertSame(property1, properties_child1.get("name1")); assertSame(property2, properties_child1.get("name2")); assertSame(property3, properties_child1.get("non.identifier.name3")); names_it = properties_child1.getNames().iterator(); assertEquals("name1", names_it.next()); assertEquals("name2", names_it.next()); assertEquals("non.identifier.name3", names_it.next()); assertFalse(names_it.hasNext()); names_it = properties_child1.getInjectableNames().iterator(); assertEquals("name1", names_it.next()); assertEquals("name2", names_it.next()); assertFalse(names_it.hasNext()); HierarchicalProperties properties_child2 = new HierarchicalProperties(); assertSame(properties_child2, properties_child2.put("name1", property1b)); assertSame(properties_child2, properties_child2.put("name2", property2b)); assertEquals(2, properties_child2.size()); assertSame(property1b, properties_child2.get("name1")); assertSame(property2b, properties_child2.get("name2")); names_it = properties_child2.getNames().iterator(); assertEquals("name1", names_it.next()); assertEquals("name2", names_it.next()); assertFalse(names_it.hasNext()); names_it = properties_child2.getInjectableNames().iterator(); assertEquals("name1", names_it.next()); assertEquals("name2", names_it.next()); assertFalse(names_it.hasNext()); HierarchicalProperties properties_child3 = new HierarchicalProperties(); assertSame(properties_child3, properties_child3.put("non.identifier.name3", property3b)); assertEquals(1, properties_child3.size()); assertSame(property3b, properties_child3.get("non.identifier.name3")); names_it = properties_child3.getNames().iterator(); assertEquals("non.identifier.name3", names_it.next()); assertFalse(names_it.hasNext()); names_it = properties_child3.getInjectableNames().iterator(); assertFalse(names_it.hasNext()); HierarchicalProperties properties_parent1 = new HierarchicalProperties(); assertSame(properties_parent1, properties_parent1.put("name1", property1c)); assertSame(properties_parent1, properties_parent1.put("name2_parent", property2c)); assertEquals(2, properties_parent1.size()); assertSame(property1c, properties_parent1.get("name1")); assertSame(property2c, properties_parent1.get("name2_parent")); names_it = properties_parent1.getNames().iterator(); assertEquals("name1", names_it.next()); assertEquals("name2_parent", names_it.next()); assertFalse(names_it.hasNext()); names_it = properties_parent1.getInjectableNames().iterator(); assertEquals("name1", names_it.next()); assertEquals("name2_parent", names_it.next()); assertFalse(names_it.hasNext()); HierarchicalProperties properties_parent2 = new HierarchicalProperties(); assertSame(properties_parent2, properties_parent2.put("name2", property2c)); assertSame(properties_parent2, properties_parent2.put("non.identifier.name3_parent", property3c)); assertEquals(2, properties_parent2.size()); assertSame(property2c, properties_parent2.get("name2")); assertSame(property3c, properties_parent2.get("non.identifier.name3_parent")); names_it = properties_parent2.getNames().iterator(); assertEquals("name2", names_it.next()); assertEquals("non.identifier.name3_parent", names_it.next()); assertFalse(names_it.hasNext()); names_it = properties_parent2.getInjectableNames().iterator(); assertEquals("name2", names_it.next()); assertFalse(names_it.hasNext()); HierarchicalProperties properties_grandparent = new HierarchicalProperties(); assertSame(properties_grandparent, properties_grandparent.put("name1", property1d)); assertSame(properties_grandparent, properties_grandparent.put("name2", property2d)); assertSame(properties_grandparent, properties_grandparent.put("name2_grandparent", property2d)); assertSame(properties_grandparent, properties_grandparent.put("non.identifier.name3", property3d)); assertEquals(4, properties_grandparent.size()); assertSame(property1d, properties_grandparent.get("name1")); assertSame(property2d, properties_grandparent.get("name2")); assertSame(property2d, properties_grandparent.get("name2_grandparent")); assertSame(property3d, properties_grandparent.get("non.identifier.name3")); names_it = properties_grandparent.getNames().iterator(); assertEquals("name1", names_it.next()); assertEquals("name2", names_it.next()); assertEquals("name2_grandparent", names_it.next()); assertEquals("non.identifier.name3", names_it.next()); assertFalse(names_it.hasNext()); names_it = properties_grandparent.getInjectableNames().iterator(); assertEquals("name1", names_it.next()); assertEquals("name2", names_it.next()); assertEquals("name2_grandparent", names_it.next()); assertFalse(names_it.hasNext()); // set the first level parents properties_child1.parent(properties_parent1); assertSame(properties_parent1, properties_child1.getRoot()); assertEquals(4, properties_child1.size()); assertSame(property1, properties_child1.get("name1")); assertSame(property2, properties_child1.get("name2")); assertSame(property2c, properties_child1.get("name2_parent")); assertSame(property3, properties_child1.get("non.identifier.name3")); names_it = properties_child1.getNames().iterator(); assertEquals("name1", names_it.next()); assertEquals("name2", names_it.next()); assertEquals("non.identifier.name3", names_it.next()); assertEquals("name2_parent", names_it.next()); assertFalse(names_it.hasNext()); names_it = properties_child1.getInjectableNames().iterator(); assertEquals("name1", names_it.next()); assertEquals("name2", names_it.next()); assertEquals("name2_parent", names_it.next()); assertFalse(names_it.hasNext()); properties_child2.parent(properties_parent1); assertSame(properties_parent1, properties_child2.getRoot()); assertEquals(3, properties_child2.size()); assertSame(property1b, properties_child2.get("name1")); assertSame(property2b, properties_child2.get("name2")); names_it = properties_child2.getNames().iterator(); assertEquals("name1", names_it.next()); assertEquals("name2", names_it.next()); assertEquals("name2_parent", names_it.next()); assertFalse(names_it.hasNext()); names_it = properties_child2.getInjectableNames().iterator(); assertEquals("name1", names_it.next()); assertEquals("name2", names_it.next()); assertEquals("name2_parent", names_it.next()); assertFalse(names_it.hasNext()); properties_child3.parent(properties_parent2); assertSame(properties_parent2, properties_child3.getRoot()); assertEquals(3, properties_child3.size()); assertSame(property3b, properties_child3.get("non.identifier.name3")); assertSame(property2c, properties_child3.get("name2")); assertSame(property3c, properties_child3.get("non.identifier.name3_parent")); names_it = properties_child3.getNames().iterator(); assertEquals("non.identifier.name3", names_it.next()); assertEquals("name2", names_it.next()); assertEquals("non.identifier.name3_parent", names_it.next()); assertFalse(names_it.hasNext()); names_it = properties_child3.getInjectableNames().iterator(); assertEquals("name2", names_it.next()); assertFalse(names_it.hasNext()); // set the second level parents properties_parent1.parent(properties_grandparent); assertEquals(5, properties_child1.size()); assertSame(property1, properties_child1.get("name1")); assertSame(property2, properties_child1.get("name2")); assertSame(property2c, properties_child1.get("name2_parent")); assertSame(property3, properties_child1.get("non.identifier.name3")); assertSame(property2d, properties_child1.get("name2_grandparent")); names_it = properties_child1.getNames().iterator(); assertEquals("name1", names_it.next()); assertEquals("name2", names_it.next()); assertEquals("non.identifier.name3", names_it.next()); assertEquals("name2_parent", names_it.next()); assertEquals("name2_grandparent", names_it.next()); assertFalse(names_it.hasNext()); names_it = properties_child1.getInjectableNames().iterator(); assertEquals("name1", names_it.next()); assertEquals("name2", names_it.next()); assertEquals("name2_parent", names_it.next()); assertEquals("name2_grandparent", names_it.next()); assertFalse(names_it.hasNext()); properties_parent2.parent(properties_grandparent); assertEquals(5, properties_child3.size()); assertSame(property3b, properties_child3.get("non.identifier.name3")); assertSame(property2c, properties_child3.get("name2")); assertSame(property3c, properties_child3.get("non.identifier.name3_parent")); assertSame(property1d, properties_child3.get("name1")); assertSame(property2d, properties_child3.get("name2_grandparent")); names_it = properties_child3.getNames().iterator(); assertEquals("non.identifier.name3", names_it.next()); assertEquals("name2", names_it.next()); assertEquals("non.identifier.name3_parent", names_it.next()); assertEquals("name1", names_it.next()); assertEquals("name2_grandparent", names_it.next()); assertFalse(names_it.hasNext()); names_it = properties_child3.getInjectableNames().iterator(); assertEquals("name2", names_it.next()); assertEquals("name1", names_it.next()); assertEquals("name2_grandparent", names_it.next()); assertFalse(names_it.hasNext()); assertSame(properties_grandparent, properties_child1.getRoot()); assertSame(properties_grandparent, properties_child2.getRoot()); assertSame(properties_grandparent, properties_child3.getRoot()); // manipulate the hierarchy assertSame(property1, properties_child1.remove("name1")); assertNull(properties_child1.remove("name1")); assertSame(property1c, properties_child1.get("name1")); assertSame(property2c, properties_parent1.remove("name2_parent")); assertNull(properties_parent1.remove("name2_parent")); assertNull(properties_parent1.get("name2_parent")); assertSame(property1c, properties_parent1.remove("name1")); assertNull(properties_child1.remove("name1")); assertSame(property1d, properties_child1.get("name1")); assertSame(property1d, properties_parent1.get("name1")); assertSame(property3b, properties_child3.remove("non.identifier.name3")); assertNull(properties_child3.remove("non.identifier.name3")); assertSame(property3d, properties_child3.get("non.identifier.name3")); assertSame(property2c, properties_parent2.remove("name2")); assertNull(properties_parent2.remove("name2")); assertSame(property2d, properties_child3.get("name2")); assertSame(property2d, properties_grandparent.remove("name2")); assertNull(properties_grandparent.remove("name2")); assertNull(properties_child3.get("name2")); names_it = properties_child1.getNames().iterator(); assertEquals("name2", names_it.next()); assertEquals("non.identifier.name3", names_it.next()); assertEquals("name1", names_it.next()); assertEquals("name2_grandparent", names_it.next()); assertFalse(names_it.hasNext()); names_it = properties_child1.getInjectableNames().iterator(); assertEquals("name2", names_it.next()); assertEquals("name1", names_it.next()); assertEquals("name2_grandparent", names_it.next()); assertFalse(names_it.hasNext()); names_it = properties_child2.getNames().iterator(); assertEquals("name1", names_it.next()); assertEquals("name2", names_it.next()); assertEquals("name2_grandparent", names_it.next()); assertEquals("non.identifier.name3", names_it.next()); assertFalse(names_it.hasNext()); names_it = properties_child2.getInjectableNames().iterator(); assertEquals("name1", names_it.next()); assertEquals("name2", names_it.next()); assertEquals("name2_grandparent", names_it.next()); assertFalse(names_it.hasNext()); names_it = properties_child3.getNames().iterator(); assertEquals("non.identifier.name3_parent", names_it.next()); assertEquals("name1", names_it.next()); assertEquals("name2_grandparent", names_it.next()); assertEquals("non.identifier.name3", names_it.next()); assertFalse(names_it.hasNext()); names_it = properties_child3.getInjectableNames().iterator(); assertEquals("name1", names_it.next()); assertEquals("name2_grandparent", names_it.next()); assertFalse(names_it.hasNext()); PropertyValue property2e = new PropertyValueObject("value1e"); assertSame(properties_parent1, properties_parent1.put("new_name2", property2e)); PropertyValue property3e = new PropertyValueObject("value3e"); assertSame(properties_grandparent, properties_grandparent.put("new_non.identifier.name3", property3e)); names_it = properties_child1.getNames().iterator(); assertEquals("name2", names_it.next()); assertEquals("non.identifier.name3", names_it.next()); assertEquals("new_name2", names_it.next()); assertEquals("name1", names_it.next()); assertEquals("name2_grandparent", names_it.next()); assertEquals("new_non.identifier.name3", names_it.next()); assertFalse(names_it.hasNext()); names_it = properties_child1.getInjectableNames().iterator(); assertEquals("name2", names_it.next()); assertEquals("new_name2", names_it.next()); assertEquals("name1", names_it.next()); assertEquals("name2_grandparent", names_it.next()); assertFalse(names_it.hasNext()); names_it = properties_child2.getNames().iterator(); assertEquals("name1", names_it.next()); assertEquals("name2", names_it.next()); assertEquals("new_name2", names_it.next()); assertEquals("name2_grandparent", names_it.next()); assertEquals("non.identifier.name3", names_it.next()); assertEquals("new_non.identifier.name3", names_it.next()); assertFalse(names_it.hasNext()); names_it = properties_child2.getInjectableNames().iterator(); assertEquals("name1", names_it.next()); assertEquals("name2", names_it.next()); assertEquals("new_name2", names_it.next()); assertEquals("name2_grandparent", names_it.next()); assertFalse(names_it.hasNext()); names_it = properties_child3.getNames().iterator(); assertEquals("non.identifier.name3_parent", names_it.next()); assertEquals("name1", names_it.next()); assertEquals("name2_grandparent", names_it.next()); assertEquals("non.identifier.name3", names_it.next()); assertEquals("new_non.identifier.name3", names_it.next()); assertFalse(names_it.hasNext()); names_it = properties_child3.getInjectableNames().iterator(); assertEquals("name1", names_it.next()); assertEquals("name2_grandparent", names_it.next()); assertFalse(names_it.hasNext()); } public void testPutAll() { HierarchicalProperties properties1 = new HierarchicalProperties(); assertEquals(0, properties1.size()); HierarchicalProperties properties2 = new HierarchicalProperties(); assertEquals(0, properties2.size()); Object value1 = new StringBuffer("test"); Object value2 = new Date(106, 7, 8); properties2.put("24", value1); properties2.put("test", value2); properties1.putAll(properties2); assertEquals(2, properties1.size()); Iterator names_it = properties1.getNames().iterator(); assertEquals("24", names_it.next()); assertEquals("test", names_it.next()); assertSame(value1, properties1.get("24").getValue()); assertSame(value2, properties1.get("test").getValue()); } public void testPutAllMap() { HierarchicalProperties properties = new HierarchicalProperties(); assertEquals(0, properties.size()); Map map = new LinkedHashMap(); Object value1 = new StringBuffer("test"); Object value2 = new Date(106, 7, 8); map.put(24, value1); map.put("test", value2); properties.putAll(map); assertEquals(2, properties.size()); Iterator names_it = properties.getNames().iterator(); assertEquals("24", names_it.next()); assertEquals("test", names_it.next()); assertSame(value1, properties.get("24").getValue()); assertSame(value2, properties.get("test").getValue()); } public void testPutAllWithoutReplacing() { HierarchicalProperties properties1 = new HierarchicalProperties(); assertEquals(0, properties1.size()); HierarchicalProperties properties2 = new HierarchicalProperties(); assertEquals(0, properties2.size()); Object value1 = new StringBuffer("test"); Object value2 = new Date(106, 7, 8); Object value3 = 38746387L; properties1.put("test", value2); properties2.put("24", value1); properties2.put("test", value3); properties1.putAllWithoutReplacing(properties2); assertEquals(2, properties1.size()); Iterator names_it = properties1.getNames().iterator(); assertEquals("test", names_it.next()); assertEquals("24", names_it.next()); assertSame(value1, properties1.get("24").getValue()); assertSame(value2, properties1.get("test").getValue()); } public void testGetValueString() { HierarchicalProperties properties = new HierarchicalProperties(); Object value1 = new StringBuffer("test"); Object value2 = new BigDecimal("12682861E+10"); properties.put("value1", value1); properties.put("value2", value2); properties.put("value3", null); properties.put("value4", ""); properties.put("value5", new PropertyValueParticipant("inexistent_participant", new PropertyValueObject("key"))); assertEquals("test", properties.getValueString("value1")); assertEquals("1.2682861E+17", properties.getValueString("value2")); assertNull(properties.getValueString("value3")); assertNull(properties.getValueString("value4")); assertNull(properties.getValueString("inexistent")); try { properties.getValueString("value5"); fail("Expected exception"); } catch (PropertyValueException e) { assertTrue(e instanceof ParticipantUnknownException); assertEquals("inexistent_participant", ((ParticipantUnknownException)e).getName()); } assertEquals("test", properties.getValueString("value1", "default1")); assertEquals("1.2682861E+17", properties.getValueString("value2", "default2")); assertEquals("default3", properties.getValueString("value3", "default3")); assertEquals("default4", properties.getValueString("value4", "default4")); assertEquals("default5", properties.getValueString("inexistent", "default5")); try { properties.getValueString("value5", "default5"); fail("Expected exception"); } catch (PropertyValueException e) { assertTrue(e instanceof ParticipantUnknownException); assertEquals("inexistent_participant", ((ParticipantUnknownException)e).getName()); } } public void testGetValueTyped() { HierarchicalProperties properties = new HierarchicalProperties(); Object value1 = new StringBuffer("test"); Object value2 = new BigDecimal("12682861E+10"); Object value4 = ""; properties.put("value1", value1); properties.put("value2", value2); properties.put("value3", null); properties.put("value4", value4); properties.put("value5", new PropertyValueParticipant("inexistent_participant", new PropertyValueObject("key"))); assertSame(value1, properties.getValueTyped("value1", StringBuffer.class)); assertSame(value2, properties.getValueTyped("value2", BigDecimal.class)); assertNull(properties.getValueTyped("value3", String.class)); assertSame(value4, properties.getValueTyped("value4", String.class)); assertNull(properties.getValueTyped("inexistent", String.class)); try { properties.getValueTyped("value5", String.class); fail("Expected exception"); } catch (PropertyValueException e) { assertTrue(e instanceof ParticipantUnknownException); assertEquals("inexistent_participant", ((ParticipantUnknownException)e).getName()); } BigDecimal default3 = new BigDecimal("5718620E+6"); Integer default5 = 97586; assertSame(value1, properties.getValueTyped("value1", StringBuffer.class, new StringBuffer("default1"))); assertSame(value2, properties.getValueTyped("value2", BigDecimal.class, new BigDecimal(1268))); assertSame(default3, properties.getValueTyped("value3", BigDecimal.class, default3)); assertSame(value4, properties.getValueTyped("value4", String.class, "default4")); assertSame(default5, properties.getValueTyped("inexistent", Integer.class, default5)); try { properties.getValueTyped("value5", String.class, "default5"); fail("Expected exception"); } catch (PropertyValueException e) { assertTrue(e instanceof ParticipantUnknownException); assertEquals("inexistent_participant", ((ParticipantUnknownException)e).getName()); } try { properties.getValueTyped("value2", Date.class); fail("Expected exception"); } catch (PropertyValueException e) { assertTrue(e instanceof IncompatiblePropertyValueTypeException); assertEquals("value2", ((IncompatiblePropertyValueTypeException)e).getPropertyName()); assertSame(Date.class, ((IncompatiblePropertyValueTypeException)e).getExpectedType()); assertSame(BigDecimal.class, ((IncompatiblePropertyValueTypeException)e).getActualType()); } } }