| /* |
| * 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("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>"); |
| |
| myEmbedder.customizeForResolve(new SoutMavenConsole(), EMPTY_MAVEN_PROCESS); |
| MavenServerExecutionResult result = |
| myEmbedder.execute(myProjectPom, Collections.<String>emptyList(), Collections.<String>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("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>" + |
| |
| "<dependencies>" + |
| " <dependency>" + |
| " <groupId>junit</groupId>" + |
| " <artifactId>junit</artifactId>" + |
| " <version>4.0</version>" + |
| " </dependency>" + |
| "</dependencies>"); |
| |
| myEmbedder.customizeForResolve(new SoutMavenConsole(), EMPTY_MAVEN_PROCESS); |
| MavenServerExecutionResult result = |
| myEmbedder.resolveProject(myProjectPom, Collections.<String>emptyList(), Collections.<String>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("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>"); |
| |
| myEmbedder.customizeForResolve(new SoutMavenConsole(), EMPTY_MAVEN_PROCESS); |
| MavenServerExecutionResult result = |
| myEmbedder.resolveProject(myProjectPom, Collections.<String>emptyList(), Collections.<String>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("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>" + |
| |
| "<dependencies>" + |
| " <dependency>" + |
| " <groupId>com.adobe.flex.framework</groupId>" + |
| " <artifactId>framework</artifactId>" + |
| " <version>3.2.0.3958</version>" + |
| " <type>resource-bundle</type>" + |
| " <classifier>en_US</classifier>" + |
| " </dependency>" + |
| "</dependencies>" + |
| |
| "<build>" + |
| " <plugins>" + |
| " <plugin>" + |
| " <groupId>org.sonatype.flexmojos</groupId>" + |
| " <artifactId>flexmojos-maven-plugin</artifactId>" + |
| " <version>3.5.0</version>" + |
| " <extensions>true</extensions>" + |
| " </plugin>" + |
| " </plugins>" + |
| "</build>"); |
| |
| myEmbedder.customizeForResolve(new SoutMavenConsole(), EMPTY_MAVEN_PROCESS); |
| MavenServerExecutionResult result = |
| myEmbedder.resolveProject(myProjectPom, Collections.<String>emptyList(), Collections.<String>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("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>" + |
| |
| "<dependencies>" + |
| " <dependency>" + |
| " <groupId>junit</groupId>" + |
| " <artifactId>junit</artifactId>" + |
| " <version>3.8.1</version>" + |
| " <scope>test</scope>" + |
| " <type>foo</type>" + |
| " </dependency>" + |
| "</dependencies>"); |
| |
| myEmbedder.customizeForResolve(new SoutMavenConsole(), EMPTY_MAVEN_PROCESS); |
| MavenServerExecutionResult result = |
| myEmbedder.resolveProject(myProjectPom, Collections.<String>emptyList(), Collections.<String>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("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>" + |
| |
| "<dependencies>" + |
| " <dependency>" + |
| " <groupId>fff</groupId>" + |
| " <artifactId>zzz</artifactId>" + |
| " <version>666</version>" + |
| " </dependency>" + |
| "</dependencies>"); |
| |
| myEmbedder.customizeForResolve(new SoutMavenConsole(), EMPTY_MAVEN_PROCESS); |
| MavenServerExecutionResult result = |
| myEmbedder.resolveProject(myProjectPom, Collections.<String>emptyList(), Collections.<String>emptyList()); |
| |
| assertNotNull(result.projectData); |
| assertOrderedElementsAreEqual(result.unresolvedArtifacts, new MavenId("fff", "zzz", "666")); |
| } |
| |
| public void _testUnresolvedSystemArtifacts() throws Exception { |
| createProjectPom("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>" + |
| |
| "<dependencies>" + |
| " <dependency>" + |
| " <groupId>fff</groupId>" + |
| " <artifactId>zzz</artifactId>" + |
| " <version>666</version>" + |
| " <scope>system</scope>" + |
| " <systemPath>" + myProjectRoot.getPath() + "/foo.jar</systemPath>" + |
| " </dependency>" + |
| "</dependencies>"); |
| |
| myEmbedder.customizeForResolve(new SoutMavenConsole(), EMPTY_MAVEN_PROCESS); |
| MavenServerExecutionResult result = |
| myEmbedder.resolveProject(myProjectPom, Collections.<String>emptyList(), Collections.<String>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", |
| "<groupId>test</groupId>" + |
| "<artifactId>foo-parent</artifactId>" + |
| "<version>1</version>" + |
| "<packaging>pom</packaging>"); |
| myEmbedder.customizeForResolve(new SoutMavenConsole(), EMPTY_MAVEN_PROCESS); |
| myEmbedder.execute(m, Collections.<String>emptyList(), Collections.<String>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", |
| "<artifactId>foo</artifactId>" + |
| "<version>1</version>" + |
| |
| "<parent>" + |
| " <groupId>test</groupId>" + |
| " <artifactId>foo-parent</artifactId>" + |
| " <version>1</version>" + |
| "</parent>"); |
| myEmbedder.customizeForResolve(new SoutMavenConsole(), EMPTY_MAVEN_PROCESS); |
| myEmbedder.execute(m, Collections.<String>emptyList(), Collections.<String>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("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>" + |
| |
| "<dependencies>" + |
| " <dependency>" + |
| " <groupId>test</groupId>" + |
| " <artifactId>foo</artifactId>" + |
| " <version>1</version>" + |
| " </dependency>" + |
| "</dependencies>"); |
| |
| myEmbedder.customizeForResolve(new SoutMavenConsole(), EMPTY_MAVEN_PROCESS); |
| MavenServerExecutionResult result = |
| myEmbedder.resolveProject(myProjectPom, Collections.<String>emptyList(), Collections.<String>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("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>" + |
| |
| "<dependencies>" + |
| " <dependency>" + |
| " <groupId>fff</groupId>" + |
| " <artifactId>zzz</artifactId>" + |
| " <version>666</version>" + |
| " <scope>system</scope>" + |
| " </dependency>" + |
| "</dependencies>"); |
| |
| myEmbedder.customizeForResolve(new SoutMavenConsole(), EMPTY_MAVEN_PROCESS); |
| MavenServerExecutionResult result = |
| myEmbedder.resolveProject(myProjectPom, Collections.<String>emptyList(), Collections.<String>emptyList()); |
| |
| assertNotNull(result); |
| assertOrderedElementsAreEqual(result.unresolvedArtifacts, new MavenId("fff", "zzz", "666")); |
| } |
| } |