| /* |
| * Copyright 2000-2009 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.wizards; |
| |
| import com.intellij.openapi.application.Result; |
| import com.intellij.openapi.application.WriteAction; |
| import com.intellij.openapi.command.WriteCommandAction; |
| import com.intellij.openapi.module.ModifiableModuleModel; |
| import com.intellij.openapi.module.Module; |
| import com.intellij.openapi.module.ModuleManager; |
| import com.intellij.openapi.roots.ModuleRootManager; |
| import com.intellij.openapi.util.text.StringUtil; |
| import com.intellij.openapi.vfs.VfsUtil; |
| import com.intellij.openapi.vfs.VirtualFile; |
| import org.jetbrains.idea.maven.MavenImportingTestCase; |
| import org.jetbrains.idea.maven.model.MavenArchetype; |
| import org.jetbrains.idea.maven.model.MavenId; |
| import org.jetbrains.idea.maven.project.MavenProject; |
| import org.jetbrains.idea.maven.project.MavenProjectsManager; |
| |
| import java.util.List; |
| |
| public class MavenModuleBuilderTest extends MavenImportingTestCase { |
| private MavenModuleBuilder myBuilder; |
| |
| @Override |
| protected void setUp() throws Exception { |
| super.setUp(); |
| myBuilder = new MavenModuleBuilder(); |
| |
| createJdk("Java 1.5"); |
| setModuleNameAndRoot("module", getProjectPath()); |
| } |
| |
| public void testCreatingBlank() throws Exception { |
| if (!hasMavenInstallation()) return; |
| |
| MavenId id = new MavenId("org.foo", "module", "1.0"); |
| createNewModule(id); |
| |
| List<MavenProject> projects = MavenProjectsManager.getInstance(myProject).getProjects(); |
| assertEquals(1, projects.size()); |
| |
| MavenProject project = projects.get(0); |
| assertEquals(id, project.getMavenId()); |
| |
| assertModules("module"); |
| MavenProjectsManager.getInstance(myProject).isMavenizedModule(getModule("module")); |
| assertSame(project, MavenProjectsManager.getInstance(myProject).findProject(getModule("module"))); |
| |
| assertNotNull(myProjectRoot.findFileByRelativePath("src/main/java")); |
| assertNotNull(myProjectRoot.findFileByRelativePath("src/test/java")); |
| |
| assertSources("module", "src/main/java"); |
| assertTestSources("module", "src/test/java"); |
| } |
| |
| public void testInheritJdkFromProject() throws Exception { |
| if (!hasMavenInstallation()) return; |
| |
| createNewModule(new MavenId("org.foo", "module", "1.0")); |
| ModuleRootManager manager = ModuleRootManager.getInstance(getModule("module")); |
| assertTrue(manager.isSdkInherited()); |
| } |
| |
| public void testCreatingFromArchetype() throws Exception { |
| if (!hasMavenInstallation()) return; |
| |
| setArchetype(new MavenArchetype("org.apache.maven.archetypes", "maven-archetype-quickstart", "1.0", null, null)); |
| MavenId id = new MavenId("org.foo", "module", "1.0"); |
| createNewModule(id); |
| |
| List<MavenProject> projects = MavenProjectsManager.getInstance(myProject).getProjects(); |
| assertEquals(1, projects.size()); |
| |
| MavenProject project = projects.get(0); |
| assertEquals(id, project.getMavenId()); |
| |
| assertNotNull(myProjectRoot.findFileByRelativePath("src/main/java/org/foo/App.java")); |
| assertNotNull(myProjectRoot.findFileByRelativePath("src/test/java/org/foo/AppTest.java")); |
| |
| assertSources("module", "src/main/java"); |
| assertTestSources("module", "src/test/java"); |
| } |
| |
| public void testAddingNewlyCreatedModuleToTheAggregator() throws Exception { |
| if (!hasMavenInstallation()) return; |
| |
| importProject("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>"); |
| |
| setModuleNameAndRoot("module", getProjectPath() + "/module"); |
| setAggregatorProject(myProjectPom); |
| createNewModule(new MavenId("org.foo", "module", "1.0")); |
| |
| assertEquals(createPomXml("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>\n" + |
| " <packaging>pom</packaging>\n" + |
| " <version>1</version>\n" + |
| " <modules>\n" + |
| " <module>module</module>\n" + |
| " </modules>\n"), |
| StringUtil.convertLineSeparators(VfsUtil.loadText(myProjectPom))); |
| } |
| |
| public void testAddingManagedProjectIfNoArrgerator() throws Exception { |
| if (!hasMavenInstallation()) return; |
| |
| importProject("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>"); |
| |
| assertEquals(1, myProjectsManager.getProjectsTreeForTests().getManagedFilesPaths().size()); |
| |
| setModuleNameAndRoot("module", getProjectPath() + "/module"); |
| setAggregatorProject(null); |
| createNewModule(new MavenId("org.foo", "module", "1.0")); |
| myProjectRoot.findFileByRelativePath("module/pom.xml"); |
| |
| assertEquals(2, myProjectsManager.getProjectsTreeForTests().getManagedFilesPaths().size()); |
| } |
| |
| public void testDoNotAddManagedProjectIfAddingAsModuleToAggregator() throws Exception { |
| if (!hasMavenInstallation()) return; |
| |
| importProject("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>"); |
| |
| assertEquals(1, myProjectsManager.getProjectsTreeForTests().getManagedFilesPaths().size()); |
| |
| setModuleNameAndRoot("module", getProjectPath() + "/module"); |
| setAggregatorProject(myProjectPom); |
| createNewModule(new MavenId("org.foo", "module", "1.0")); |
| myProjectRoot.findFileByRelativePath("module/pom.xml"); |
| |
| assertEquals(1, myProjectsManager.getProjectsTreeForTests().getManagedFilesPaths().size()); |
| } |
| |
| public void testAddingParent() throws Exception { |
| if (!hasMavenInstallation()) return; |
| |
| importProject("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>"); |
| |
| setModuleNameAndRoot("module", getProjectPath() + "/module"); |
| setParentProject(myProjectPom); |
| createNewModule(new MavenId("org.foo", "module", "1.0")); |
| |
| assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + |
| "<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n" + |
| " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + |
| " xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n" + |
| " <parent>\n" + |
| " <artifactId>project</artifactId>\n" + |
| " <groupId>test</groupId>\n" + |
| " <version>1</version>\n" + |
| " </parent>\n" + |
| " <modelVersion>4.0.0</modelVersion>\n" + |
| "\n" + |
| " <groupId>org.foo</groupId>\n" + |
| " <artifactId>module</artifactId>\n" + |
| " <version>1.0</version>\n" + |
| "\n" + |
| "\n" + |
| "</project>", |
| VfsUtil.loadText(myProjectRoot.findFileByRelativePath("module/pom.xml"))); |
| } |
| |
| public void testAddingParentWithInheritedProperties() throws Exception { |
| if (!hasMavenInstallation()) return; |
| |
| importProject("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>"); |
| |
| setModuleNameAndRoot("module", getProjectPath() + "/module"); |
| setParentProject(myProjectPom); |
| setInheritedOptions(true, true); |
| createNewModule(new MavenId("org.foo", "module", "1.0")); |
| |
| assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + |
| "<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n" + |
| " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + |
| " xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n" + |
| " <parent>\n" + |
| " <artifactId>project</artifactId>\n" + |
| " <groupId>test</groupId>\n" + |
| " <version>1</version>\n" + |
| " </parent>\n" + |
| " <modelVersion>4.0.0</modelVersion>\n" + |
| "\n" + |
| " <artifactId>module</artifactId>\n" + |
| "\n" + |
| "\n" + |
| "</project>", |
| VfsUtil.loadText(myProjectRoot.findFileByRelativePath("module/pom.xml"))); |
| } |
| |
| public void testAddingParentAndInheritWhenGeneratingFromArchetype() throws Exception { |
| if (!hasMavenInstallation()) return; |
| |
| importProject("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>"); |
| |
| setModuleNameAndRoot("module", getProjectPath() + "/module"); |
| setParentProject(myProjectPom); |
| setInheritedOptions(true, true); |
| setArchetype(new MavenArchetype("org.apache.maven.archetypes", "maven-archetype-quickstart", "1.0", null, null)); |
| createNewModule(new MavenId("org.foo", "module", "1.0")); |
| |
| assertEquals("<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + |
| " xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n" + |
| " <parent>\n" + |
| " <artifactId>project</artifactId>\n" + |
| " <groupId>test</groupId>\n" + |
| " <version>1</version>\n" + |
| " </parent>\n" + |
| " <modelVersion>4.0.0</modelVersion>\n" + |
| "\n" + |
| " <artifactId>module</artifactId>\n" + |
| " <packaging>jar</packaging>\n" + |
| "\n" + |
| " <name>module</name>\n" + |
| " <url>http://maven.apache.org</url>\n" + |
| "\n" + |
| " <properties>\n" + |
| " <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n" + |
| " </properties>\n" + |
| "\n" + |
| " <dependencies>\n" + |
| " <dependency>\n" + |
| " <groupId>junit</groupId>\n" + |
| " <artifactId>junit</artifactId>\n" + |
| " <version>3.8.1</version>\n" + |
| " <scope>test</scope>\n" + |
| " </dependency>\n" + |
| " </dependencies>\n" + |
| "</project>\n", |
| VfsUtil.loadText(myProjectRoot.findFileByRelativePath("module/pom.xml"))); |
| } |
| |
| public void testAddingParentWithRelativePath() throws Exception { |
| if (!hasMavenInstallation()) return; |
| |
| importProject("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>"); |
| |
| setModuleNameAndRoot("module", getProjectPath() + "/subDir/module"); |
| setParentProject(myProjectPom); |
| createNewModule(new MavenId("org.foo", "module", "1.0")); |
| |
| assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + |
| "<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n" + |
| " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + |
| " xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n" + |
| " <parent>\n" + |
| " <artifactId>project</artifactId>\n" + |
| " <groupId>test</groupId>\n" + |
| " <version>1</version>\n" + |
| " <relativePath>../../pom.xml</relativePath>\n" + |
| " </parent>\n" + |
| " <modelVersion>4.0.0</modelVersion>\n" + |
| "\n" + |
| " <groupId>org.foo</groupId>\n" + |
| " <artifactId>module</artifactId>\n" + |
| " <version>1.0</version>\n" + |
| "\n" + |
| "\n" + |
| "</project>", |
| VfsUtil.loadText(myProjectRoot.findFileByRelativePath("subDir/module/pom.xml"))); |
| } |
| |
| private void setModuleNameAndRoot(String name, String root) { |
| myBuilder.setName(name); |
| myBuilder.setModuleFilePath(root + "/" + name + ".iml"); |
| myBuilder.setContentEntryPath(root); |
| } |
| |
| private void setAggregatorProject(VirtualFile pom) { |
| myBuilder.setAggregatorProject(pom == null ? null : myProjectsManager.findProject(pom)); |
| } |
| |
| private void setParentProject(VirtualFile pom) { |
| myBuilder.setParentProject(myProjectsManager.findProject(pom)); |
| } |
| |
| private void setInheritedOptions(boolean groupId, boolean version) { |
| myBuilder.setInheritedOptions(groupId, version); |
| } |
| |
| private void setArchetype(MavenArchetype archetype) { |
| myBuilder.setArchetype(archetype); |
| } |
| |
| private void createNewModule(MavenId id) throws Exception { |
| myBuilder.setProjectId(id); |
| |
| new WriteAction() { |
| protected void run(Result result) throws Throwable { |
| ModifiableModuleModel model = ModuleManager.getInstance(myProject).getModifiableModel(); |
| myBuilder.createModule(model); |
| model.commit(); |
| } |
| }.execute(); |
| |
| resolveDependenciesAndImport(); |
| } |
| } |