@Test
public void testUpdateProperties() {

	Map<String, RequiredPropertyWrapper> properties = getProperties(new String[][] {
		new String[] {
				"unmodified", "", "DEFAULT_UNMODIFIED", ""
		},
		new String[] {
				"computed", "", "DEFAULT_COMPUTED.${unmodified}", ""
		},
		new String[] {
				"multiple", "", "DEFAULT_MULTIPLE.${computed}-${hasvalue}", ""
		},
		new String[] {
				"hasvalue", "HASVALUE", "DEFAULT_HASVALUE", ""
		},
		new String[] {
				"modified", "MODIFIED", "DEFAULT_MODIFIED.${hasvalue}", "true"
		},
		new String[] {
				"stackoverflow", "", "${stackoverflow}", ""
		},
		new String[] {
				"empty", "", "", ""
		},
		new String[] {
				"useempty", "", "${empty}", ""
		},
		new String[] {
				"null", null, null, null
		},
		new String[] {
				"usenull", "", "${null}", ""
		}
	});
	
	printProperties(properties);
	PropUtils.updateProperties(properties);
	printProperties(properties);
	
	assertEquals("DEFAULT_MULTIPLE.DEFAULT_COMPUTED.DEFAULT_UNMODIFIED-DEFAULT_HASVALUE", properties.get("multiple").getValue());
	assertEquals("MODIFIED", properties.get("modified").getValue());
	assertEquals("", properties.get("stackoverflow").getValue());
}