/******************************************************************************* * 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.projecttype; import org.eclipse.che.api.project.server.FileEntry; import org.eclipse.che.api.project.server.FolderEntry; import org.eclipse.che.api.vfs.Path; import org.eclipse.che.commons.lang.NameGenerator; import org.eclipse.che.ide.ext.java.shared.Constants; import org.eclipse.che.maven.data.MavenKey; import org.eclipse.che.plugin.maven.server.core.MavenProjectManager; import org.eclipse.che.plugin.maven.server.core.project.MavenProject; import org.eclipse.che.plugin.maven.shared.MavenAttributes; import org.mockito.Mock; import org.mockito.testng.MockitoTestNGListener; import org.testng.Assert; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Listeners; import org.testng.annotations.Test; import java.io.ByteArrayInputStream; import java.nio.charset.StandardCharsets; import java.util.List; import static java.util.Collections.singletonList; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; /** * @author Vitalii Parfonov */ @Listeners(value = {MockitoTestNGListener.class}) public class MavenValueProviderTest { String pomContent = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n" + " <parent>\n" + " <artifactId>che-plugin-parent</artifactId>\n" + " <groupId>org.eclipse.che.plugin</groupId>\n" + " <version>5.0.0-SNAPSHOT</version>\n" + " </parent>" + " <modelVersion>4.0.0</modelVersion>\n" + " <groupId>my_group</groupId>\n" + " <artifactId>my_artifact</artifactId>\n" + " <version>1.0-SNAPSHOT</version>\n" + " <packaging>jar</packaging>\n" + " <build>\n" + " <sourceDirectory>src</sourceDirectory>" + " <testSourceDirectory>test</testSourceDirectory>" + " </build>\n" + "</project>"; @Mock private MavenProjectManager mavenProjectManager; @Mock private FolderEntry folderEntry; @Mock private MavenProject mavenProject; @Mock private MavenKey mavenKey; @Mock private MavenKey parentKey; private MavenValueProvider mavenValueProvider; @BeforeMethod public void setUp() { when(folderEntry.getPath()).thenReturn(Path.of("")); when(mavenProject.getMavenKey()).thenReturn(mavenKey); when(mavenProject.getParentKey()).thenReturn(parentKey); mavenValueProvider = new MavenValueProvider(mavenProjectManager, folderEntry); } @Test public void getArtifactIdFromMavenProject() throws Exception { String artifactId = NameGenerator.generate("artifactId-", 6); when(mavenKey.getArtifactId()).thenReturn(artifactId); when(mavenProjectManager.getMavenProject(anyString())).thenReturn(mavenProject); List<String> artifactIds = mavenValueProvider.getValues(MavenAttributes.ARTIFACT_ID); Assert.assertNotNull(artifactIds); Assert.assertFalse(artifactIds.isEmpty()); Assert.assertEquals(artifactIds.size(), 1); Assert.assertNotNull(artifactIds.get(0)); Assert.assertEquals(artifactIds.get(0), artifactId); } @Test public void getGroupIdFromMavenProject() throws Exception { String groupId = NameGenerator.generate("groupId-", 6); when(mavenKey.getGroupId()).thenReturn(groupId); when(mavenProjectManager.getMavenProject(anyString())).thenReturn(mavenProject); List<String> groupIds = mavenValueProvider.getValues(MavenAttributes.GROUP_ID); Assert.assertNotNull(groupIds); Assert.assertFalse(groupIds.isEmpty()); Assert.assertEquals(groupIds.size(), 1); Assert.assertNotNull(groupIds.get(0)); Assert.assertEquals(groupIds.get(0), groupId); } @Test public void getVersionFromMavenProject() throws Exception { String versionId = NameGenerator.generate("version-", 6); when(mavenKey.getVersion()).thenReturn(versionId); when(mavenProjectManager.getMavenProject(anyString())).thenReturn(mavenProject); List<String> versions = mavenValueProvider.getValues(MavenAttributes.VERSION); Assert.assertNotNull(versions); Assert.assertFalse(versions.isEmpty()); Assert.assertEquals(versions.size(), 1); Assert.assertNotNull(versions.get(0)); Assert.assertEquals(versions.get(0), versionId); } @Test public void getPackagingFromMavenProject() throws Exception { when(mavenProjectManager.getMavenProject(anyString())).thenReturn(mavenProject); when(mavenProject.getPackaging()).thenReturn("war"); List<String> pkgs = mavenValueProvider.getValues(MavenAttributes.PACKAGING); Assert.assertNotNull(pkgs); Assert.assertFalse(pkgs.isEmpty()); Assert.assertEquals(pkgs.size(), 1); Assert.assertNotNull(pkgs.get(0)); Assert.assertEquals(pkgs.get(0), "war"); } @Test public void getPackagingFromMavenProjectIfNotSet() throws Exception { when(mavenProjectManager.getMavenProject(anyString())).thenReturn(mavenProject); List<String> pkgs = mavenValueProvider.getValues(MavenAttributes.PACKAGING); Assert.assertNotNull(pkgs); Assert.assertFalse(pkgs.isEmpty()); Assert.assertEquals(pkgs.size(), 1); Assert.assertNotNull(pkgs.get(0)); Assert.assertEquals(pkgs.get(0), "jar"); } @Test public void getParentArtifactFromMavenProject() throws Exception { String parentArtifact = NameGenerator.generate("parentArtifact", 6); when(parentKey.getArtifactId()).thenReturn(parentArtifact); when(mavenProjectManager.getMavenProject(anyString())).thenReturn(mavenProject); List<String> values = mavenValueProvider.getValues(MavenAttributes.PARENT_ARTIFACT_ID); Assert.assertNotNull(values); Assert.assertFalse(values.isEmpty()); Assert.assertEquals(values.size(), 1); Assert.assertNotNull(values.get(0)); Assert.assertEquals(values.get(0), parentArtifact); } @Test public void getParentVersionFromMavenProject() throws Exception { String parentVersionId = NameGenerator.generate("parent-version-", 6); when(parentKey.getVersion()).thenReturn(parentVersionId); when(mavenProjectManager.getMavenProject(anyString())).thenReturn(mavenProject); List<String> versions = mavenValueProvider.getValues(MavenAttributes.PARENT_VERSION); Assert.assertNotNull(versions); Assert.assertFalse(versions.isEmpty()); Assert.assertEquals(versions.size(), 1); Assert.assertNotNull(versions.get(0)); Assert.assertEquals(versions.get(0), parentVersionId); } @Test public void getParentGroupFromMavenProject() throws Exception { String groupId = NameGenerator.generate("parent-group-", 6); when(parentKey.getGroupId()).thenReturn(groupId); when(mavenProjectManager.getMavenProject(anyString())).thenReturn(mavenProject); List<String> values = mavenValueProvider.getValues(MavenAttributes.PARENT_GROUP_ID); Assert.assertNotNull(values); Assert.assertFalse(values.isEmpty()); Assert.assertEquals(values.size(), 1); Assert.assertNotNull(values.get(0)); Assert.assertEquals(values.get(0), groupId); } @Test public void getSourceFromMavenProject() throws Exception { final List<String> strings = singletonList("src"); when(mavenProject.getSources()).thenReturn(strings); when(mavenProjectManager.getMavenProject(anyString())).thenReturn(mavenProject); List<String> sources = mavenValueProvider.getValues(Constants.SOURCE_FOLDER); Assert.assertNotNull(sources); Assert.assertFalse(sources.isEmpty()); Assert.assertEquals(sources.size(), 1); Assert.assertEquals(sources, strings); } @Test public void getSourceFromMavenProjectIfNotSet() throws Exception { when(mavenProjectManager.getMavenProject(anyString())).thenReturn(mavenProject); List<String> sources = mavenValueProvider.getValues(Constants.SOURCE_FOLDER); Assert.assertNotNull(sources); Assert.assertFalse(sources.isEmpty()); Assert.assertEquals(sources.size(), 1); Assert.assertEquals(sources, singletonList(MavenAttributes.DEFAULT_SOURCE_FOLDER)); } @Test public void getTestSourceFromMavenProject() throws Exception { List<String> strings = singletonList("src/test"); when(mavenProject.getTestSources()).thenReturn(strings); when(mavenProjectManager.getMavenProject(anyString())).thenReturn(mavenProject); List<String> sources = mavenValueProvider.getValues(MavenAttributes.TEST_SOURCE_FOLDER); Assert.assertNotNull(sources); Assert.assertFalse(sources.isEmpty()); Assert.assertEquals(sources.size(), 1); Assert.assertEquals(sources, strings); } @Test public void getTestSourceFromMavenProjectIfNotSet() throws Exception { when(mavenProjectManager.getMavenProject(anyString())).thenReturn(mavenProject); List<String> sources = mavenValueProvider.getValues(MavenAttributes.TEST_SOURCE_FOLDER); verify(mavenProjectManager).getMavenProject(anyString()); Assert.assertNotNull(sources); Assert.assertFalse(sources.isEmpty()); Assert.assertEquals(sources.size(), 1); Assert.assertEquals(sources, singletonList(MavenAttributes.DEFAULT_TEST_SOURCE_FOLDER)); } @Test public void getArtifactIdFromPom() throws Exception { FileEntry fileEntry = mock(FileEntry.class); when(fileEntry.getInputStream()).thenReturn(new ByteArrayInputStream(pomContent.getBytes(StandardCharsets.UTF_8))); when(folderEntry.getChild(anyString())).thenReturn(fileEntry); List<String> artifactIds = mavenValueProvider.getValues(MavenAttributes.ARTIFACT_ID); Assert.assertNotNull(artifactIds); Assert.assertFalse(artifactIds.isEmpty()); Assert.assertEquals(artifactIds.size(), 1); Assert.assertNotNull(artifactIds.get(0)); Assert.assertEquals(artifactIds.get(0), "my_artifact"); } @Test public void getGroupIdFromPom() throws Exception { FileEntry fileEntry = mock(FileEntry.class); when(fileEntry.getInputStream()).thenReturn(new ByteArrayInputStream(pomContent.getBytes(StandardCharsets.UTF_8))); when(folderEntry.getChild(anyString())).thenReturn(fileEntry); List<String> groupIds = mavenValueProvider.getValues(MavenAttributes.GROUP_ID); Assert.assertNotNull(groupIds); Assert.assertFalse(groupIds.isEmpty()); Assert.assertEquals(groupIds.size(), 1); Assert.assertNotNull(groupIds.get(0)); Assert.assertEquals(groupIds.get(0), "my_group"); } @Test public void getVersionFromPom() throws Exception { FileEntry fileEntry = mock(FileEntry.class); when(fileEntry.getInputStream()).thenReturn(new ByteArrayInputStream(pomContent.getBytes(StandardCharsets.UTF_8))); when(folderEntry.getChild(anyString())).thenReturn(fileEntry); List<String> versions = mavenValueProvider.getValues(MavenAttributes.VERSION); Assert.assertNotNull(versions); Assert.assertFalse(versions.isEmpty()); Assert.assertEquals(versions.size(), 1); Assert.assertNotNull(versions.get(0)); Assert.assertEquals(versions.get(0), "1.0-SNAPSHOT"); } @Test public void getPackagingFromPom() throws Exception { FileEntry fileEntry = mock(FileEntry.class); when(fileEntry.getInputStream()).thenReturn(new ByteArrayInputStream(pomContent.getBytes(StandardCharsets.UTF_8))); when(folderEntry.getChild(anyString())).thenReturn(fileEntry); List<String> pkgs = mavenValueProvider.getValues(MavenAttributes.PACKAGING); Assert.assertNotNull(pkgs); Assert.assertFalse(pkgs.isEmpty()); Assert.assertEquals(pkgs.size(), 1); Assert.assertNotNull(pkgs.get(0)); Assert.assertEquals(pkgs.get(0), "jar"); } @Test public void getPackagingFromPomIfNotSet() throws Exception { FileEntry fileEntry = mock(FileEntry.class); String pom = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><project></project>"; when(fileEntry.getInputStream()).thenReturn(new ByteArrayInputStream(pom.getBytes(StandardCharsets.UTF_8))); when(folderEntry.getChild(anyString())).thenReturn(fileEntry); List<String> pkgs = mavenValueProvider.getValues(MavenAttributes.PACKAGING); Assert.assertNotNull(pkgs); Assert.assertFalse(pkgs.isEmpty()); Assert.assertEquals(pkgs.size(), 1); Assert.assertNotNull(pkgs.get(0)); Assert.assertEquals(pkgs.get(0), "jar"); } @Test public void getParentArtifactFromPom() throws Exception { FileEntry fileEntry = mock(FileEntry.class); when(fileEntry.getInputStream()).thenReturn(new ByteArrayInputStream(pomContent.getBytes(StandardCharsets.UTF_8))); when(folderEntry.getChild(anyString())).thenReturn(fileEntry); List<String> values = mavenValueProvider.getValues(MavenAttributes.PARENT_ARTIFACT_ID); Assert.assertNotNull(values); Assert.assertFalse(values.isEmpty()); Assert.assertEquals(values.size(), 1); Assert.assertNotNull(values.get(0)); Assert.assertEquals(values.get(0), "che-plugin-parent"); } @Test public void getParentVersionFromPom() throws Exception { FileEntry fileEntry = mock(FileEntry.class); when(fileEntry.getInputStream()).thenReturn(new ByteArrayInputStream(pomContent.getBytes(StandardCharsets.UTF_8))); when(folderEntry.getChild(anyString())).thenReturn(fileEntry); List<String> versions = mavenValueProvider.getValues(MavenAttributes.PARENT_VERSION); Assert.assertNotNull(versions); Assert.assertFalse(versions.isEmpty()); Assert.assertEquals(versions.size(), 1); Assert.assertNotNull(versions.get(0)); Assert.assertEquals(versions.get(0), "5.0.0-SNAPSHOT"); } @Test public void getParentGroupFromPom() throws Exception { FileEntry fileEntry = mock(FileEntry.class); when(fileEntry.getInputStream()).thenReturn(new ByteArrayInputStream(pomContent.getBytes(StandardCharsets.UTF_8))); when(folderEntry.getChild(anyString())).thenReturn(fileEntry); List<String> values = mavenValueProvider.getValues(MavenAttributes.PARENT_GROUP_ID); Assert.assertNotNull(values); Assert.assertFalse(values.isEmpty()); Assert.assertEquals(values.size(), 1); Assert.assertNotNull(values.get(0)); Assert.assertEquals(values.get(0), "org.eclipse.che.plugin"); } @Test public void getSourceFromPom() throws Exception { FileEntry fileEntry = mock(FileEntry.class); when(fileEntry.getInputStream()).thenReturn(new ByteArrayInputStream(pomContent.getBytes(StandardCharsets.UTF_8))); when(folderEntry.getChild(anyString())).thenReturn(fileEntry); List<String> sources = mavenValueProvider.getValues(Constants.SOURCE_FOLDER); Assert.assertNotNull(sources); Assert.assertFalse(sources.isEmpty()); Assert.assertEquals(sources.size(), 1); Assert.assertEquals(sources, singletonList("src")); } @Test public void getSourceFromPomIfNotSet() throws Exception { FileEntry fileEntry = mock(FileEntry.class); String pom = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><project></project>"; when(fileEntry.getInputStream()).thenReturn(new ByteArrayInputStream(pom.getBytes(StandardCharsets.UTF_8))); when(folderEntry.getChild(anyString())).thenReturn(fileEntry); List<String> sources = mavenValueProvider.getValues(Constants.SOURCE_FOLDER); Assert.assertNotNull(sources); Assert.assertFalse(sources.isEmpty()); Assert.assertEquals(sources.size(), 1); Assert.assertEquals(sources, singletonList(MavenAttributes.DEFAULT_SOURCE_FOLDER)); } @Test public void getTestSourcePom() throws Exception { FileEntry fileEntry = mock(FileEntry.class); when(fileEntry.getInputStream()).thenReturn(new ByteArrayInputStream(pomContent.getBytes(StandardCharsets.UTF_8))); when(folderEntry.getChild(anyString())).thenReturn(fileEntry); List<String> sources = mavenValueProvider.getValues(MavenAttributes.TEST_SOURCE_FOLDER); Assert.assertNotNull(sources); Assert.assertFalse(sources.isEmpty()); Assert.assertEquals(sources.size(), 1); Assert.assertEquals(sources, singletonList("test")); } @Test public void getTestSourceFromPomIfNotSet() throws Exception { FileEntry fileEntry = mock(FileEntry.class); String pom = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><project></project>"; when(fileEntry.getInputStream()).thenReturn(new ByteArrayInputStream(pom.getBytes(StandardCharsets.UTF_8))); when(folderEntry.getChild(anyString())).thenReturn(fileEntry); List<String> sources = mavenValueProvider.getValues(MavenAttributes.TEST_SOURCE_FOLDER); Assert.assertNotNull(sources); Assert.assertFalse(sources.isEmpty()); Assert.assertEquals(sources.size(), 1); Assert.assertEquals(sources, singletonList(MavenAttributes.DEFAULT_TEST_SOURCE_FOLDER)); } }