@Test public void testWithOptions_sealedOptions() { assertThatThrownBy(() -> ConfigurationOption.stringOption() .key("test.options") .addValidOptions("foo", "bar") .sealValidOptions() .addValidOption("baz") .buildWithDefault("baz")) .isInstanceOf(IllegalStateException.class) .hasMessage("Options are sealed, you can't add any new ones"); }
@Test public void testWithOptions_invalidDefault() { assertThatThrownBy(() -> ConfigurationOption.stringOption() .key("test.options") .addValidOptions("foo", "bar") .buildWithDefault("baz")) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("Invalid option"); }
@Test(expected = IllegalArgumentException.class) public void testDefaultValueNull() { ConfigurationOption.stringOption().key("foo").buildWithDefault(null); }
@Test public void testWithOptions_valid() { final ConfigurationOption<String> option = ConfigurationOption.stringOption() .key("test.options") .addValidOptions("foo", "bar") .buildWithDefault("foo"); final ConfigurationRegistry configuration = createConfiguration(Collections.singletonList(option), SimpleSource.forTest("test.options", "bar")); assertThat(configuration.getConfigurationOptionByKey("test.options").getValueAsString()).isEqualTo("bar"); assertThatThrownBy(() -> configuration.save("test.options", "baz", "Test Configuration Source")) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("Invalid option"); }
@Test(expected = IllegalArgumentException.class) public void testDuplicateAlternateKeys() { createConfiguration(Arrays.asList( ConfigurationOption.stringOption().key("primaryKey1").aliasKeys("alternateKey1").build(), ConfigurationOption.stringOption().key("primaryKey2").aliasKeys("alternateKey1").build() ), new SimpleSource()); }
@Test public void testToJsonDoesNotThrowException() throws Exception { final ConfigurationOptionProvider optionProvider = TestConfigurationOptionProvider.of( ConfigurationOption.stringOption().key("foo").description("Foo").configurationCategory("Foos").build()); final ConfigurationRegistry configuration = ConfigurationRegistry.builder().addOptionProvider(optionProvider).build(); new ObjectMapper().writeValueAsString(configuration.getConfigurationOptionsByCategory()); }
@Test(expected = IllegalArgumentException.class) public void testDuplicateLabel() throws Exception { final ConfigurationOptionProvider optionProvider = TestConfigurationOptionProvider.of( ConfigurationOption.stringOption().key("foo").description("Foo").build(), ConfigurationOption.stringOption().key("foo").label("Bar").build()); ConfigurationRegistry.builder().addOptionProvider(optionProvider).build(); }
@Test(expected = IllegalStateException.class) public void testFailOnRequiredValueMissing() throws Exception { final ConfigurationOption<String> configurationOption = ConfigurationOption.stringOption().key("foo").buildRequired(); final ConfigurationOptionProvider optionProvider = TestConfigurationOptionProvider.of(configurationOption); ConfigurationRegistry.builder().addOptionProvider(optionProvider).failOnMissingRequiredValues(true).build(); }
@Test public void testOnConfigurationChanged() throws Exception { AtomicBoolean changeListenerFired = new AtomicBoolean(false); final ConfigurationOption<String> configurationOption = ConfigurationOption.stringOption() .key("foo") .dynamic(true) .addChangeListener((opt, oldValue, newValue) -> { assertEquals("foo", opt.getKey()); assertEquals("old", oldValue); assertEquals("new", newValue); changeListenerFired.set(true); throw new RuntimeException("This is an expected test exception. " + "It is thrown to test whether Configuration can cope with change listeners that throw an exception."); }).buildWithDefault("old"); final ConfigurationOptionProvider optionProvider = TestConfigurationOptionProvider.of(configurationOption); final SimpleSource configurationSource = new SimpleSource("test"); final ConfigurationRegistry config = ConfigurationRegistry.builder() .addOptionProvider(optionProvider) .addConfigSource(configurationSource) .build(); config.save("foo", "new", "test"); assertTrue(changeListenerFired.get()); }