/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.component; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertNull; import java.util.Map; import org.testng.annotations.Test; import com.google.common.collect.ImmutableMap; import com.opengamma.util.test.TestGroup; /** * Test. */ @Test(groups = TestGroup.UNIT) public class ComponentPropertiesTest { public void test_basics_empty() { ConfigProperties test = new ConfigProperties(); assertEquals(0, test.size()); assertEquals(null, test.get("x")); assertEquals(null, test.getValue("x")); assertEquals(false, test.containsKey("x")); assertEquals(false, test.containsKey(null)); assertEquals(0, test.keySet().size()); assertEquals(0, test.toMap().size()); assertEquals(0, test.loggableMap().size()); assertEquals(null, test.loggableValue("x")); } public void test_basics() { ConfigProperties test = new ConfigProperties(); test.add(ConfigProperty.of("a", "AA", false)); assertEquals(1, test.size()); assertEquals(ConfigProperty.of("a", "AA", false), test.get("a")); assertEquals("AA", test.getValue("a")); assertEquals(true, test.containsKey("a")); assertEquals(1, test.toMap().size()); assertEquals("AA", test.toMap().get("a")); assertEquals(1, test.loggableMap().size()); assertEquals("AA", test.loggableMap().get("a")); assertEquals("AA", test.loggableValue("a")); assertEquals(true, test.toString().contains("AA")); test.add(ConfigProperty.of("b", "BB", false)); assertEquals(2, test.size()); assertEquals(ConfigProperty.of("a", "AA", false), test.get("a")); assertEquals("AA", test.getValue("a")); assertEquals(true, test.containsKey("a")); assertEquals(ConfigProperty.of("b", "BB", false), test.get("b")); assertEquals("BB", test.getValue("b")); assertEquals(true, test.containsKey("b")); assertEquals(2, test.toMap().size()); assertEquals("AA", test.toMap().get("a")); assertEquals("BB", test.toMap().get("b")); test.add(ConfigProperty.of("b", "CC", false)); assertEquals(2, test.size()); assertEquals("AA", test.getValue("a")); assertEquals("CC", test.getValue("b")); test.addIfAbsent(ConfigProperty.of("b", "DD", false)); assertEquals(2, test.size()); assertEquals("AA", test.getValue("a")); assertEquals("CC", test.getValue("b")); test.addIfAbsent(ConfigProperty.of("e", "EE", false)); assertEquals(3, test.size()); assertEquals("AA", test.getValue("a")); assertEquals("CC", test.getValue("b")); assertEquals("EE", test.getValue("e")); } public void test_basics_put() { ConfigProperties test = new ConfigProperties(); test.put("a", "AA"); assertEquals(1, test.size()); assertEquals(ConfigProperty.of("a", "AA", false), test.get("a")); test.put("a", "BB"); assertEquals(1, test.size()); assertEquals(ConfigProperty.of("a", "BB", false), test.get("a")); Map<String, String> map = ImmutableMap.of("a", "CC", "e", "EE"); test.putAll(map); assertEquals(2, test.size()); assertEquals(ConfigProperty.of("a", "CC", false), test.get("a")); assertEquals(ConfigProperty.of("e", "EE", false), test.get("e")); } public void test_basics_hidden() { ConfigProperties test = new ConfigProperties(); ConfigProperty resolved = test.resolveProperty("password", "abc", 0); assertEquals(ConfigProperty.of("password", "abc", true), resolved); test.add(resolved); assertEquals(1, test.size()); assertEquals(ConfigProperty.of("password", "abc", true), test.get("password")); assertEquals("abc", test.getValue("password")); assertEquals(1, test.toMap().size()); assertEquals("abc", test.toMap().get("password")); assertEquals(1, test.loggableMap().size()); assertEquals(ConfigProperties.HIDDEN, test.loggableMap().get("password")); assertEquals(ConfigProperties.HIDDEN, test.loggableValue("password")); assertEquals(false, test.toString().contains("abc")); } public void test_basics_hidden_resolve() { ConfigProperties test = new ConfigProperties(); test.add(ConfigProperty.of("password", "abc", true)); ConfigProperty resolved = test.resolveProperty("other", "pw:${password}", 0); assertEquals(ConfigProperty.of("other", "pw:abc", true), resolved); test.add(resolved); assertEquals(2, test.size()); assertEquals(ConfigProperty.of("password", "abc", true), test.get("password")); assertEquals(ConfigProperty.of("other", "pw:abc", true), test.get("other")); assertEquals("abc", test.getValue("password")); assertEquals("pw:abc", test.getValue("other")); assertEquals(2, test.toMap().size()); assertEquals("abc", test.toMap().get("password")); assertEquals("pw:abc", test.toMap().get("other")); assertEquals(2, test.loggableMap().size()); assertEquals(ConfigProperties.HIDDEN, test.loggableMap().get("password")); assertEquals(ConfigProperties.HIDDEN, test.loggableMap().get("other")); assertEquals(ConfigProperties.HIDDEN, test.loggableValue("password")); assertEquals(ConfigProperties.HIDDEN, test.loggableValue("other")); assertEquals(false, test.toString().contains("abc")); } //------------------------------------------------------------------------- public void test_property_withKey() { ConfigProperty base = ConfigProperty.of("a", "AA", false); ConfigProperty test = base.withKey("b"); assertEquals(ConfigProperty.of("b", "AA", false), test); } public void test_property_equals() { ConfigProperty a1 = ConfigProperty.of("a", "AA", false); ConfigProperty a2 = ConfigProperty.of("a", "AA", false); ConfigProperty b = ConfigProperty.of("b", "AA", false); ConfigProperty c = ConfigProperty.of("a", "BB", false); ConfigProperty d1 = ConfigProperty.of("a", "AA", true); ConfigProperty d2 = ConfigProperty.of("a", "AA", true); assertEquals(true, a1.equals(a1)); assertEquals(true, a1.equals(a2)); assertEquals(false, a1.equals(b)); assertEquals(false, a1.equals(c)); assertEquals(false, a1.equals(d1)); assertEquals(false, a1.equals(null)); assertEquals(false, a1.equals("")); assertEquals(true, a1.hashCode() == a2.hashCode()); assertEquals(true, d1.hashCode() == d2.hashCode()); } public void test_property_toString() { assertEquals("a=AA", ConfigProperty.of("a", "AA", false).toString()); assertEquals("a=" + ConfigProperties.HIDDEN, ConfigProperty.of("a", "AA", true).toString()); } //------------------------------------------------------------------------- @Test(expectedExceptions = ComponentConfigException.class) public void test_missing_throws_exception() { ConfigProperties test = new ConfigProperties(); test.resolveProperty("foo", "${bar}", 0); } @Test public void test_optional_is_defined() { ConfigProperties test = new ConfigProperties(); test.add(ConfigProperty.of("bar", "1", false)); ConfigProperty property = test.resolveProperty("foo", "${bar?}", 0); assertEquals("foo", property.getKey()); assertEquals("1", property.getValue()); } @Test public void test_embedded_optional() { ConfigProperties test = new ConfigProperties(); test.add(ConfigProperty.of("inner", "1", false)); test.add(ConfigProperty.of("outer1", "1234", false)); ConfigProperty property = test.resolveProperty("foo", "${outer${inner?}?}", 0); assertEquals("1234", property.getValue()); } @Test public void test_missing_but_optional_is_not_defined() { ConfigProperties test = new ConfigProperties(); ConfigProperty property = test.resolveProperty("foo", "${bar?}", 0); assertNull(property); } @Test public void test_embedded_properties() { ConfigProperties test = new ConfigProperties(); test.add(ConfigProperty.of("inner", "1", false)); test.add(ConfigProperty.of("outer1", "1234", false)); ConfigProperty property = test.resolveProperty("foo", "${outer${inner}}", 0); assertEquals("1234", property.getValue()); } @Test public void test_embedded_optional_treated_as_blank() { ConfigProperties test = new ConfigProperties(); test.add(ConfigProperty.of("outer", "1234", false)); ConfigProperty property = test.resolveProperty("foo", "${out${inner?}er}", 0); assertEquals("1234", property.getValue()); } @Test public void test_embedded_in_optional() { ConfigProperties test = new ConfigProperties(); test.add(ConfigProperty.of("inner", "1234", false)); ConfigProperty property = test.resolveProperty("foo", "${out${inner}er?}", 0); assertNull(property); } @Test public void test_sequential_properties() { ConfigProperties test = new ConfigProperties(); test.add(ConfigProperty.of("first", "foo", false)); test.add(ConfigProperty.of("second", "bar", false)); ConfigProperty property = test.resolveProperty("foo", "${first}/${second}", 0); assertEquals("foo/bar", property.getValue()); } @Test public void test_sequential_required_optional() { ConfigProperties test = new ConfigProperties(); test.add(ConfigProperty.of("first", "foo", false)); ConfigProperty property = test.resolveProperty("foo", "${first}/${second?}", 0); assertEquals("foo/", property.getValue()); } @Test public void test_sequential_optional_required() { ConfigProperties test = new ConfigProperties(); test.add(ConfigProperty.of("second", "foo", false)); ConfigProperty property = test.resolveProperty("foo", "${first?}/${second}", 0); assertEquals("/foo", property.getValue()); } @Test public void test_present_optional_used() { ConfigProperties test = new ConfigProperties(); test.add(ConfigProperty.of("foo", "", false)); ConfigProperty property = test.resolveProperty("foo", "${foo?}", 0); assertEquals("", property.getValue()); } }