private List<Object> addDeclaredExtensions(ComponentContainer container, Predicate<Object> extensionFilter, Predicate<Object> additionalSideFilter, CoreExtension coreExtension) { ContextImpl context = new ContextImpl(container, extensionFilter, additionalSideFilter, coreExtension.getName()); coreExtension.load(context); return context.getProviders(); }
@Override public boolean isInstalled(String coreExtensionName) { checkInitialized(); return installedCoreExtensions.stream() .anyMatch(t -> coreExtensionName.equals(t.getName())); }
@Test public void install_provides_new_Configuration_when_getBootConfiguration_is_called_and_there_is_none_in_container() { CoreExtension coreExtension1 = newCoreExtension(); CoreExtension coreExtension2 = newCoreExtension(); when(coreExtensionRepository.loadedCoreExtensions()).thenReturn(Stream.of(coreExtension1, coreExtension2)); ComponentContainer container = new ComponentContainer(); underTest.install(container, noExtensionFilter(), noAdditionalSideFilter()); verify(coreExtension1).load(contextCaptor.capture()); verify(coreExtension2).load(contextCaptor.capture()); // verify each core extension gets its own configuration assertThat(contextCaptor.getAllValues()) .hasSameElementsAs(ImmutableSet.copyOf(contextCaptor.getAllValues())); }
private static CoreExtension newCoreExtension(String name) { CoreExtension res = mock(CoreExtension.class); when(res.getName()).thenReturn(name); return res; }
@Test public void install_calls_load_method_on_all_loaded_CoreExtension() { CoreExtension coreExtension1 = newCoreExtension(); CoreExtension coreExtension2 = newCoreExtension(); CoreExtension coreExtension3 = newCoreExtension(); CoreExtension coreExtension4 = newCoreExtension(); List<CoreExtension> coreExtensions = ImmutableList.of(coreExtension1, coreExtension2, coreExtension3, coreExtension4); InOrder inOrder = Mockito.inOrder(coreExtension1, coreExtension2, coreExtension3, coreExtension4); when(coreExtensionRepository.loadedCoreExtensions()).thenReturn(coreExtensions.stream()); ComponentContainer container = new ComponentContainer(); underTest.install(container, noExtensionFilter(), noAdditionalSideFilter()); inOrder.verify(coreExtension1).load(contextCaptor.capture()); inOrder.verify(coreExtension2).load(contextCaptor.capture()); inOrder.verify(coreExtension3).load(contextCaptor.capture()); inOrder.verify(coreExtension4).load(contextCaptor.capture()); // verify each core extension gets its own Context assertThat(contextCaptor.getAllValues()) .hasSameElementsAs(ImmutableSet.copyOf(contextCaptor.getAllValues())); }
private static CoreExtension newCoreExtension(Consumer<CoreExtension.Context> loadImplementation) { CoreExtension res = mock(CoreExtension.class); when(res.getName()).thenReturn("name_" + name_counter); name_counter++; doAnswer(invocation -> { CoreExtension.Context context = invocation.getArgument(0); loadImplementation.accept(context); return null; }).when(res).load(any()); return res; }
private static CoreExtension newCoreExtension(String name) { CoreExtension res = mock(CoreExtension.class); when(res.getName()).thenReturn(name); return res; } }
@Test public void install_provides_runtime_from_constructor_in_context() { CoreExtension coreExtension1 = newCoreExtension(); CoreExtension coreExtension2 = newCoreExtension(); when(coreExtensionRepository.loadedCoreExtensions()).thenReturn(Stream.of(coreExtension1, coreExtension2)); ComponentContainer container = new ComponentContainer(); underTest.install(container, noExtensionFilter(), noAdditionalSideFilter()); verify(coreExtension1).load(contextCaptor.capture()); verify(coreExtension2).load(contextCaptor.capture()); assertThat(contextCaptor.getAllValues()) .extracting(CoreExtension.Context::getRuntime) .containsOnly(sonarRuntime); }
private List<Object> addDeclaredExtensions(ComponentContainer container, Predicate<Object> extensionFilter, Predicate<Object> additionalSideFilter, CoreExtension coreExtension) { ContextImpl context = new ContextImpl(container, extensionFilter, additionalSideFilter, coreExtension.getName()); coreExtension.load(context); return context.getProviders(); }
private void install(ComponentContainer container, Predicate<Object> extensionFilter, Predicate<Object> additionalSideFilter, CoreExtension coreExtension) { String coreExtensionName = coreExtension.getName(); try { List<Object> providerKeys = addDeclaredExtensions(container, extensionFilter, additionalSideFilter, coreExtension); addProvidedExtensions(container, additionalSideFilter, coreExtensionName, providerKeys); LOG.debug("Installed core extension: " + coreExtensionName); coreExtensionRepository.installed(coreExtension); } catch (Exception e) { throw new RuntimeException("Failed to load core extension " + coreExtensionName, e); } }
@Test public void install_provides_Configuration_from_container_when_getBootConfiguration_is_called() { CoreExtension coreExtension1 = newCoreExtension(); CoreExtension coreExtension2 = newCoreExtension(); when(coreExtensionRepository.loadedCoreExtensions()).thenReturn(Stream.of(coreExtension1, coreExtension2)); Configuration configuration = new MapSettings().asConfig(); ComponentContainer container = new ComponentContainer(); container.add(configuration); underTest.install(container, noExtensionFilter(), noAdditionalSideFilter()); verify(coreExtension1).load(contextCaptor.capture()); verify(coreExtension2).load(contextCaptor.capture()); assertThat(contextCaptor.getAllValues()) .extracting(CoreExtension.Context::getBootConfiguration) .containsOnly(configuration); }
@Test public void isInstalled_returns_false_for_loaded_but_not_installed_CoreExtension() { CoreExtension coreExtension = newCoreExtension(); underTest.setLoadedCoreExtensions(singleton(coreExtension)); assertThat(underTest.isInstalled(coreExtension.getName())).isFalse(); }
@Test public void isInstalled_returns_true_for_loaded_and_installed_CoreExtension() { CoreExtension coreExtension = newCoreExtension(); underTest.setLoadedCoreExtensions(singleton(coreExtension)); underTest.installed(coreExtension); assertThat(underTest.isInstalled(coreExtension.getName())).isTrue(); }
private void assertPropertyDefinitions(ComponentContainer container, CoreExtension coreExtension, PropertyDefinition... definitions) { PropertyDefinitions propertyDefinitions = container.getComponentByType(PropertyDefinitions.class); if (definitions.length == 0) { assertThat(propertyDefinitions.getAll()).isEmpty(); } else { for (PropertyDefinition definition : definitions) { PropertyDefinition actual = propertyDefinitions.get(definition.key()); assertThat(actual.category()).isEqualTo(definition.category() == null ? coreExtension.getName() : definition.category()); } } }
@Override public boolean isInstalled(String coreExtensionName) { checkInitialized(); return installedCoreExtensions.stream() .anyMatch(t -> coreExtensionName.equals(t.getName())); }
private void install(ComponentContainer container, Predicate<Object> extensionFilter, Predicate<Object> additionalSideFilter, CoreExtension coreExtension) { String coreExtensionName = coreExtension.getName(); try { List<Object> providerKeys = addDeclaredExtensions(container, extensionFilter, additionalSideFilter, coreExtension); addProvidedExtensions(container, additionalSideFilter, coreExtensionName, providerKeys); LOG.debug("Installed core extension: " + coreExtensionName); coreExtensionRepository.installed(coreExtension); } catch (Exception e) { throw new RuntimeException("Failed to load core extension " + coreExtensionName, e); } }