package org.springframework.roo.converters;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.springframework.roo.shell.OptionContexts.INCLUDE_CURRENT_MODULE;
import static org.springframework.roo.project.maven.Pom.ROOT_MODULE_SYMBOL;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.springframework.roo.project.ProjectOperations;
import org.springframework.roo.project.maven.Pom;
import org.springframework.roo.shell.Completion;
/**
* Unit test of {@link PomConverter}
*
* @author Andrew Swan
* @since 1.2.0
*/
public class PomConverterTest {
private static final String CHILD_MODULE = "child";
private static final String ROOT_MODULE = "";
// Fixture
private PomConverter converter;
@Mock
private ProjectOperations mockProjectOperations;
private void assertCompletions(final String optionContext, final String focusedModuleName,
final Collection<String> moduleNames, final String... expectedCompletions) {
// Set up
when(mockProjectOperations.getFocusedModuleName()).thenReturn(focusedModuleName);
when(mockProjectOperations.getModuleNames()).thenReturn(moduleNames);
final List<Completion> completions = new ArrayList<Completion>();
// Invoke
final boolean allValuesComplete =
converter.getAllPossibleValues(completions, null, null, optionContext, null);
// Check
assertTrue(allValuesComplete);
assertEquals("Expected " + Arrays.toString(expectedCompletions) + " but was " + completions,
expectedCompletions.length, completions.size());
for (int i = 0; i < expectedCompletions.length; i++) {
assertEquals(expectedCompletions[i], completions.get(i).getValue());
}
}
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
converter = new PomConverter();
converter.projectOperations = mockProjectOperations;
}
@Test
public void testConvertOtherModuleName() {
final Pom mockPom = mock(Pom.class);
final String moduleName = "foo" + File.separator + "bar";
when(mockProjectOperations.getPomFromModuleName(moduleName)).thenReturn(mockPom);
assertEquals(mockPom, converter.convertFromText(moduleName, null, null));
}
@Test
public void testConvertRootModuleSymbol() {
final Pom mockRootPom = mock(Pom.class);
when(mockProjectOperations.getPomFromModuleName("")).thenReturn(mockRootPom);
assertEquals(mockRootPom, converter.convertFromText(ROOT_MODULE_SYMBOL, null, null));
}
@Test
public void testDoesNotSupportOtherTypes() {
assertFalse(converter.supports(Object.class, null));
}
@Test
public void testGetCompletionsExcludingCurrentWhenChildModuleExistsAndChildIsFocused() {
assertCompletions(null, CHILD_MODULE, Arrays.asList(ROOT_MODULE, CHILD_MODULE),
ROOT_MODULE_SYMBOL);
}
@Test
public void testGetCompletionsExcludingCurrentWhenChildModuleExistsAndRootIsFocused() {
assertCompletions(null, ROOT_MODULE, Arrays.asList(ROOT_MODULE, CHILD_MODULE), CHILD_MODULE);
}
@Test
public void testGetCompletionsExcludingCurrentWhenNoModulesExist() {
assertCompletions(null, ROOT_MODULE, Collections.<String>emptyList());
}
@Test
public void testGetCompletionsExcludingCurrentWhenOnlyRootModuleExists() {
assertCompletions(null, ROOT_MODULE, Arrays.asList(ROOT_MODULE));
}
@Test
public void testGetCompletionsIncludingCurrentWhenChildModuleExistsAndChildIsFocused() {
assertCompletions(INCLUDE_CURRENT_MODULE, CHILD_MODULE,
Arrays.asList(ROOT_MODULE, CHILD_MODULE), ROOT_MODULE_SYMBOL, CHILD_MODULE);
}
@Test
public void testGetCompletionsIncludingCurrentWhenChildModuleExistsAndRootIsFocused() {
assertCompletions(INCLUDE_CURRENT_MODULE, ROOT_MODULE,
Arrays.asList(ROOT_MODULE, CHILD_MODULE), ROOT_MODULE_SYMBOL, CHILD_MODULE);
}
@Test
public void testGetCompletionsIncludingCurrentWhenNoModulesExist() {
assertCompletions(INCLUDE_CURRENT_MODULE, ROOT_MODULE, Collections.<String>emptyList());
}
@Test
public void testGetCompletionsIncludingCurrentWhenOnlyRootModuleExists() {
assertCompletions(INCLUDE_CURRENT_MODULE, ROOT_MODULE, Arrays.asList(ROOT_MODULE),
ROOT_MODULE_SYMBOL);
}
@Test
public void testSupportsPoms() {
assertTrue(converter.supports(Pom.class, null));
}
}