package org.marketcetera.metrics; import org.marketcetera.util.misc.ClassVersion; import org.marketcetera.core.LoggerConfiguration; import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.*; import org.hamcrest.Matchers; import static org.hamcrest.Matchers.hasEntry; import static org.hamcrest.Matchers.allOf; import java.util.Map; import java.util.HashMap; /* $License$ */ /** * Tests {@link Configurator} * * @author anshul@marketcetera.com * @version $Id: ConfiguratorTest.java 16154 2012-07-14 16:34:05Z colin $ * @since 2.0.0 */ @ClassVersion("$Id: ConfiguratorTest.java 16154 2012-07-14 16:34:05Z colin $") public class ConfiguratorTest { @BeforeClass public static void setup() { LoggerConfiguration.logSetup(); Configurator.clearReportedValues(); } /** * Tests Configurator operations. */ @Test public void simple() { //Verify the default property file configurator instance assertTrue(Configurator.getReportedValues().isEmpty()); assertNull(Configurator.getProperty("property",null)); assertThat(Configurator.getReportedValues(), hasEntry("property",(String)null)); assertEquals(1, Configurator.getReportedValues().size()); assertEquals("default", Configurator.getProperty("property2", "default")); assertThat(Configurator.getReportedValues(), allOf( hasEntry("property",(String)null), hasEntry("property2","default"))); assertEquals(2, Configurator.getReportedValues().size()); Configurator.clearReportedValues(); //Now test with a mock subclass implementation. Map<String,String> properties = new HashMap<String, String>(); properties.put("key1", "value1"); properties.put("key2", "value2"); Configurator.setInstance(new MockConfigurator(properties)); //Verify no values have been reported so far. assertTrue(Configurator.getReportedValues().isEmpty()); //verify a non-existent property with no default assertNull(Configurator.getProperty("notexist", null)); assertThat(Configurator.getReportedValues(), hasEntry("notexist",(String)null)); assertEquals(1, Configurator.getReportedValues().size()); //verify a non-existent property with a default assertEquals("default", Configurator.getProperty("notexistwithdefault", "default")); assertThat(Configurator.getReportedValues(), allOf( hasEntry("notexist",(String)null), hasEntry("notexistwithdefault","default"))); assertEquals(2, Configurator.getReportedValues().size()); //verify an existing property without default assertEquals("value1", Configurator.getProperty("key1", null)); assertThat(Configurator.getReportedValues(), allOf( hasEntry("notexist",(String)null), hasEntry("notexistwithdefault","default"), hasEntry("key1","value1"))); assertEquals(3, Configurator.getReportedValues().size()); //verify an existing property with default assertEquals("value2", Configurator.getProperty("key2", "default")); assertThat(Configurator.getReportedValues(), allOf( hasEntry("notexist",(String)null), hasEntry("notexistwithdefault","default"), hasEntry("key1","value1"), hasEntry("key2","value2"))); assertEquals(4, Configurator.getReportedValues().size()); } /** * A mock configurator for testing {@link Configurator}. */ static class MockConfigurator extends Configurator { /** * Creates an instance. * * @param inProperties the properties that are used to furnish * configuration property values. */ public MockConfigurator(Map<String, String> inProperties) { mProperties = inProperties; } @Override protected String getPropertyValue(String inName) { return mProperties.get(inName); } private final Map<String,String> mProperties; } }