/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.plugin.maven.server.rmi; import org.eclipse.che.maven.data.MavenConstants; import org.eclipse.che.maven.data.MavenKey; import org.eclipse.che.plugin.maven.server.MavenServerManager; import org.eclipse.che.plugin.maven.server.MavenWrapperManager; import org.eclipse.che.plugin.maven.server.core.EclipseWorkspaceProvider; import org.eclipse.che.plugin.maven.server.core.MavenProjectListener; import org.eclipse.che.plugin.maven.server.core.MavenProjectManager; import org.eclipse.che.plugin.maven.server.core.MavenTerminalImpl; import org.eclipse.che.plugin.maven.server.core.project.MavenProject; import org.eclipse.che.plugin.maven.server.core.project.MavenProjectModifications; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.runtime.Path; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; import org.mockito.testng.MockitoTestNGListener; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Listeners; import org.testng.annotations.Test; import java.util.Collections; import java.util.Map; import static org.fest.assertions.Assertions.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; /** * @author Evgen Vidolob */ @Listeners(value = {MockitoTestNGListener.class}) public class MavenProjectManagerTest { private final String mavenServerPath = MavenProjectManagerTest.class.getResource("/maven-server").getPath(); private MavenServerManager manager = new MavenServerManager(mavenServerPath); private MavenProjectManager projectManager; @Mock private IProject project; @Mock private IFile pom; @Mock private MavenProjectListener listener; @Mock private EclipseWorkspaceProvider workspaceProvider; @Mock private IWorkspace workspace; @Mock private IWorkspaceRoot workspaceRoot; @Captor private ArgumentCaptor<Map<MavenProject, MavenProjectModifications>> mapArgument; @BeforeMethod public void setUp() throws Exception { MavenWrapperManager wrapperManager = new MavenWrapperManager(manager); projectManager = new MavenProjectManager(wrapperManager, manager, new MavenTerminalImpl(), new MavenServerManagerTest.MyMavenServerProgressNotifier(), workspaceProvider); when(workspaceProvider.get()).thenReturn(workspace); when(workspace.getRoot()).thenReturn(workspaceRoot); } @AfterMethod public void tearDown() throws Exception { manager.shutdown(); } @Test public void testResolveProject() throws Exception { when(project.getFile(MavenConstants.POM_FILE_NAME)).thenReturn(pom); when(pom.getLocation()).thenReturn(new Path(MavenProjectManagerTest.class.getResource("/FirstProject/pom.xml").getFile())); when(pom.getFullPath()).thenReturn(new Path("/FirstProject/pom.xml")); when(project.getFullPath()).thenReturn(new Path("/FirstProject/")); projectManager.addListener(listener); MavenProject mavenProject = new MavenProject(project, workspace); mavenProject.read(project, manager); MavenKey mavenKey = mavenProject.getMavenKey(); assertThat(mavenKey).isNotNull(); projectManager.resolveMavenProject(project, mavenProject); verify(listener).projectResolved(any(), any()); } @Test public void testNotValidResolveProject() throws Exception { when(project.getFile(MavenConstants.POM_FILE_NAME)).thenReturn(pom); when(pom.getLocation()).thenReturn(new Path(MavenProjectManagerTest.class.getResource("/BadProject/pom.xml").getFile())); when(pom.getFullPath()).thenReturn(new Path("/BadProject/pom.xml")); when(project.getFullPath()).thenReturn(new Path("/BadProject")); projectManager.addListener(listener); MavenProject mavenProject = new MavenProject(project, workspace); mavenProject.read(project, manager); MavenKey mavenKey = mavenProject.getMavenKey(); assertThat(mavenKey).isNotNull(); projectManager.resolveMavenProject(project, mavenProject); verify(listener).projectResolved(any(), any()); assertThat(mavenProject.getProblems()).isNotNull().isNotEmpty(); mavenProject.getProblems().forEach(System.out::println); } @Test public void testUpdateProject() throws Exception { when(project.getFile(MavenConstants.POM_FILE_NAME)).thenReturn(pom); when(pom.getLocation()).thenReturn(new Path(MavenProjectManagerTest.class.getResource("/FirstProject/pom.xml").getFile())); when(pom.getFullPath()).thenReturn(new Path("/FirstProject/pom.xml")); when(project.getFullPath()).thenReturn(new Path("/FirstProject/")); projectManager.addListener(listener); MavenProject mavenProject = new MavenProject(project, workspace); mavenProject.read(project, manager); MavenKey mavenKey = mavenProject.getMavenKey(); assertThat(mavenKey).isNotNull(); projectManager.update(Collections.singletonList(project), true); verify(listener).projectUpdated(mapArgument.capture(), any()); } @Test public void testUpdateMultimoduleProject() throws Exception { IProject testProject = mock(IProject.class); IFile testPom = mock(IFile.class); IProject subModuleProject = mock(IProject.class); IFile subPom = mock(IFile.class); IFile testFile = mock(IFile.class); when(project.getFile(MavenConstants.POM_FILE_NAME)).thenReturn(pom); when(pom.getLocation()).thenReturn(new Path(MavenProjectManagerTest.class.getResource("/multimoduleProject/pom.xml").getFile())); when(pom.getFullPath()).thenReturn(new Path("/multimoduleProject/pom.xml")); when(project.getFullPath()).thenReturn(new Path("/multimoduleProject/")); when(testProject.getFile(MavenConstants.POM_FILE_NAME)).thenReturn(testPom); when(subModuleProject.getFile(MavenConstants.POM_FILE_NAME)).thenReturn(subPom); when(testProject.getFullPath()).thenReturn(new Path("/multimoduleProject/test")); when(subModuleProject.getFullPath()).thenReturn(new Path("/multimoduleProject/subModule")); when(testPom.getFullPath()).thenReturn(new Path("/multimoduleProject/test/pom.xml")); when(subPom.getFullPath()).thenReturn(new Path("/multimoduleProject/subModule/pom.xml")); when(testPom.getLocation()) .thenReturn(new Path(MavenProjectManagerTest.class.getResource("/multimoduleProject/test/pom.xml").getFile())); when(subPom.getLocation()) .thenReturn(new Path(MavenProjectManagerTest.class.getResource("/multimoduleProject/subModule/pom.xml").getFile())); when(workspaceRoot.getProject("/multimoduleProject/test")).thenReturn(testProject); when(workspaceRoot.getProject("/multimoduleProject/subModule")).thenReturn(subModuleProject); when(workspaceRoot.getFile(any())).thenReturn(testFile); when(testFile.exists()).thenReturn(false); projectManager.addListener(listener); MavenProject mavenProject = new MavenProject(project, workspace); mavenProject.read(project, manager); MavenKey mavenKey = mavenProject.getMavenKey(); assertThat(mavenKey).isNotNull(); projectManager.update(Collections.singletonList(project), true); verify(listener).projectUpdated(mapArgument.capture(), any()); } }