blob: 0fc588e7127b3631464e929cd943b1f403c66b45 [file] [log] [blame]
/*
* 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"));
}
}