/* * Copyright 2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * You may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.codehaus.gmavenplus.plexus; import org.codehaus.plexus.component.configurator.ConfigurationListener; import org.codehaus.plexus.component.configurator.converters.lookup.ConverterLookup; import org.codehaus.plexus.component.configurator.converters.special.ClassRealmConverter; import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator; import org.codehaus.plexus.configuration.PlexusConfiguration; import org.junit.Before; import org.junit.Test; import org.mockito.MockitoAnnotations; import org.mockito.Spy; import java.lang.reflect.Field; import java.net.URL; import java.util.ArrayList; import java.util.List; import static java.util.Collections.singletonList; import static org.junit.Assert.assertEquals; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.*; /** * Unit tests for the IncludeProjectTestDependenciesComponentConfigurator class. * * @author Keegan Witt */ public class IncludeProjectTestDependenciesComponentConfiguratorTest { @Spy private IncludeProjectTestDependenciesComponentConfigurator configurator = new IncludeProjectTestDependenciesComponentConfigurator(); @Before public void setup() { MockitoAnnotations.initMocks(this); } @Test public void testConfigureComponent_1() throws Exception { ConverterLookup converterLookup = mock(ConverterLookup.class); Field modifiersField = configurator.getClass().getSuperclass().getSuperclass().getSuperclass().getDeclaredField("converterLookup"); modifiersField.setAccessible(true); modifiersField.set(configurator, converterLookup); Object component = mock(Object.class); PlexusConfiguration configuration = mock(PlexusConfiguration.class); ExpressionEvaluator expressionEvaluator = mock(ExpressionEvaluator.class); org.codehaus.plexus.classworlds.realm.ClassRealm containerRealm = mock(org.codehaus.plexus.classworlds.realm.ClassRealm.class); ConfigurationListener listener = mock(ConfigurationListener.class); doNothing().when(configurator).addDependenciesToClassRealm(any(ExpressionEvaluator.class), any(AbstractIncludeProjectDependenciesComponentConfigurator.Classpath.class), any(org.codehaus.plexus.classworlds.realm.ClassRealm.class)); configurator.configureComponent(component, configuration, expressionEvaluator, containerRealm, listener); verify(configurator, atLeastOnce()).addDependenciesToClassRealm(any(ExpressionEvaluator.class), any(AbstractIncludeProjectDependenciesComponentConfigurator.Classpath.class), any(org.codehaus.plexus.classworlds.realm.ClassRealm.class)); verify(converterLookup, atLeastOnce()).registerConverter(any(ClassRealmConverter.class)); } @Test public void testConfigureComponent_2() throws Exception { ConverterLookup converterLookup = mock(ConverterLookup.class); Field modifiersField = configurator.getClass().getSuperclass().getSuperclass().getSuperclass().getDeclaredField("converterLookup"); modifiersField.setAccessible(true); modifiersField.set(configurator, converterLookup); Object component = mock(Object.class); PlexusConfiguration configuration = mock(PlexusConfiguration.class); ExpressionEvaluator expressionEvaluator = mock(ExpressionEvaluator.class); org.codehaus.classworlds.ClassRealm containerRealm = mock(org.codehaus.classworlds.ClassRealm.class); ConfigurationListener listener = mock(ConfigurationListener.class); doNothing().when(configurator).addDependenciesToClassRealm(any(ExpressionEvaluator.class), any(AbstractIncludeProjectDependenciesComponentConfigurator.Classpath.class), any(org.codehaus.classworlds.ClassRealm.class)); configurator.configureComponent(component, configuration, expressionEvaluator, containerRealm, listener); verify(configurator, atLeastOnce()).addDependenciesToClassRealm(any(ExpressionEvaluator.class), any(AbstractIncludeProjectDependenciesComponentConfigurator.Classpath.class), any(org.codehaus.classworlds.ClassRealm.class)); verify(converterLookup, atLeastOnce()).registerConverter(any(ClassRealmConverter.class)); } @Test public void testAddProjectTestDependenciesToClassRealm() throws Exception { ExpressionEvaluator expressionEvaluator = mock(ExpressionEvaluator.class); List classpathElements = singletonList("CLASSPATH_ELEMENT"); doReturn(classpathElements).when(expressionEvaluator).evaluate(anyString()); org.codehaus.classworlds.ClassRealm containerRealm = mock(org.codehaus.classworlds.ClassRealm.class); configurator.addDependenciesToClassRealm(expressionEvaluator, IncludeProjectTestDependenciesComponentConfigurator.Classpath.TEST, containerRealm); verify(expressionEvaluator, times(1)).evaluate(anyString()); verify(containerRealm, times(1)).addConstituent(any(URL.class)); } @Test public void testAddProjectTestDependenciesToPlexusClassRealm() throws Exception { ExpressionEvaluator expressionEvaluator = mock(ExpressionEvaluator.class); List classpathElements = singletonList("CLASSPATH_ELEMENT"); doReturn(classpathElements).when(expressionEvaluator).evaluate(anyString()); org.codehaus.plexus.classworlds.realm.ClassRealm containerRealm = mock(org.codehaus.plexus.classworlds.realm.ClassRealm.class); configurator.addDependenciesToClassRealm(expressionEvaluator, IncludeProjectTestDependenciesComponentConfigurator.Classpath.TEST, containerRealm); verify(expressionEvaluator, times(1)).evaluate(anyString()); verify(containerRealm, times(1)).addURL(any(URL.class)); } @Test public void testBuildURLs() throws Exception { List<String> elements = new ArrayList<String>(); elements.add("ELEMENT_1"); URL[] urls = configurator.buildURLs(elements); assertEquals(elements.size(), urls.length); } }