private Config buildConfig(ClassLoader loader) { return getBuilder().forClassLoader(loader) .addDefaultSources() .addDiscoveredSources() .addDiscoveredConverters() .build(); }
@Test public void testAutoDiscoveredConfigureSources() { Config config = ConfigProviderResolver.instance().getBuilder().addDefaultSources().addDiscoveredSources().build(); Assert.assertEquals(config.getValue("tck.config.test.customDbConfig.key1", String.class), "valueFromDb1"); } @Test
@Test(expectedExceptions = IllegalArgumentException.class) public void testAutoDiscoveredConverterNotAddedAutomatically() { Config config = ConfigProviderResolver.instance().getBuilder().addDefaultSources().addDiscoveredSources().build(); Pizza dVaule = config.getValue("tck.config.test.customDbConfig.key3", Pizza.class); Assert.fail("The auto discovered converter should not be added automatically."); } }
@Test public void testDonaldConversionWithLambdaConverter() { Config newConfig = ConfigProviderResolver.instance().getBuilder().addDefaultSources() .withConverter(Donald.class, 100, (s) -> Donald.iLikeDonald(s)) .build(); Donald donald = newConfig.getValue("tck.config.test.javaconfig.converter.donaldname", Donald.class); Assert.assertNotNull(donald); Assert.assertEquals(donald.getName(), "Duck"); }
@Test public void testAutoDiscoveredConverterManuallyAdded() { Config config = ConfigProviderResolver.instance().getBuilder().addDefaultSources().addDiscoveredSources().addDiscoveredConverters().build(); Pizza dVaule = config.getValue("tck.config.test.customDbConfig.key3", Pizza.class); Assert.assertEquals(dVaule.getSize(), "big"); Assert.assertEquals(dVaule.getFlavor(), "cheese"); }
@Override public Config getConfig(ClassLoader classLoader) { Config config = configsForClassLoader.get(classLoader); if (config == null) { synchronized (this) { config = configsForClassLoader.get(classLoader); if (config == null) { config = getBuilder().forClassLoader(classLoader) .addDefaultSources() .addDiscoveredSources() .addDiscoveredConverters() .build(); registerConfig(config, classLoader); } } } return config; }
private Config buildConfig(ClassLoader loader) { return getBuilder().forClassLoader(loader) .addDefaultSources() .addDiscoveredSources() .addDiscoveredConverters() .build(); }
@Test public void testDonaldConversionWithMultipleLambdaConverters() { // defines 2 config with the lambda converters defined in different orders. // Order must not matter, the lambda with the upper case must always be used as it has the highest priority Config config1 = ConfigProviderResolver.instance().getBuilder().addDefaultSources() .withConverter(Donald.class, 101, (s) -> Donald.iLikeDonald(s.toUpperCase())) .withConverter(Donald.class, 100, (s) -> Donald.iLikeDonald(s)) .build(); Config config2 = ConfigProviderResolver.instance().getBuilder().addDefaultSources() .withConverter(Donald.class, 100, (s) -> Donald.iLikeDonald(s)) .withConverter(Donald.class, 101, (s) -> Donald.iLikeDonald(s.toUpperCase())) .build(); Donald donald = config1.getValue("tck.config.test.javaconfig.converter.donaldname", Donald.class); Assert.assertNotNull(donald); Assert.assertEquals(donald.getName(), "DUCK", "The converter with the highest priority (using upper case) must be used."); donald = config2.getValue("tck.config.test.javaconfig.converter.donaldname", Donald.class); Assert.assertNotNull(donald); Assert.assertEquals(donald.getName(), "DUCK", "The converter with the highest priority (using upper case) must be used."); }
@Test public void testDuckConversionWithMultipleConverters() { // defines 2 config with the converters defined in different orders. // Order must not matter, the UpperCaseDuckConverter must always be used as it has the highest priority Config config1 = ConfigProviderResolver.instance().getBuilder().addDefaultSources() .withConverters(new UpperCaseDuckConverter(), new DuckConverter()) .build(); Config config2 = ConfigProviderResolver.instance().getBuilder().addDefaultSources() .withConverters(new DuckConverter(), new UpperCaseDuckConverter()) .build(); Duck duck = config1.getValue("tck.config.test.javaconfig.converter.duckname", Duck.class); Assert.assertNotNull(duck); Assert.assertEquals(duck.getName(), "HANNELORE", "The converter with the highest priority (UpperCaseDuckConverter) must be used."); duck = config2.getValue("tck.config.test.javaconfig.converter.duckname", Duck.class); Assert.assertNotNull(duck); // the UpperCaseDuckConverter has highest priority Assert.assertEquals(duck.getName(), "HANNELORE", "The converter with the highest priority (UpperCaseDuckConverter) must be used."); }
@Override public Config getConfig(ClassLoader forClassLoader) { Config config = existingConfig(forClassLoader); if (config == null) { synchronized (DefaultConfigProvider.class) { config = existingConfig(forClassLoader); if (config == null) { config = getBuilder().forClassLoader(forClassLoader) .addDefaultSources() .addDiscoveredSources() .addDiscoveredConverters() .build(); registerConfig(config, forClassLoader); } } } return config; }