/* * Copyright 2000-2012 JetBrains s.r.o. * * 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.jetbrains.idea.maven.embedder; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.testFramework.PlatformTestUtil; import org.apache.maven.artifact.handler.ArtifactHandler; import org.codehaus.plexus.component.repository.ComponentDescriptor; import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.maven.MavenImportingTestCase; import org.jetbrains.idea.maven.execution.SoutMavenConsole; import org.jetbrains.idea.maven.model.MavenId; import org.jetbrains.idea.maven.model.MavenModel; import org.jetbrains.idea.maven.server.MavenEmbedderWrapper; import org.jetbrains.idea.maven.server.MavenServerEmbedder; import org.jetbrains.idea.maven.server.MavenServerExecutionResult; import org.jetbrains.idea.maven.server.MavenServerManager; import org.jetbrains.idea.maven.server.embedder.Maven2ServerEmbedderImpl; import java.io.File; import java.rmi.RemoteException; import java.util.Arrays; import java.util.Collections; public class MavenServerEmbedderTest extends MavenImportingTestCase { private MavenEmbedderWrapper myEmbedder; private Maven2ServerEmbedderImpl myEmbedderImpl; @Override protected void setUp() throws Exception { super.setUp(); initEmbedder(); } @Override protected void tearDown() throws Exception { releaseEmbedder(); super.tearDown(); } private void initEmbedder() throws RemoteException { if (myEmbedder != null) releaseEmbedder(); myEmbedderImpl = Maven2ServerEmbedderImpl.create(MavenServerManager.convertSettings(getMavenGeneralSettings())); myEmbedder = new MavenEmbedderWrapper(null) { @NotNull @Override protected MavenServerEmbedder create() throws RemoteException { return myEmbedderImpl; } }; } private void releaseEmbedder() { myEmbedder.release(); myEmbedder = null; } public void _testSettingLocalRepository() throws Exception { assertEquals(getRepositoryFile(), myEmbedderImpl.getLocalRepositoryFile()); File repo = new File(myDir, "/repo"); setRepositoryPath(repo.getPath()); initEmbedder(); assertEquals(getRepositoryFile(), myEmbedderImpl.getLocalRepositoryFile()); } public void _testReleasingTwice() throws Exception { myEmbedder.release(); myEmbedder.release(); } public void _testExecutionGoals() throws Exception { createProjectSubFile("src/main/java/A.java", "public class A {}"); createProjectPom("test" + "project" + "1"); myEmbedder.customizeForResolve(new SoutMavenConsole(), EMPTY_MAVEN_PROCESS); MavenServerExecutionResult result = myEmbedder.execute(myProjectPom, Collections.emptyList(), Arrays.asList("compile")); assertNotNull(result.projectData); assertNotNull(new File(getProjectPath(), "target").exists()); assertOrderedElementsAreEqual(result.unresolvedArtifacts); MavenModel project = result.projectData.mavenModel; assertNotNull(project); assertEquals("project", project.getMavenId().getArtifactId()); } public void _testResolvingProject() throws Exception { createProjectPom("test" + "project" + "1" + "" + " " + " junit" + " junit" + " 4.0" + " " + ""); myEmbedder.customizeForResolve(new SoutMavenConsole(), EMPTY_MAVEN_PROCESS); MavenServerExecutionResult result = myEmbedder.resolveProject(myProjectPom, Collections.emptyList()); assertNotNull(result.projectData); assertOrderedElementsAreEqual(result.unresolvedArtifacts); MavenModel project = result.projectData.mavenModel; assertNotNull(project); assertEquals("project", project.getMavenId().getArtifactId()); assertEquals(1, project.getDependencies().size()); } public void _testResolvingProjectPropertiesInFolders() throws Exception { createProjectPom("test" + "project" + "1"); myEmbedder.customizeForResolve(new SoutMavenConsole(), EMPTY_MAVEN_PROCESS); MavenServerExecutionResult result = myEmbedder.resolveProject(myProjectPom, Collections.emptyList()); MavenModel project = result.projectData.mavenModel; assertNotNull(project); assertEquals("project", project.getMavenId().getArtifactId()); PlatformTestUtil.assertPathsEqual(myProjectRoot.getPath() + "/target", project.getBuild().getDirectory()); PlatformTestUtil.assertPathsEqual(myProjectRoot.getPath() + "/src/main/java", project.getBuild().getSources().get(0)); } public void _testResolvingProjectWithExtensions() throws Exception { createProjectPom("test" + "project" + "1" + "" + " " + " com.adobe.flex.framework" + " framework" + " 3.2.0.3958" + " resource-bundle" + " en_US" + " " + "" + "" + " " + " " + " org.sonatype.flexmojos" + " flexmojos-maven-plugin" + " 3.5.0" + " true" + " " + " " + ""); myEmbedder.customizeForResolve(new SoutMavenConsole(), EMPTY_MAVEN_PROCESS); MavenServerExecutionResult result = myEmbedder.resolveProject(myProjectPom, Collections.emptyList()); assertNotNull(result.projectData); assertOrderedElementsAreEqual(result.unresolvedArtifacts); MavenModel p = result.projectData.mavenModel; assertEquals(1, p.getDependencies().size()); assertEquals("rb.swc", p.getDependencies().get(0).getExtension()); } public void _testResolvingProjectWithRegisteredExtensions() throws Exception { ComponentDescriptor desc = new ComponentDescriptor(); desc.setRole(ArtifactHandler.ROLE); desc.setRoleHint("foo"); desc.setImplementation(MyArtifactHandler.class.getName()); myEmbedderImpl.getContainer().addComponentDescriptor(desc); createProjectPom("test" + "project" + "1" + "" + " " + " junit" + " junit" + " 3.8.1" + " test" + " foo" + " " + ""); myEmbedder.customizeForResolve(new SoutMavenConsole(), EMPTY_MAVEN_PROCESS); MavenServerExecutionResult result = myEmbedder.resolveProject(myProjectPom, Collections.emptyList()); assertNotNull(result.projectData); assertOrderedElementsAreEqual(result.unresolvedArtifacts); MavenModel p = result.projectData.mavenModel; assertEquals(1, p.getDependencies().size()); assertEquals("pom", p.getDependencies().get(0).getExtension()); } public static class MyArtifactHandler implements ArtifactHandler { @Override public String getExtension() { return "pom"; } @Override public String getDirectory() { throw new UnsupportedOperationException(); } @Override public String getClassifier() { return null; } @Override public String getPackaging() { return "foo"; } @Override public boolean isIncludesDependencies() { return false; } @Override public String getLanguage() { return "java"; } @Override public boolean isAddedToClasspath() { return true; } } public void _testUnresolvedArtifacts() throws Exception { createProjectPom("test" + "project" + "1" + "" + " " + " fff" + " zzz" + " 666" + " " + ""); myEmbedder.customizeForResolve(new SoutMavenConsole(), EMPTY_MAVEN_PROCESS); MavenServerExecutionResult result = myEmbedder.resolveProject(myProjectPom, Collections.emptyList()); assertNotNull(result.projectData); assertOrderedElementsAreEqual(result.unresolvedArtifacts, new MavenId("fff", "zzz", "666")); } public void _testUnresolvedSystemArtifacts() throws Exception { createProjectPom("test" + "project" + "1" + "" + " " + " fff" + " zzz" + " 666" + " system" + " " + myProjectRoot.getPath() + "/foo.jar" + " " + ""); myEmbedder.customizeForResolve(new SoutMavenConsole(), EMPTY_MAVEN_PROCESS); MavenServerExecutionResult result = myEmbedder.resolveProject(myProjectPom, Collections.emptyList()); assertNotNull(result.projectData); assertOrderedElementsAreEqual(result.unresolvedArtifacts, new MavenId("fff", "zzz", "666")); } public void _testDependencyWithUnresolvedParent() throws Exception { File repo = new File(myDir, "/repo"); setRepositoryPath(repo.getPath()); initEmbedder(); VirtualFile m = createModulePom("foo-parent", "test" + "foo-parent" + "1" + "pom"); myEmbedder.customizeForResolve(new SoutMavenConsole(), EMPTY_MAVEN_PROCESS); myEmbedder.execute(m, Collections.emptyList(), Arrays.asList("install")); myEmbedder.reset(); File fooParentFile = new File(repo, "test/foo-parent/1/foo-parent-1.pom"); assertTrue(fooParentFile.exists()); m = createModulePom("foo", "foo" + "1" + "" + " test" + " foo-parent" + " 1" + ""); myEmbedder.customizeForResolve(new SoutMavenConsole(), EMPTY_MAVEN_PROCESS); myEmbedder.execute(m, Collections.emptyList(), Arrays.asList("install")); myEmbedder.reset(); assertTrue(new File(repo, "test/foo/1/foo-1.pom").exists()); FileUtil.delete(fooParentFile); initEmbedder(); // reset all caches createProjectPom("test" + "project" + "1" + "" + " " + " test" + " foo" + " 1" + " " + ""); myEmbedder.customizeForResolve(new SoutMavenConsole(), EMPTY_MAVEN_PROCESS); MavenServerExecutionResult result = myEmbedder.resolveProject(myProjectPom, Collections.emptyList()); assertNotNull(result.projectData); assertOrderedElementsAreEqual(result.unresolvedArtifacts, new MavenId("test", "foo-parent", "1")); } public void _testUnresolvedSystemArtifactsWithoutPath() throws Exception { if (ignore()) return; // need to repair model before resolving createProjectPom("test" + "project" + "1" + "" + " " + " fff" + " zzz" + " 666" + " system" + " " + ""); myEmbedder.customizeForResolve(new SoutMavenConsole(), EMPTY_MAVEN_PROCESS); MavenServerExecutionResult result = myEmbedder.resolveProject(myProjectPom, Collections.emptyList()); assertNotNull(result); assertOrderedElementsAreEqual(result.unresolvedArtifacts, new MavenId("fff", "zzz", "666")); } }