blob: c3a322c49c0a0b785ebda9a7bc848e278d53b123 [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.project;
import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.testFramework.PlatformTestUtil;
import com.intellij.util.Function;
import org.jetbrains.idea.maven.model.MavenExplicitProfiles;
import org.jetbrains.idea.maven.server.NativeMavenProjectHolder;
import org.jetbrains.idea.maven.utils.MavenUtil;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class MavenProjectsTreeReadingTest extends MavenProjectsTreeTestCase {
public void testTwoRootProjects() throws Exception {
VirtualFile m1 = createModulePom("m1",
"<groupId>test</groupId>" +
"<artifactId>m1</artifactId>" +
"<version>1</version>");
VirtualFile m2 = createModulePom("m2",
"<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>");
updateAll(m1, m2);
List<MavenProject> roots = myTree.getRootProjects();
assertEquals(2, roots.size());
assertEquals(m1, roots.get(0).getFile());
assertEquals(m2, roots.get(1).getFile());
}
public void testModulesWithWhiteSpaces() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>" +
"" +
" m" +
"" +
" </module>" +
"</modules>");
VirtualFile m = createModulePom("m",
"<groupId>test</groupId>" +
"<artifactId>m</artifactId>" +
"<version>1</version>");
updateAll(myProjectPom);
List<MavenProject> roots = myTree.getRootProjects();
assertEquals(1, roots.size());
assertEquals(myProjectPom, roots.get(0).getFile());
assertEquals(1, myTree.getModules(roots.get(0)).size());
assertEquals(m, myTree.getModules(roots.get(0)).get(0).getFile());
}
public void testDoNotImportChildAsRootProject() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m</module>" +
"</modules>");
VirtualFile m = createModulePom("m",
"<groupId>test</groupId>" +
"<artifactId>m</artifactId>" +
"<version>1</version>");
updateAll(myProjectPom, m);
List<MavenProject> roots = myTree.getRootProjects();
assertEquals(1, roots.size());
assertEquals(myProjectPom, roots.get(0).getFile());
assertEquals(1, myTree.getModules(roots.get(0)).size());
assertEquals(m, myTree.getModules(roots.get(0)).get(0).getFile());
}
public void testDoNotImportSameRootProjectTwice() throws Exception {
MyLoggingListener listener = new MyLoggingListener();
myTree.addListener(listener);
VirtualFile m1 = createModulePom("m1",
"<groupId>test</groupId>" +
"<artifactId>m1</artifactId>" +
"<version>1</version>");
VirtualFile m2 = createModulePom("m2",
"<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>");
updateAll(m1, m2, m1);
List<MavenProject> roots = myTree.getRootProjects();
assertEquals(2, roots.size());
assertEquals(m1, roots.get(0).getFile());
assertEquals(m2, roots.get(1).getFile());
assertEquals("updated: m1 m2 deleted: <none> ", listener.log);
}
public void testRereadingChildIfParentWasReadAfterIt() throws Exception {
MyLoggingListener listener = new MyLoggingListener();
myTree.addListener(listener);
VirtualFile m1 = createModulePom("m1",
"<groupId>test</groupId>" +
"<artifactId>m1</artifactId>" +
"<version>1</version>" +
"<properties>" +
" <childId>m2</childId>" +
"</properties>");
VirtualFile m2 = createModulePom("m2",
"<groupId>test</groupId>" +
"<artifactId>${childId}</artifactId>" +
"<version>1</version>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>m1</artifactId>" +
" <version>1</version>" +
"</parent>");
updateAll(m2, m1);
List<MavenProject> roots = myTree.getRootProjects();
assertEquals(2, roots.size());
assertEquals(m2, roots.get(0).getFile());
assertEquals(m1, roots.get(1).getFile());
assertEquals("m2", roots.get(0).getMavenId().getArtifactId());
assertEquals("m1", roots.get(1).getMavenId().getArtifactId());
assertEquals("updated: m2 m1 deleted: <none> ", listener.log);
}
public void testSameProjectAsModuleOfSeveralProjects() throws Exception {
VirtualFile p1 = createModulePom("project1",
"<groupId>test</groupId>" +
"<artifactId>project1</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>../module</module>" +
"</modules>");
VirtualFile p2 = createModulePom("project2",
"<groupId>test</groupId>" +
"<artifactId>project2</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>../module</module>" +
"</modules>");
VirtualFile m = createModulePom("module",
"<groupId>test</groupId>" +
"<artifactId>module</artifactId>" +
"<version>1</version>");
updateAll(p1, p2);
List<MavenProject> roots = myTree.getRootProjects();
assertEquals(2, roots.size());
assertEquals(p1, roots.get(0).getFile());
assertEquals(p2, roots.get(1).getFile());
assertEquals(1, myTree.getModules(roots.get(0)).size());
assertEquals(m, myTree.getModules(roots.get(0)).get(0).getFile());
assertEquals(0, myTree.getModules(roots.get(1)).size());
}
public void testSameProjectAsModuleOfSeveralProjectsInHierarchy() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>module1</module>" +
" <module>module1/module2</module>" +
"</modules>");
VirtualFile m1 = createModulePom("module1",
"<groupId>test</groupId>" +
"<artifactId>module1</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>module2</module>" +
"</modules>");
VirtualFile m2 = createModulePom("module1/module2",
"<groupId>test</groupId>" +
"<artifactId>module2</artifactId>" +
"<version>1</version>");
updateAll(myProjectPom);
List<MavenProject> roots = myTree.getRootProjects();
assertEquals(1, roots.size());
assertEquals(1, myTree.getModules(roots.get(0)).size());
assertEquals(m1, myTree.getModules(roots.get(0)).get(0).getFile());
assertEquals(1, myTree.getModules(myTree.getModules(roots.get(0)).get(0)).size());
assertEquals(m2, myTree.getModules(myTree.getModules(roots.get(0)).get(0)).get(0).getFile());
}
public void testRemovingChildProjectFromRootProjects() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m</module>" +
"</modules>");
VirtualFile m = createModulePom("m",
"<groupId>test</groupId>" +
"<artifactId>m</artifactId>" +
"<version>1</version>");
// all projects are processed in the specified order
// if we have imported a child project as a root one,
// we have to correct ourselves and to remove it from roots.
updateAll(m, myProjectPom);
List<MavenProject> roots = myTree.getRootProjects();
assertEquals(1, roots.size());
assertEquals(myProjectPom, roots.get(0).getFile());
assertEquals(1, myTree.getModules(roots.get(0)).size());
assertEquals(m, myTree.getModules(roots.get(0)).get(0).getFile());
}
public void testSendingNotificationsWhenAggregationChanged() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m1</module>" +
" <module>m2</module>" +
"</modules>");
VirtualFile m1 = createModulePom("m1",
"<groupId>test</groupId>" +
"<artifactId>m1</artifactId>" +
"<version>1</version>");
VirtualFile m2 = createModulePom("m2",
"<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>");
updateAll(myProjectPom, m1, m2);
List<MavenProject> roots = myTree.getRootProjects();
assertEquals(1, roots.size());
assertEquals(2, myTree.getModules(roots.get(0)).size());
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m1</module>" +
"</modules>");
MyLoggingListener listener = new MyLoggingListener();
myTree.addListener(listener);
update(myProjectPom);
roots = myTree.getRootProjects();
assertEquals(2, roots.size());
assertEquals(1, myTree.getModules(roots.get(0)).size());
assertEquals("updated: project m2 deleted: <none> ", listener.log);
}
public void testUpdatingWholeModel() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m</module>" +
"</modules>");
VirtualFile m = createModulePom("m",
"<groupId>test</groupId>" +
"<artifactId>m</artifactId>" +
"<version>1</version>");
updateAll(myProjectPom);
List<MavenProject> roots = myTree.getRootProjects();
MavenProject parentNode = roots.get(0);
MavenProject childNode = myTree.getModules(roots.get(0)).get(0);
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project1</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m</module>" +
"</modules>");
createModulePom("m", "<groupId>test</groupId>" +
"<artifactId>m1</artifactId>" +
"<version>1</version>");
updateAll(myProjectPom);
roots = myTree.getRootProjects();
assertEquals(1, roots.size());
assertEquals(1, myTree.getModules(roots.get(0)).size());
MavenProject parentNode1 = roots.get(0);
MavenProject childNode1 = myTree.getModules(roots.get(0)).get(0);
assertSame(parentNode, parentNode1);
assertSame(childNode, childNode1);
assertEquals("project1", parentNode1.getMavenId().getArtifactId());
assertEquals("m1", childNode1.getMavenId().getArtifactId());
}
public void testForceUpdatingWholeModel() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m</module>" +
"</modules>");
VirtualFile m = createModulePom("m",
"<groupId>test</groupId>" +
"<artifactId>m</artifactId>" +
"<version>1</version>");
MyLoggingListener l = new MyLoggingListener();
myTree.addListener(l);
updateAll(myProjectPom);
assertEquals("updated: project m deleted: <none> ", l.log);
l.log = "";
myTree.updateAll(false, getMavenGeneralSettings(), EMPTY_MAVEN_PROCESS);
assertEquals("", l.log);
l.log = "";
myTree.updateAll(true, getMavenGeneralSettings(), EMPTY_MAVEN_PROCESS);
assertEquals("updated: project m deleted: <none> ", l.log);
}
public void testForceUpdatingSingleProject() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m</module>" +
"</modules>");
VirtualFile m = createModulePom("m",
"<groupId>test</groupId>" +
"<artifactId>m</artifactId>" +
"<version>1</version>");
MyLoggingListener l = new MyLoggingListener();
myTree.addListener(l);
update(myProjectPom);
assertEquals("updated: project m deleted: <none> ", l.log);
l.log = "";
myTree.update(Collections.singletonList(myProjectPom), false, getMavenGeneralSettings(), EMPTY_MAVEN_PROCESS);
assertEquals("", l.log);
l.log = "";
myTree.update(Collections.singletonList(myProjectPom), true, getMavenGeneralSettings(), EMPTY_MAVEN_PROCESS);
assertEquals("updated: project deleted: <none> ", l.log);
l.log = "";
}
public void testUpdatingModelWithNewProfiles() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<profiles>" +
" <profile>" +
" <id>one</id>" +
" <modules>" +
" <module>m1</module>" +
" </modules>" +
" </profile>" +
" <profile>" +
" <id>two</id>" +
" <modules>" +
" <module>m2</module>" +
" </modules>" +
" </profile>" +
"</profiles>");
VirtualFile m1 = createModulePom("m1",
"<groupId>test</groupId>" +
"<artifactId>m1</artifactId>" +
"<version>1</version>");
VirtualFile m2 = createModulePom("m2",
"<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>");
updateAll(Collections.singletonList("one"), myProjectPom);
List<MavenProject> roots = myTree.getRootProjects();
assertEquals(1, roots.size());
assertEquals(myProjectPom, roots.get(0).getFile());
assertEquals(1, myTree.getModules(roots.get(0)).size());
assertEquals(m1, myTree.getModules(roots.get(0)).get(0).getFile());
updateAll(Collections.singletonList("two"), myProjectPom);
roots = myTree.getRootProjects();
assertEquals(1, roots.size());
assertEquals(myProjectPom, roots.get(0).getFile());
assertEquals(1, myTree.getModules(roots.get(0)).size());
assertEquals(m2, myTree.getModules(roots.get(0)).get(0).getFile());
}
public void testUpdatingParticularProject() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m</module>" +
"</modules>");
VirtualFile m = createModulePom("m",
"<groupId>test</groupId>" +
"<artifactId>m</artifactId>" +
"<version>1</version>");
updateAll(myProjectPom);
createModulePom("m", "<groupId>test</groupId>" +
"<artifactId>m1</artifactId>" +
"<version>1</version>");
update(m);
MavenProject n = myTree.findProject(m);
assertEquals("m1", n.getMavenId().getArtifactId());
}
public void testUpdatingInheritance() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>parent</artifactId>" +
"<version>1</version>" +
"<properties>" +
" <childName>child</childName>" +
"</properties>");
VirtualFile child = createModulePom("child",
"<groupId>test</groupId>" +
"<artifactId>${childName}</artifactId>" +
"<version>1</version>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>parent</artifactId>" +
" <version>1</version>" +
"</parent>");
updateAll(myProjectPom, child);
assertEquals("child", myTree.findProject(child).getMavenId().getArtifactId());
createProjectPom("<groupId>test</groupId>" +
"<artifactId>parent</artifactId>" +
"<version>1</version>" +
"<properties>" +
" <childName>child2</childName>" +
"</properties>");
update(myProjectPom);
assertEquals("child2", myTree.findProject(child).getMavenId().getArtifactId());
}
public void testUpdatingInheritanceHierarhically() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>parent</artifactId>" +
"<version>1</version>" +
"<properties>" +
" <subChildName>subChild</subChildName>" +
"</properties>");
VirtualFile child = createModulePom("child",
"<groupId>test</groupId>" +
"<artifactId>child</artifactId>" +
"<version>1</version>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>parent</artifactId>" +
" <version>1</version>" +
"</parent>");
VirtualFile subChild = createModulePom("subChild",
"<groupId>test</groupId>" +
"<artifactId>${subChildName}</artifactId>" +
"<version>1</version>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>child</artifactId>" +
" <version>1</version>" +
"</parent>");
updateAll(myProjectPom, child, subChild);
assertEquals("subChild", myTree.findProject(subChild).getMavenId().getArtifactId());
createProjectPom("<groupId>test</groupId>" +
"<artifactId>parent</artifactId>" +
"<version>1</version>" +
"<properties>" +
" <subChildName>subChild2</subChildName>" +
"</properties>");
update(myProjectPom);
assertEquals("subChild2", myTree.findProject(subChild).getMavenId().getArtifactId());
}
public void testSendingNotificationAfterProjectIsAddedInToHierarchy() throws Exception {
MyLoggingListener listener = new MyLoggingListener();
myTree.addListener(listener);
createProjectPom("<groupId>test</groupId>" +
"<artifactId>m1</artifactId>" +
"<version>1</version>");
updateAll(myProjectPom);
assertEquals("updated: m1 deleted: <none> ", listener.log);
}
public void testSendingNotificationsWhenResolveFailed() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<name");
updateAll(myProjectPom);
MyLoggingListener listener = new MyLoggingListener();
myTree.addListener(listener);
MavenProject project = myTree.findProject(myProjectPom);
MavenEmbeddersManager embeddersManager = new MavenEmbeddersManager(myProject);
final List<NativeMavenProjectHolder> nativeProject = new ArrayList<NativeMavenProjectHolder>();
try {
myTree.addListener(new MavenProjectsTree.ListenerAdapter() {
@Override
public void projectResolved(Pair<MavenProject, MavenProjectChanges> projectWithChanges,
NativeMavenProjectHolder nativeMavenProject) {
nativeProject.add(nativeMavenProject);
}
});
myTree.resolve(myProject, project,
getMavenGeneralSettings(),
embeddersManager,
NULL_MAVEN_CONSOLE,
EMPTY_MAVEN_PROCESS
);
}
finally {
embeddersManager.releaseInTests();
}
assertEquals("resolved: project ", listener.log);
assertTrue(project.hasReadingProblems());
assertSize(1, nativeProject);
assertNull(nativeProject.get(0));
}
public void testDoNotUpdateChildAfterParentWasResolved() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>parent</artifactId>" +
"<version>1</version>");
VirtualFile child = createModulePom("child",
"<groupId>test</groupId>" +
"<artifactId>child</artifactId>" +
"<version>1</version>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>parent</artifactId>" +
" <version>1</version>" +
"</parent>");
MyLoggingListener listener = new MyLoggingListener();
myTree.addListener(listener);
updateAll(myProjectPom, child);
MavenProject parentProject = myTree.findProject(myProjectPom);
MavenEmbeddersManager embeddersManager = new MavenEmbeddersManager(myProject);
try {
final NativeMavenProjectHolder[] nativeProject = new NativeMavenProjectHolder[1];
myTree.addListener(new MavenProjectsTree.ListenerAdapter() {
@Override
public void projectResolved(Pair<MavenProject, MavenProjectChanges> projectWithChanges,
NativeMavenProjectHolder nativeMavenProject) {
nativeProject[0] = nativeMavenProject;
}
});
myTree.resolve(myProject, parentProject,
getMavenGeneralSettings(),
embeddersManager,
NULL_MAVEN_CONSOLE,
EMPTY_MAVEN_PROCESS
);
myTree.resolvePlugins(parentProject, nativeProject[0], embeddersManager, NULL_MAVEN_CONSOLE, EMPTY_MAVEN_PROCESS);
myTree.resolveFolders(parentProject, getMavenImporterSettings(), embeddersManager, NULL_MAVEN_CONSOLE, EMPTY_MAVEN_PROCESS);
}
finally {
embeddersManager.releaseInTests();
}
assertEquals("updated: parent child deleted: <none> resolved: parent plugins: parent folders: parent ", listener.log);
myTree.updateAll(false, getMavenGeneralSettings(), EMPTY_MAVEN_PROCESS);
assertEquals("updated: parent child deleted: <none> resolved: parent plugins: parent folders: parent ", listener.log);
}
public void testAddingInheritanceParent() throws Exception {
VirtualFile child = createModulePom("child",
"<groupId>test</groupId>" +
"<artifactId>${childName}</artifactId>" +
"<version>1</version>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>parent</artifactId>" +
" <version>1</version>" +
"</parent>");
updateAll(child);
assertEquals("${childName}", myTree.findProject(child).getMavenId().getArtifactId());
VirtualFile parent = createModulePom("parent",
"<groupId>test</groupId>" +
"<artifactId>parent</artifactId>" +
"<version>1</version>" +
"<properties>" +
" <childName>child</childName>" +
"</properties>");
update(parent);
assertEquals("child", myTree.findProject(child).getMavenId().getArtifactId());
}
public void testAddingInheritanceChild() throws Exception {
VirtualFile parent = createModulePom("parent",
"<groupId>test</groupId>" +
"<artifactId>parent</artifactId>" +
"<version>1</version>" +
"<properties>" +
" <childName>child</childName>" +
"</properties>");
updateAll(parent);
VirtualFile child = createModulePom("child",
"<groupId>test</groupId>" +
"<artifactId>${childName}</artifactId>" +
"<version>1</version>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>parent</artifactId>" +
" <version>1</version>" +
"</parent>");
update(child);
assertEquals("child", myTree.findProject(child).getMavenId().getArtifactId());
}
public void testAddingInheritanceChildOnParentUpdate() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>parent</artifactId>" +
"<version>1</version>" +
"<properties>" +
" <childName>child</childName>" +
"</properties>" +
"<modules>" +
" <module>child</module>" +
"</modules>");
updateAll(myProjectPom);
VirtualFile child = createModulePom("child",
"<groupId>test</groupId>" +
"<artifactId>${childName}</artifactId>" +
"<version>1</version>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>parent</artifactId>" +
" <version>1</version>" +
"</parent>");
update(myProjectPom);
assertEquals("child", myTree.findProject(child).getMavenId().getArtifactId());
}
public void testDoNotReAddInheritanceChildOnParentModulesRemoval() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>parent</artifactId>" +
"<version>1</version>" +
"<modules>" +
" <module>child</module>" +
"</modules>");
VirtualFile child = createModulePom("child",
"<groupId>test</groupId>" +
"<artifactId>child</artifactId>" +
"<version>1</version>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>parent</artifactId>" +
" <version>1</version>" +
"</parent>");
updateAll(myProjectPom);
List<MavenProject> roots = myTree.getRootProjects();
assertEquals(1, roots.size());
assertEquals(myProjectPom, roots.get(0).getFile());
assertEquals(1, myTree.getModules(roots.get(0)).size());
assertEquals(child, myTree.getModules(roots.get(0)).get(0).getFile());
createProjectPom("<groupId>test</groupId>" +
"<artifactId>parent</artifactId>" +
"<version>1</version>");
update(myProjectPom);
roots = myTree.getRootProjects();
assertEquals(1, roots.size());
assertEquals(myProjectPom, roots.get(0).getFile());
assertEquals(0, myTree.getModules(roots.get(0)).size());
}
public void testChangingInheritance() throws Exception {
VirtualFile parent1 = createModulePom("parent1",
"<groupId>test</groupId>" +
"<artifactId>parent1</artifactId>" +
"<version>1</version>" +
"<properties>" +
" <childName>child1</childName>" +
"</properties>");
VirtualFile parent2 = createModulePom("parent2",
"<groupId>test</groupId>" +
"<artifactId>parent2</artifactId>" +
"<version>1</version>" +
"<properties>" +
" <childName>child2</childName>" +
"</properties>");
VirtualFile child = createModulePom("child",
"<groupId>test</groupId>" +
"<artifactId>${childName}</artifactId>" +
"<version>1</version>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>parent1</artifactId>" +
" <version>1</version>" +
"</parent>");
updateAll(parent1, parent2, child);
assertEquals("child1", myTree.findProject(child).getMavenId().getArtifactId());
createModulePom("child", "<groupId>test</groupId>" +
"<artifactId>${childName}</artifactId>" +
"<version>1</version>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>parent2</artifactId>" +
" <version>1</version>" +
"</parent>");
update(child);
assertEquals("child2", myTree.findProject(child).getMavenId().getArtifactId());
}
public void testChangingInheritanceParentId() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>parent</artifactId>" +
"<version>1</version>" +
"<properties>" +
" <childName>child</childName>" +
"</properties>");
VirtualFile child = createModulePom("child",
"<groupId>test</groupId>" +
"<artifactId>${childName}</artifactId>" +
"<version>1</version>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>parent</artifactId>" +
" <version>1</version>" +
"</parent>");
updateAll(myProjectPom, child);
assertEquals("child", myTree.findProject(child).getMavenId().getArtifactId());
createProjectPom("<groupId>test</groupId>" +
"<artifactId>parent2</artifactId>" +
"<version>1</version>" +
"<properties>" +
" <childName>child</childName>" +
"</properties>");
update(myProjectPom);
assertEquals("${childName}", myTree.findProject(child).getMavenId().getArtifactId());
}
public void testHandlingSelfInheritance() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>parent</artifactId>" +
"<version>1</version>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>parent</artifactId>" +
" <version>1</version>" +
"</parent>");
updateAll(myProjectPom); // shouldn't hang
updateTimestamps(myProjectPom);
update(myProjectPom); // shouldn't hang
updateTimestamps(myProjectPom);
updateAll(myProjectPom); // shouldn't hang
}
public void testHandlingRecursiveInheritance() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>parent</artifactId>" +
"<version>1</version>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>child</artifactId>" +
" <version>1</version>" +
"</parent>" +
"<modules>" +
" <module>child</module>" +
"</properties>");
VirtualFile child = createModulePom("child",
"<groupId>test</groupId>" +
"<artifactId>child</artifactId>" +
"<version>1</version>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>parent</artifactId>" +
" <version>1</version>" +
"</parent>");
updateAll(myProjectPom, child); // shouldn't hang
updateTimestamps(myProjectPom, child);
update(myProjectPom); // shouldn't hang
updateTimestamps(myProjectPom, child);
update(child); // shouldn't hang
updateTimestamps(myProjectPom, child);
updateAll(myProjectPom, child); // shouldn't hang
}
public void testDeletingInheritanceParent() throws Exception {
VirtualFile parent = createModulePom("parent",
"<groupId>test</groupId>" +
"<artifactId>parent</artifactId>" +
"<version>1</version>" +
"<properties>" +
" <childName>child</childName>" +
"</properties>");
VirtualFile child = createModulePom("child",
"<groupId>test</groupId>" +
"<artifactId>${childName}</artifactId>" +
"<version>1</version>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>parent</artifactId>" +
" <version>1</version>" +
"</parent>");
updateAll(parent, child);
assertEquals("child", myTree.findProject(child).getMavenId().getArtifactId());
deleteProject(parent);
assertEquals("${childName}", myTree.findProject(child).getMavenId().getArtifactId());
}
public void testDeletingInheritanceChild() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>parent</artifactId>" +
"<version>1</version>" +
"<properties>" +
" <subChildName>subChild</subChildName>" +
"</properties>");
VirtualFile child = createModulePom("child",
"<groupId>test</groupId>" +
"<artifactId>child</artifactId>" +
"<version>1</version>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>parent</artifactId>" +
" <version>1</version>" +
"</parent>");
VirtualFile subChild = createModulePom("subChild",
"<groupId>test</groupId>" +
"<artifactId>${subChildName}</artifactId>" +
"<version>1</version>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>child</artifactId>" +
" <version>1</version>" +
"</parent>");
updateAll(myProjectPom, child, subChild);
assertEquals("subChild", myTree.findProject(subChild).getMavenId().getArtifactId());
deleteProject(child);
assertEquals("${subChildName}", myTree.findProject(subChild).getMavenId().getArtifactId());
}
public void testRecursiveInheritanceAndAggregation() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>parent</artifactId>" +
"<version>1</version>" +
"" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>child</artifactId>" +
" <version>1</version>" +
"</parent>" +
"<modules>" +
" <module>child</module>" +
"</modules>");
VirtualFile child = createModulePom("child",
"<groupId>test</groupId>" +
"<artifactId>child</artifactId>" +
"<version>1</version>");
updateAll(myProjectPom); // should not recurse
updateTimestamps(myProjectPom, child);
updateAll(child); // should not recurse
}
public void testUpdatingAddsModules() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>");
VirtualFile m = createModulePom("m",
"<groupId>test</groupId>" +
"<artifactId>m</artifactId>" +
"<version>1</version>");
updateAll(myProjectPom);
List<MavenProject> roots = myTree.getRootProjects();
assertEquals(1, roots.size());
assertEquals(myProjectPom, roots.get(0).getFile());
assertEquals(0, myTree.getModules(roots.get(0)).size());
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m</module>" +
"</modules>");
update(myProjectPom);
roots = myTree.getRootProjects();
assertEquals(1, roots.size());
assertEquals(myProjectPom, roots.get(0).getFile());
assertEquals(1, myTree.getModules(roots.get(0)).size());
assertEquals(m, myTree.getModules(roots.get(0)).get(0).getFile());
}
public void testUpdatingUpdatesModulesIfProjectIsChanged() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m</module>" +
"</modules>");
VirtualFile m = createModulePom("m",
"<groupId>test</groupId>" +
"<artifactId>m</artifactId>" +
"<version>1</version>");
updateAll(myProjectPom);
assertEquals("m", myTree.findProject(m).getMavenId().getArtifactId());
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<name>foo</name>" +
"<modules>" +
" <module>m</module>" +
"</modules>");
createModulePom("m", "<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>");
update(myProjectPom);
assertEquals("m2", myTree.findProject(m).getMavenId().getArtifactId());
}
public void testUpdatingDoesNotUpdateModulesIfProjectIsNotChanged() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m</module>" +
"</modules>");
VirtualFile m = createModulePom("m",
"<groupId>test</groupId>" +
"<artifactId>m</artifactId>" +
"<version>1</version>");
updateAll(myProjectPom);
assertEquals("m", myTree.findProject(m).getMavenId().getArtifactId());
createModulePom("m", "<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>");
update(myProjectPom);
// did not change
assertEquals("m", myTree.findProject(m).getMavenId().getArtifactId());
}
public void testAddingProjectAsModuleToExistingOne() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m</module>" +
"</modules>");
updateAll(myProjectPom);
List<MavenProject> roots = myTree.getRootProjects();
assertEquals(1, roots.size());
assertEquals(0, myTree.getModules(roots.get(0)).size());
VirtualFile m = createModulePom("m",
"<groupId>test</groupId>" +
"<artifactId>m</artifactId>" +
"<version>1</version>");
update(m);
roots = myTree.getRootProjects();
assertEquals(1, roots.size());
assertEquals(1, myTree.getModules(roots.get(0)).size());
assertEquals(m, myTree.getModules(roots.get(0)).get(0).getFile());
}
public void testAddingProjectAsAggregatorForExistingOne() throws Exception {
VirtualFile m = createModulePom("m",
"<groupId>test</groupId>" +
"<artifactId>m</artifactId>" +
"<version>1</version>");
updateAll(m);
List<MavenProject> roots = myTree.getRootProjects();
assertEquals(1, roots.size());
assertEquals(m, roots.get(0).getFile());
assertEquals(0, myTree.getModules(roots.get(0)).size());
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m</module>" +
"</modules>");
update(myProjectPom);
roots = myTree.getRootProjects();
assertEquals(1, roots.size());
assertEquals(myProjectPom, roots.get(0).getFile());
assertEquals(1, myTree.getModules(roots.get(0)).size());
assertEquals(m, myTree.getModules(roots.get(0)).get(0).getFile());
}
public void testAddingProjectWithModules() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>");
updateAll(myProjectPom);
List<MavenProject> roots = myTree.getRootProjects();
assertEquals(1, roots.size());
assertEquals(0, myTree.getModules(roots.get(0)).size());
VirtualFile m1 = createModulePom("m1",
"<groupId>test</groupId>" +
"<artifactId>m1</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m2</module>" +
"</modules>");
VirtualFile m2 = createModulePom("m1/m2",
"<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>");
update(m1);
roots = myTree.getRootProjects();
assertEquals(2, roots.size());
assertEquals(myProjectPom, roots.get(0).getFile());
assertEquals(m1, roots.get(1).getFile());
assertEquals(1, myTree.getModules(roots.get(1)).size());
assertEquals(m2, myTree.getModules(roots.get(1)).get(0).getFile());
}
public void testUpdatingAddsModulesFromRootProjects() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>");
VirtualFile m = createModulePom("m",
"<groupId>test</groupId>" +
"<artifactId>m</artifactId>" +
"<version>1</version>");
updateAll(myProjectPom, m);
List<MavenProject> roots = myTree.getRootProjects();
assertEquals(2, roots.size());
assertEquals(myProjectPom, roots.get(0).getFile());
assertEquals(m, roots.get(1).getFile());
assertEquals("m", roots.get(1).getMavenId().getArtifactId());
assertEquals(0, myTree.getModules(roots.get(0)).size());
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m</module>" +
"</modules>");
update(myProjectPom);
roots = myTree.getRootProjects();
assertEquals(1, roots.size());
assertEquals(myProjectPom, roots.get(0).getFile());
assertEquals(1, myTree.getModules(roots.get(0)).size());
assertEquals(m, myTree.getModules(roots.get(0)).get(0).getFile());
}
public void testMovingModuleToRootsWhenAggregationChanged() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m</module>" +
"</modules>");
VirtualFile m = createModulePom("m",
"<groupId>test</groupId>" +
"<artifactId>m</artifactId>" +
"<version>1</version>");
updateAll(myProjectPom, m);
List<MavenProject> roots = myTree.getRootProjects();
assertEquals(1, roots.size());
assertEquals(1, myTree.getModules(roots.get(0)).size());
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>");
update(myProjectPom);
roots = myTree.getRootProjects();
assertEquals(2, roots.size());
assertTrue(myTree.getModules(roots.get(0)).isEmpty());
assertTrue(myTree.getModules(roots.get(1)).isEmpty());
}
public void testDeletingProject() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m</module>" +
"</modules>");
VirtualFile m = createModulePom("m",
"<groupId>test</groupId>" +
"<artifactId>m</artifactId>" +
"<version>1</version>");
updateAll(myProjectPom);
List<MavenProject> roots = myTree.getRootProjects();
assertEquals(1, roots.size());
assertEquals(1, myTree.getModules(roots.get(0)).size());
deleteProject(m);
roots = myTree.getRootProjects();
assertEquals(1, roots.size());
assertEquals(0, myTree.getModules(roots.get(0)).size());
}
public void testDeletingProjectWithModules() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m1</module>" +
"</modules>");
VirtualFile m1 = createModulePom("m1",
"<groupId>test</groupId>" +
"<artifactId>m1</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m2</module>" +
"</modules>");
createModulePom("m1/m2",
"<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>");
updateAll(myProjectPom);
List<MavenProject> roots = myTree.getRootProjects();
assertEquals(1, roots.size());
assertEquals(1, myTree.getModules(roots.get(0)).size());
assertEquals(1, myTree.getModules(myTree.getModules(roots.get(0)).get(0)).size());
deleteProject(m1);
roots = myTree.getRootProjects();
assertEquals(1, roots.size());
assertEquals(myProjectPom, roots.get(0).getFile());
assertEquals(0, myTree.getModules(roots.get(0)).size());
}
public void testSendingNotificationsWhenProjectDeleted() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m1</module>" +
"</modules>");
VirtualFile m1 = createModulePom("m1",
"<groupId>test</groupId>" +
"<artifactId>m1</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m2</module>" +
"</modules>");
createModulePom("m1/m2",
"<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>");
updateAll(myProjectPom);
MyLoggingListener listener = new MyLoggingListener();
myTree.addListener(listener);
deleteProject(m1);
assertEquals("updated: <none> deleted: m2 m1 ", listener.log);
}
public void testReconnectModuleOfDeletedProjectIfModuleIsManaged() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m1</module>" +
"</modules>");
VirtualFile m1 = createModulePom("m1",
"<groupId>test</groupId>" +
"<artifactId>m1</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m2</module>" +
"</modules>");
VirtualFile m2 = createModulePom("m1/m2",
"<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>");
updateAll(myProjectPom, m2);
List<MavenProject> roots = myTree.getRootProjects();
assertEquals(1, roots.size());
assertEquals(1, myTree.getModules(roots.get(0)).size());
assertEquals(1, myTree.getModules(myTree.getModules(roots.get(0)).get(0)).size());
MyLoggingListener listener = new MyLoggingListener();
myTree.addListener(listener);
deleteProject(m1);
roots = myTree.getRootProjects();
assertEquals(2, roots.size());
assertEquals(myProjectPom, roots.get(0).getFile());
assertEquals(0, myTree.getModules(roots.get(0)).size());
assertEquals(m2, roots.get(1).getFile());
assertEquals(0, myTree.getModules(roots.get(1)).size());
assertEquals("updated: m2 deleted: m1 ", listener.log);
}
public void testAddingProjectsOnUpdateAllWhenManagedFilesChanged() throws Exception {
VirtualFile m1 = createModulePom("m1",
"<groupId>test</groupId>" +
"<artifactId>m1</artifactId>" +
"<version>1</version>");
VirtualFile m2 = createModulePom("m2",
"<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>");
VirtualFile m3 = createModulePom("m3",
"<groupId>test</groupId>" +
"<artifactId>m3</artifactId>" +
"<version>1</version>");
updateAll(m1, m2);
assertEquals(2, myTree.getRootProjects().size());
updateAll(m1, m2, m3);
assertEquals(3, myTree.getRootProjects().size());
}
public void testDeletingProjectsOnUpdateAllWhenManagedFilesChanged() throws Exception {
VirtualFile m1 = createModulePom("m1",
"<groupId>test</groupId>" +
"<artifactId>m1</artifactId>" +
"<version>1</version>");
VirtualFile m2 = createModulePom("m2",
"<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>");
VirtualFile m3 = createModulePom("m3",
"<groupId>test</groupId>" +
"<artifactId>m3</artifactId>" +
"<version>1</version>");
updateAll(m1, m2, m3);
assertEquals(3, myTree.getRootProjects().size());
updateAll(m1, m2);
assertEquals(2, myTree.getRootProjects().size());
}
public void testSendingNotificationsWhenAddingOrDeletingManagedFiles() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>parent</artifactId>" +
"<version>1</version>" +
"<modules>" +
" <module>m1</module>" +
" <module>m2</module>" +
"</modules>");
VirtualFile m1 = createModulePom("m1",
"<groupId>test</groupId>" +
"<artifactId>m1</artifactId>" +
"<version>1</version>");
VirtualFile m2 = createModulePom("m2",
"<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>");
MyLoggingListener l = new MyLoggingListener();
myTree.addListener(l);
myTree.addManagedFilesWithProfiles(Collections.singletonList(myProjectPom), MavenExplicitProfiles.NONE);
myTree.updateAll(false, getMavenGeneralSettings(), EMPTY_MAVEN_PROCESS);
assertEquals("updated: parent m1 m2 deleted: <none> ", l.log);
l.log = "";
myTree.removeManagedFiles(Arrays.asList(myProjectPom));
myTree.updateAll(false, getMavenGeneralSettings(), EMPTY_MAVEN_PROCESS);
assertEquals("updated: <none> deleted: m1 m2 parent ", l.log);
}
public void testUpdatingModelWhenActiveProfilesChange() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<profiles>" +
" <profile>" +
" <id>one</id>" +
" <properties>" +
" <prop>value1</prop>" +
" </properties>" +
" </profile>" +
" <profile>" +
" <id>two</id>" +
" <properties>" +
" <prop>value2</prop>" +
" </properties>" +
" </profile>" +
"</profiles>" +
"<modules>" +
" <module>m</module>" +
"</modules>" +
"<build>" +
" <sourceDirectory>${prop}</sourceDirectory>" +
"</build>");
createModulePom("m",
"<groupId>test</groupId>" +
"<artifactId>m</artifactId>" +
"<version>1</version>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>project</artifactId>" +
" <version>1</version>" +
"</parent>" +
"<build>" +
" <sourceDirectory>${prop}</sourceDirectory>" +
"</build>");
updateAll(Arrays.asList("one"), myProjectPom);
List<MavenProject> roots = myTree.getRootProjects();
MavenProject parentNode = roots.get(0);
MavenProject childNode = myTree.getModules(roots.get(0)).get(0);
assertUnorderedPathsAreEqual(parentNode.getSources(), Arrays.asList(FileUtil.toSystemDependentName(getProjectPath() + "/value1")));
assertUnorderedPathsAreEqual(childNode.getSources(), Arrays.asList(FileUtil.toSystemDependentName(getProjectPath() + "/m/value1")));
updateAll(Arrays.asList("two"), myProjectPom);
assertUnorderedPathsAreEqual(parentNode.getSources(), Arrays.asList(FileUtil.toSystemDependentName(getProjectPath() + "/value2")));
assertUnorderedPathsAreEqual(childNode.getSources(), Arrays.asList(FileUtil.toSystemDependentName(getProjectPath() + "/m/value2")));
}
public void testUpdatingModelWhenProfilesXmlChange() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<build>" +
" <sourceDirectory>${prop}</sourceDirectory>" +
"</build>");
createProfilesXmlOldStyle("<profile>" +
" <id>one</id>" +
" <activation>" +
" <activeByDefault>true</activeByDefault>" +
" </activation>" +
" <properties>" +
" <prop>value1</prop>" +
" </properties>" +
"</profile>");
updateAll(myProjectPom);
List<MavenProject> roots = myTree.getRootProjects();
MavenProject project = roots.get(0);
assertUnorderedPathsAreEqual(project.getSources(), Arrays.asList(FileUtil.toSystemDependentName(getProjectPath() + "/value1")));
createProfilesXmlOldStyle("<profile>" +
" <id>one</id>" +
" <activation>" +
" <activeByDefault>true</activeByDefault>" +
" </activation>" +
" <properties>" +
" <prop>value2</prop>" +
" </properties>" +
"</profile>");
updateAll(myProjectPom);
assertUnorderedPathsAreEqual(project.getSources(), Arrays.asList(FileUtil.toSystemDependentName(getProjectPath() + "/value2")));
}
public void testUpdatingModelWhenParentProfilesXmlChange() throws Exception {
VirtualFile parent = createModulePom("parent",
"<groupId>test</groupId>" +
"<artifactId>parent</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>");
createProfilesXmlOldStyle("parent",
"<profile>" +
" <id>one</id>" +
" <activation>" +
" <activeByDefault>true</activeByDefault>" +
" </activation>" +
" <properties>" +
" <prop>value1</prop>" +
" </properties>" +
"</profile>");
VirtualFile child = createModulePom("m",
"<groupId>test</groupId>" +
"<artifactId>m</artifactId>" +
"<version>1</version>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>parent</artifactId>" +
" <version>1</version>" +
"</parent>" +
"<build>" +
" <sourceDirectory>${prop}</sourceDirectory>" +
"</build>");
updateAll(parent, child);
List<MavenProject> roots = myTree.getRootProjects();
MavenProject childProject = roots.get(1);
assertUnorderedPathsAreEqual(childProject.getSources(), Arrays.asList(FileUtil.toSystemDependentName(getProjectPath() + "/m/value1")));
createProfilesXmlOldStyle("parent",
"<profile>" +
" <id>one</id>" +
" <activation>" +
" <activeByDefault>true</activeByDefault>" +
" </activation>" +
" <properties>" +
" <prop>value2</prop>" +
" </properties>" +
"</profile>");
update(parent);
assertUnorderedPathsAreEqual(childProject.getSources(), Arrays.asList(FileUtil.toSystemDependentName(getProjectPath() + "/m/value2")));
}
public void testUpdatingModelWhenParentProfilesXmlChangeAndItIsAModuleAlso() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m</module>" +
"</modules>");
createProfilesXmlOldStyle("<profile>" +
" <id>one</id>" +
" <activation>" +
" <activeByDefault>true</activeByDefault>" +
" </activation>" +
" <properties>" +
" <prop>value1</prop>" +
" </properties>" +
"</profile>");
createModulePom("m",
"<groupId>test</groupId>" +
"<artifactId>m</artifactId>" +
"<version>1</version>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>project</artifactId>" +
" <version>1</version>" +
"</parent>" +
"<build>" +
" <sourceDirectory>${prop}</sourceDirectory>" +
"</build>");
updateAll(myProjectPom);
MavenProject childNode = myTree.getModules(myTree.getRootProjects().get(0)).get(0);
assertUnorderedPathsAreEqual(childNode.getSources(), Arrays.asList(FileUtil.toSystemDependentName(getProjectPath() + "/m/value1")));
createProfilesXmlOldStyle("<profile>" +
" <id>one</id>" +
" <activation>" +
" <activeByDefault>true</activeByDefault>" +
" </activation>" +
" <properties>" +
" <prop>value2</prop>" +
" </properties>" +
"</profile>");
updateAll(myProjectPom);
assertUnorderedPathsAreEqual(childNode.getSources(), Arrays.asList(FileUtil.toSystemDependentName(getProjectPath() + "/m/value2")));
}
public void testDoNotUpdateModelWhenAggregatorProfilesXmlChange() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m</module>" +
"</modules>");
createModulePom("m",
"<groupId>test</groupId>" +
"<artifactId>m</artifactId>" +
"<version>1</version>" +
"<build>" +
" <sourceDirectory>${prop}</sourceDirectory>" +
"</build>");
createProfilesXmlOldStyle("<profile>" +
" <id>one</id>" +
" <activation>" +
" <activeByDefault>true</activeByDefault>" +
" </activation>" +
" <properties>" +
" <prop>value1</prop>" +
" </properties>" +
"</profile>");
updateAll(myProjectPom);
MyLoggingListener l = new MyLoggingListener();
myTree.addListener(l);
createProfilesXmlOldStyle("<profile>" +
" <id>one</id>" +
" <activation>" +
" <activeByDefault>true</activeByDefault>" +
" </activation>" +
" <properties>" +
" <prop>value2</prop>" +
" </properties>" +
"</profile>");
updateAll(myProjectPom);
assertEquals("updated: project deleted: <none> ", l.log);
}
public void testSaveLoad() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>m1</module>" +
" <module>m2</module>" +
"</modules>" +
// stripping down plugins
"<build>" +
" <plugins>" +
" <plugin>" +
" <groupId>org.apache.maven.plugins</groupId>" +
" <artifactId>maven-compiler-plugin</artifactId>" +
" <configuration>" +
" <source>1.4</source>" +
" </configuration>" +
" </plugin>" +
" </plugins>" +
"</build>" +
// stripping down Xpp3Dom fields
"<reports>" +
" <someTag/>" +
"</reports>");
VirtualFile m1 = createModulePom("m1",
"<groupId>test</groupId>" +
"<artifactId>m1</artifactId>" +
"<version>1</version>");
VirtualFile m2 = createModulePom("m2",
"<groupId>test</groupId>" +
"<artifactId>m2</artifactId>" +
"<version>1</version>");
updateAll(myProjectPom);
MavenProject parentProject = myTree.findProject(myProjectPom);
MavenEmbeddersManager embeddersManager = new MavenEmbeddersManager(myProject);
try {
myTree.resolve(myProject, parentProject, getMavenGeneralSettings(), embeddersManager, NULL_MAVEN_CONSOLE, EMPTY_MAVEN_PROCESS);
}
finally {
embeddersManager.releaseInTests();
}
File f = new File(myDir, "tree.dat");
myTree.save(f);
MavenProjectsTree read = MavenProjectsTree.read(f);
List<MavenProject> roots = read.getRootProjects();
assertEquals(1, roots.size());
MavenProject rootProject = roots.get(0);
assertEquals(myProjectPom, rootProject.getFile());
assertEquals(2, read.getModules(rootProject).size());
assertEquals(m1, read.getModules(rootProject).get(0).getFile());
assertEquals(m2, read.getModules(rootProject).get(1).getFile());
assertNull(read.findAggregator(rootProject));
assertEquals(rootProject, read.findAggregator(read.findProject(m1)));
assertEquals(rootProject, read.findAggregator(read.findProject(m2)));
}
public void testCollectingProfilesFromSettingsXmlAndPluginsXml() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<profiles>" +
" <profile>" +
" <id>one</id>" +
" </profile>" +
"</profiles>");
createProfilesXml("<profile>" +
" <id>two</id>" +
"</profile>");
updateSettingsXml("<profiles>" +
" <profile>" +
" <id>three</id>" +
" </profile>" +
"</profiles>");
updateAll(myProjectPom);
assertUnorderedElementsAreEqual(myTree.getAvailableProfiles(), "one", "two", "three");
}
public void testCollectingProfilesFromSettingsXmlAndPluginsXmlAfterResolve() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<profiles>" +
" <profile>" +
" <id>one</id>" +
" </profile>" +
"</profiles>");
createProfilesXml("<profile>" +
" <id>two</id>" +
"</profile>");
updateSettingsXml("<profiles>" +
" <profile>" +
" <id>three</id>" +
" </profile>" +
"</profiles>");
updateAll(myProjectPom);
MavenEmbeddersManager embeddersManager = new MavenEmbeddersManager(myProject);
try {
myTree.resolve(myProject, myTree.getRootProjects().get(0),
getMavenGeneralSettings(),
embeddersManager,
NULL_MAVEN_CONSOLE,
EMPTY_MAVEN_PROCESS
);
}
finally {
embeddersManager.releaseInTests();
}
assertUnorderedElementsAreEqual(myTree.getAvailableProfiles(), "one", "two", "three");
}
public void testCollectingProfilesFromParentsAfterResolve() throws Exception {
createModulePom("parent1",
"<groupId>test</groupId>" +
"<artifactId>parent1</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<profiles>" +
" <profile>" +
" <id>parent1Profile</id>" +
" </profile>" +
"</profiles>");
createProfilesXml("parent1",
"<profile>" +
" <id>parent1ProfileXml</id>" +
"</profile>");
createModulePom("parent2",
"<groupId>test</groupId>" +
"<artifactId>parent2</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>parent1</artifactId>" +
" <version>1</version>" +
" <relativePath>../parent1/pom.xml</relativePath>" +
"</parent>" +
"<profiles>" +
" <profile>" +
" <id>parent2Profile</id>" +
" </profile>" +
"</profiles>");
createProfilesXml("parent2",
"<profile>" +
" <id>parent2ProfileXml</id>" +
"</profile>");
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<parent>" +
" <groupId>test</groupId>" +
" <artifactId>parent2</artifactId>" +
" <version>1</version>" +
" <relativePath>parent2/pom.xml</relativePath>" +
"</parent>" +
"<profiles>" +
" <profile>" +
" <id>projectProfile</id>" +
" </profile>" +
"</profiles>");
createProfilesXml("<profile>" +
" <id>projectProfileXml</id>" +
"</profile>");
updateSettingsXml("<profiles>" +
" <profile>" +
" <id>settings</id>" +
" </profile>" +
"</profiles>");
updateAll(Arrays.asList("projectProfileXml",
"projectProfile",
"parent1Profile",
"parent1ProfileXml",
"parent2Profile",
"parent2ProfileXml",
"settings",
"xxx"),
myProjectPom);
MavenProject project = myTree.findProject(myProjectPom);
assertUnorderedElementsAreEqual(project.getActivatedProfilesIds().getEnabledProfiles(),
"projectProfileXml",
"projectProfile",
"parent1Profile",
"parent1ProfileXml",
"parent2Profile",
"parent2ProfileXml",
"settings");
MavenEmbeddersManager embeddersManager = new MavenEmbeddersManager(myProject);
try {
myTree.resolve(myProject, project,
getMavenGeneralSettings(),
embeddersManager,
NULL_MAVEN_CONSOLE,
EMPTY_MAVEN_PROCESS
);
}
finally {
embeddersManager.releaseInTests();
}
assertUnorderedElementsAreEqual(project.getActivatedProfilesIds().getEnabledProfiles(),
"projectProfileXml",
"projectProfile",
"parent1Profile",
"parent1ProfileXml",
"parent2Profile",
"parent2ProfileXml",
"settings");
}
public void testDeletingAndRestoringActiveProfilesWhenAvailableProfilesChange() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<profiles>" +
" <profile>" +
" <id>one</id>" +
" </profile>" +
"</profiles>");
createProfilesXml("<profile>" +
" <id>two</id>" +
"</profile>");
updateAll(Arrays.asList("one", "two"), myProjectPom);
assertUnorderedElementsAreEqual(myTree.getExplicitProfiles().getEnabledProfiles(), "one", "two");
deleteProfilesXml();
update(myProjectPom);
assertUnorderedElementsAreEqual(myTree.getExplicitProfiles().getEnabledProfiles(), "one");
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>");
update(myProjectPom);
assertUnorderedElementsAreEqual(myTree.getExplicitProfiles().getEnabledProfiles());
createProfilesXml("<profile>" +
" <id>two</id>" +
"</profile>");
update(myProjectPom);
assertUnorderedElementsAreEqual(myTree.getExplicitProfiles().getEnabledProfiles(), "two");
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<profiles>" +
" <profile>" +
" <id>one</id>" +
" </profile>" +
"</profiles>");
update(myProjectPom);
assertUnorderedElementsAreEqual(myTree.getExplicitProfiles().getEnabledProfiles(), "one", "two");
}
public void testDeletingAndRestoringActiveProfilesWhenProjectDeletes() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<profiles>" +
" <profile>" +
" <id>one</id>" +
" </profile>" +
"</profiles>" +
"<modules>" +
" <module>m</module>" +
"</modules>");
VirtualFile m = createModulePom("m",
"<groupId>test</groupId>" +
"<artifactId>m</artifactId>" +
"<version>1</version>" +
"<profiles>" +
" <profile>" +
" <id>two</id>" +
" </profile>" +
"</profiles>");
updateAll(Arrays.asList("one", "two"), myProjectPom);
assertUnorderedElementsAreEqual(myTree.getExplicitProfiles().getEnabledProfiles(), "one", "two");
final VirtualFile finalM = m;
new WriteCommandAction.Simple(myProject) {
@Override
protected void run() throws Throwable {
finalM.delete(this);
deleteProject(finalM);
}
}.execute().throwException();
assertUnorderedElementsAreEqual(myTree.getExplicitProfiles().getEnabledProfiles(), "one");
m = createModulePom("m",
"<groupId>test</groupId>" +
"<artifactId>m</artifactId>" +
"<version>1</version>" +
"<profiles>" +
" <profile>" +
" <id>two</id>" +
" </profile>" +
"</profiles>");
update(m);
assertUnorderedElementsAreEqual(myTree.getExplicitProfiles().getEnabledProfiles(), "one", "two");
}
public void testFindRootWithMultiLevelAggregator() throws Exception {
VirtualFile p1 = createModulePom("project1", "<groupId>test</groupId>" +
"<artifactId>project1</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>../project2</module>" +
"</modules>"
);
VirtualFile p2 = createModulePom("project2", "<groupId>test</groupId>" +
"<artifactId>project2</artifactId>" +
"<version>1</version>" +
"<packaging>pom</packaging>" +
"<modules>" +
" <module>../module</module>" +
"</modules>"
);
VirtualFile m = createModulePom("module", "<groupId>test</groupId>" +
"<artifactId>module</artifactId>" +
"<version>1</version>"
);
updateAll(p1, p2, m);
List<MavenProject> roots = myTree.getRootProjects();
assertEquals(1, roots.size());
MavenProject p1Project = roots.get(0);
assertEquals(p1, p1Project.getFile());
assertEquals(p1Project, myTree.findRootProject(p1Project));
assertEquals(1, myTree.getModules(p1Project).size());
MavenProject p2Project = myTree.getModules(p1Project).get(0);
assertEquals(p2, p2Project.getFile());
assertEquals(p1Project, myTree.findRootProject(p2Project));
assertEquals(1, myTree.getModules(p2Project).size());
MavenProject mProject = myTree.getModules(p2Project).get(0);
assertEquals(m, mProject.getFile());
assertEquals(p1Project, myTree.findRootProject(mProject));
assertEquals(0, myTree.getModules(mProject).size());
}
public void testOutputPathsAreBasedOnTargetPathWhenResolving() throws Exception {
createProjectPom("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +
"<build>" +
" <directory>my-target</directory>" +
"</build>");
updateAll(myProjectPom);
MavenProject project = myTree.getRootProjects().get(0);
PlatformTestUtil.assertPathsEqual(pathFromBasedir("my-target"), project.getBuildDirectory());
PlatformTestUtil.assertPathsEqual(pathFromBasedir("my-target/classes"), project.getOutputDirectory());
PlatformTestUtil.assertPathsEqual(pathFromBasedir("my-target/test-classes"), project.getTestOutputDirectory());
MavenEmbeddersManager embeddersManager = new MavenEmbeddersManager(myProject);
try {
myTree.resolve(myProject, project, getMavenGeneralSettings(), embeddersManager, NULL_MAVEN_CONSOLE, EMPTY_MAVEN_PROCESS);
}
finally {
embeddersManager.releaseInTests();
}
PlatformTestUtil.assertPathsEqual(pathFromBasedir("my-target"), project.getBuildDirectory());
PlatformTestUtil.assertPathsEqual(pathFromBasedir("my-target/classes"), project.getOutputDirectory());
PlatformTestUtil.assertPathsEqual(pathFromBasedir("my-target/test-classes"), project.getTestOutputDirectory());
}
private static class MyLoggingListener extends MavenProjectsTree.ListenerAdapter {
String log = "";
@Override
public void projectsUpdated(List<Pair<MavenProject, MavenProjectChanges>> updated, List<MavenProject> deleted) {
append(MavenUtil.collectFirsts(updated), "updated:");
append(deleted, "deleted:");
}
private void append(List<MavenProject> updated, String text) {
log += text + " ";
if (updated.isEmpty()) {
log += "<none> ";
return;
}
log += StringUtil.join(updated, new Function<MavenProject, String>() {
@Override
public String fun(MavenProject each) {
return each.getMavenId().getArtifactId();
}
}, " ") + " ";
}
@Override
public void projectResolved(Pair<MavenProject, MavenProjectChanges> projectWithChanges,
NativeMavenProjectHolder nativeMavenProject) {
log += "resolved: " + projectWithChanges.first.getMavenId().getArtifactId() + " ";
}
@Override
public void pluginsResolved(MavenProject project) {
log += "plugins: " + project.getMavenId().getArtifactId() + " ";
}
@Override
public void foldersResolved(Pair<MavenProject, MavenProjectChanges> projectWithChanges) {
log += "folders: " + projectWithChanges.first.getMavenId().getArtifactId() + " ";
}
}
}