| /* |
| * 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.importing; |
| |
| import org.jetbrains.idea.maven.MavenCustomRepositoryHelper; |
| import org.jetbrains.idea.maven.MavenImportingTestCase; |
| import org.jetbrains.idea.maven.model.MavenProjectProblem; |
| import org.jetbrains.idea.maven.project.MavenProject; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| public class InvalidProjectImportingTest extends MavenImportingTestCase { |
| public void testUnknownProblem() throws Exception { |
| importProject(""); |
| assertModules("project"); |
| |
| MavenProject root = getRootProjects().get(0); |
| assertProblems(root, "'pom.xml' has syntax errors"); |
| } |
| |
| public void testUnknownProblemWithEmptyFile() throws Exception { |
| createProjectPom(""); |
| myProjectPom.setBinaryContent(new byte[0]); |
| importProject(); |
| |
| assertModules("project"); |
| |
| MavenProject root = getRootProjects().get(0); |
| assertProblems(root, "'pom.xml' has syntax errors"); |
| } |
| |
| public void testUndefinedPropertyInHeader() throws Exception { |
| importProject("<groupId>test</groupId>" + |
| "<artifactId>${undefined}</artifactId>" + |
| "<version>1</version>"); |
| |
| assertModules("project"); |
| MavenProject root = getRootProjects().get(0); |
| assertProblems(root, "'artifactId' with value '${undefined}' does not match a valid id pattern."); |
| } |
| |
| public void testUnresolvedParent() throws Exception { |
| importProject("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>" + |
| |
| "<parent>" + |
| " <groupId>test</groupId>" + |
| " <artifactId>parent</artifactId>" + |
| " <version>1</version>" + |
| "</parent>"); |
| |
| assertModules("project"); |
| |
| MavenProject root = getRootProjects().get(0); |
| assertProblems(root, "Parent 'test:parent:1' not found"); |
| } |
| |
| public void testUnresolvedParentForInvalidProject() throws Exception { |
| importProject("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>" + |
| |
| "<parent>" + |
| " <groupId>test</groupId>" + |
| " <artifactId>parent</artifactId>" + |
| " <version>1</version>" + |
| "</parent>" + |
| |
| // not of the 'pom' type |
| "<modules>" + |
| " <module>foo</module>" + |
| "</modules>"); |
| |
| MavenProject root = getRootProjects().get(0); |
| assertProblems(root, |
| "Parent 'test:parent:1' not found", |
| "Packaging 'jar' is invalid. Aggregator projects require 'pom' as packaging.", |
| "Module 'foo' not found"); |
| } |
| |
| public void testMissingModules() throws Exception { |
| importProject("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>" + |
| "<packaging>pom</packaging>" + |
| |
| "<modules>" + |
| " <module>foo</module>" + |
| "</modules>"); |
| |
| assertModules("project"); |
| |
| MavenProject root = getRootProjects().get(0); |
| assertProblems(root, "Module 'foo' not found"); |
| } |
| |
| public void testInvalidProjectModel() throws Exception { |
| createProjectPom("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>" + |
| "<packaging>jar</packaging>" + // invalid packaging |
| |
| "<modules>" + |
| " <module>foo</module>" + |
| "</modules>"); |
| |
| createModulePom("foo", "<groupId>test</groupId>" + |
| "<artifactId>foo</artifactId>" + |
| "<version>1</version>"); |
| importProject(); |
| assertModules("project", "foo"); |
| |
| MavenProject root = getRootProjects().get(0); |
| assertProblems(root, "Packaging 'jar' is invalid. Aggregator projects require 'pom' as packaging."); |
| } |
| |
| public void testInvalidModuleModel() throws Exception { |
| createProjectPom("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>" + |
| "<packaging>pom</packaging>" + |
| |
| "<modules>" + |
| " <module>foo</module>" + |
| "</modules>"); |
| |
| createModulePom("foo", "<groupId>test</groupId>" + |
| "<artifactId>foo</artifactId>" + |
| "<version>1"); // invalid tag |
| |
| importProject(); |
| assertModules("project", "foo"); |
| |
| MavenProject root = getRootProjects().get(0); |
| assertProblems(root); |
| |
| assertProblems(getModules(root).get(0), "'pom.xml' has syntax errors"); |
| } |
| |
| public void testSeveratInvalidModulesAndWithSameName() throws Exception { |
| createProjectPom("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>" + |
| "<packaging>pom</packaging>" + |
| |
| "<modules>" + |
| " <module>foo</module>" + |
| " <module>bar1</module>" + |
| " <module>bar2</module>" + |
| " <module>bar3</module>" + |
| "</modules>"); |
| |
| createModulePom("foo", "<groupId>test</groupId>" + |
| "<artifactId>foo</artifactId>" + |
| "<version>1"); // invalid tag |
| |
| createModulePom("bar1", "<groupId>test</groupId>" + |
| "<artifactId>bar</artifactId>" + |
| "<version>1"); // invalid tag |
| |
| createModulePom("bar2", "<groupId>test</groupId>" + |
| "<artifactId>bar</artifactId>" + |
| "<version>1"); // invalid tag |
| |
| createModulePom("bar3", "<groupId>org.test</groupId>" + |
| "<artifactId>bar</artifactId>" + |
| "<version>1"); // invalid tag |
| |
| importProject(); |
| assertModules("project", "foo", "bar (1)", "bar (2)", "bar (3) (org.test)"); |
| } |
| |
| public void testInvalidProjectWithModules() throws Exception { |
| createProjectPom("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1" + // invalid tag |
| |
| "<modules>" + |
| " <module>foo</module>" + |
| "</modules>"); |
| |
| createModulePom("foo", "<groupId>test</groupId>" + |
| "<artifactId>foo</artifactId>" + |
| "<version>1</version>"); |
| |
| importProject(); |
| |
| assertModules("project", "foo"); |
| } |
| |
| public void testNonPOMProjectWithModules() throws Exception { |
| createProjectPom("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>" + |
| |
| "<modules>" + |
| " <module>foo</module>" + |
| "</modules>"); |
| |
| createModulePom("foo", "<groupId>test</groupId>" + |
| "<artifactId>foo</artifactId>" + |
| "<version>1</version>"); |
| |
| importProject(); |
| |
| assertModules("project", "foo"); |
| } |
| |
| public void testInvalidRepositoryLayout() throws Exception { |
| importProject("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>" + |
| |
| "<distributionManagement>" + |
| " <repository>" + |
| " <id>test</id>" + |
| " <url>http://www.google.com</url>" + |
| " <layout>nothing</layout>" + // invalid layout |
| " </repository>" + |
| "</distributionManagement>"); |
| |
| assertModules("project"); |
| |
| MavenProject root = getRootProjects().get(0); |
| assertProblems(root, "Cannot find layout implementation corresponding to: 'nothing' for remote repository with id: 'test'."); |
| } |
| |
| public void testDoNotFailIfRepositoryHasEmptyLayout() throws Exception { |
| importProject("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>" + |
| |
| "<repositories>" + |
| " <repository>" + |
| " <id>foo1</id>" + |
| " <url>bar1</url>" + |
| " <layout/>" + |
| " </repository>" + |
| "</repositories>" + |
| "<pluginRepositories>" + |
| " <pluginRepository>" + |
| " <id>foo2</id>" + |
| " <url>bar2</url>" + |
| " <layout/>" + |
| " </pluginRepository>" + |
| "</pluginRepositories>"); |
| |
| MavenProject root = getRootProjects().get(0); |
| assertProblems(root); |
| } |
| |
| public void testDoNotFailIfDistributionRepositoryHasEmptyValues() throws Exception { |
| importProject("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>" + |
| |
| "<distributionManagement>" + |
| " <repository>" + |
| " <id/>" + |
| " <url/>" + |
| " <layout/>" + |
| " </repository>" + |
| "</distributionManagement>"); |
| |
| MavenProject root = getRootProjects().get(0); |
| assertProblems(root); |
| } |
| |
| public void testUnresolvedDependencies() throws Exception { |
| createProjectPom("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<packaging>pom</packaging>" + |
| "<version>1</version>" + |
| |
| "<modules>" + |
| " <module>m1</module>" + |
| " <module>m2</module>" + |
| "</modules>"); |
| |
| createModulePom("m1", "<groupId>test</groupId>" + |
| "<artifactId>m1</artifactId>" + |
| "<version>1</version>" + |
| |
| "<dependencies>" + |
| " <dependency>" + |
| " <groupId>xxx</groupId>" + |
| " <artifactId>xxx</artifactId>" + |
| " <version>1</version>" + |
| " </dependency>" + |
| " <dependency>" + |
| " <groupId>yyy</groupId>" + |
| " <artifactId>yyy</artifactId>" + |
| " <version>2</version>" + |
| " </dependency>" + |
| "</dependencies>"); |
| |
| createModulePom("m2", "<groupId>test</groupId>" + |
| "<artifactId>m2</artifactId>" + |
| "<version>1</version>" + |
| |
| "<dependencies>" + |
| " <dependency>" + |
| " <groupId>zzz</groupId>" + |
| " <artifactId>zzz</artifactId>" + |
| " <version>3</version>" + |
| " </dependency>" + |
| "</dependencies>"); |
| |
| importProject(); |
| |
| MavenProject root = getRootProjects().get(0); |
| |
| assertProblems(root); |
| assertProblems(getModules(root).get(0), |
| "Unresolved dependency: 'xxx:xxx:jar:1'", |
| "Unresolved dependency: 'yyy:yyy:jar:2'"); |
| assertProblems(getModules(root).get(1), |
| "Unresolved dependency: 'zzz:zzz:jar:3'"); |
| } |
| |
| public void testUnresolvedPomTypeDependency() throws Exception { |
| createProjectPom("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>" + |
| |
| "<dependencies>" + |
| " <dependency>" + |
| " <groupId>xxx</groupId>" + |
| " <artifactId>yyy</artifactId>" + |
| " <version>4.0</version>" + |
| " <type>pom</type>" + |
| " </dependency>" + |
| "</dependencies>"); |
| |
| importProject(); |
| |
| assertModuleLibDeps("project"); |
| |
| MavenProject root = getRootProjects().get(0); |
| assertProblems(root, "Unresolved dependency: 'xxx:yyy:pom:4.0'"); |
| } |
| |
| public void testDoesNotReportInterModuleDependenciesAsUnresolved() throws Exception { |
| createProjectPom("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<packaging>pom</packaging>" + |
| "<version>1</version>" + |
| |
| "<modules>" + |
| " <module>m1</module>" + |
| " <module>m2</module>" + |
| "</modules>"); |
| |
| createModulePom("m1", "<groupId>test</groupId>" + |
| "<artifactId>m1</artifactId>" + |
| "<version>1</version>" + |
| |
| "<dependencies>" + |
| " <dependency>" + |
| " <groupId>test</groupId>" + |
| " <artifactId>m2</artifactId>" + |
| " <version>1</version>" + |
| " </dependency>" + |
| "</dependencies>"); |
| |
| createModulePom("m2", "<groupId>test</groupId>" + |
| "<artifactId>m2</artifactId>" + |
| "<version>1</version>"); |
| |
| importProject(); |
| |
| MavenProject root = getRootProjects().get(0); |
| assertProblems(root); |
| assertProblems(getModules(root).get(0)); |
| assertProblems(getModules(root).get(1)); |
| } |
| |
| public void testCircularDependencies() throws Exception { |
| if (ignore()) return; |
| |
| createProjectPom("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<packaging>pom</packaging>" + |
| "<version>1</version>" + |
| |
| "<modules>" + |
| " <module>m1</module>" + |
| " <module>m2</module>" + |
| " <module>m3</module>" + |
| "</modules>"); |
| |
| createModulePom("m1", "<groupId>test</groupId>" + |
| "<artifactId>m1</artifactId>" + |
| "<version>1</version>" + |
| |
| "<dependencies>" + |
| " <dependency>" + |
| " <groupId>test</groupId>" + |
| " <artifactId>m2</artifactId>" + |
| " <version>1</version>" + |
| " </dependency>" + |
| "</dependencies>"); |
| |
| createModulePom("m2", "<groupId>test</groupId>" + |
| "<artifactId>m2</artifactId>" + |
| "<version>1</version>" + |
| |
| "<dependencies>" + |
| " <dependency>" + |
| " <groupId>test</groupId>" + |
| " <artifactId>m3</artifactId>" + |
| " <version>1</version>" + |
| " </dependency>" + |
| "</dependencies>"); |
| |
| createModulePom("m3", "<groupId>test</groupId>" + |
| "<artifactId>m3</artifactId>" + |
| "<version>1</version>" + |
| |
| "<dependencies>" + |
| " <dependency>" + |
| " <groupId>test</groupId>" + |
| " <artifactId>m1</artifactId>" + |
| " <version>1</version>" + |
| " </dependency>" + |
| "</dependencies>"); |
| |
| importProject(); |
| |
| MavenProject root = getRootProjects().get(0); |
| assertProblems(root); |
| assertProblems(getModules(root).get(0)); |
| assertProblems(getModules(root).get(1)); |
| assertProblems(getModules(root).get(2)); |
| } |
| |
| public void testUnresolvedExtensionsAfterImport() throws Exception { |
| importProject("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>" + |
| |
| "<build>" + |
| " <extensions>" + |
| " <extension>" + |
| " <groupId>xxx</groupId>" + |
| " <artifactId>yyy</artifactId>" + |
| " <version>1</version>" + |
| " </extension>" + |
| " </extensions>" + |
| "</build>"); |
| |
| MavenProject root = getRootProjects().get(0); |
| assertProblems(root, "Unresolved build extension: 'xxx:yyy:1'"); |
| } |
| |
| public void testUnresolvedExtensionsAfterResolve() throws Exception { |
| importProject("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>" + |
| |
| "<build>" + |
| " <extensions>" + |
| " <extension>" + |
| " <groupId>xxx</groupId>" + |
| " <artifactId>yyy</artifactId>" + |
| " <version>1</version>" + |
| " </extension>" + |
| " </extensions>" + |
| "</build>"); |
| |
| resolveDependenciesAndImport(); |
| MavenProject root = getRootProjects().get(0); |
| assertProblems(root, "Unresolved build extension: 'xxx:yyy:1'"); |
| } |
| |
| public void testDoesNotReportExtensionsThatWereNotTriedToBeResolved() throws Exception { |
| importProject("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>" + |
| |
| // for some reasons this plugins is not rtied to be resolved by embedder. |
| // we shouldn't report it as unresolved. |
| "<build>" + |
| " <extensions>" + |
| " <extension>" + |
| " <groupId>org.apache.maven.wagon</groupId>" + |
| " <artifactId>wagon-ssh-external</artifactId>" + |
| " <version>1.0-alpha-6</version>" + |
| " </extension>" + |
| " </extensions>" + |
| "</build>"); |
| |
| assertProblems(getRootProjects().get(0)); |
| |
| resolveDependenciesAndImport(); |
| assertProblems(getRootProjects().get(0)); |
| } |
| |
| public void testDoesNotReportExtensionsThatDoNotHaveJarFiles() throws Exception { |
| importProject("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>" + |
| |
| // for some reasons this plugins is not rtied to be resolved by embedder. |
| // we shouldn't report it as unresolved. |
| "<build>" + |
| " <extensions>" + |
| " <extension>" + |
| " <groupId>org.apache.maven.wagon</groupId>" + |
| " <artifactId>wagon</artifactId>" + |
| " <version>1.0-alpha-6</version>" + |
| " </extension>" + |
| " </extensions>" + |
| "</build>"); |
| |
| assertProblems(getRootProjects().get(0)); |
| |
| resolveDependenciesAndImport(); |
| assertProblems(getRootProjects().get(0)); |
| } |
| |
| public void testUnresolvedBuildExtensionsInModules() throws Exception { |
| createProjectPom("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<packaging>pom</packaging>" + |
| "<version>1</version>" + |
| |
| "<modules>" + |
| " <module>m1</module>" + |
| " <module>m2</module>" + |
| "</modules>"); |
| |
| createModulePom("m1", |
| "<groupId>test</groupId>" + |
| "<artifactId>m1</artifactId>" + |
| "<version>1</version>" + |
| |
| "<build>" + |
| " <extensions>" + |
| " <extension>" + |
| " <groupId>xxx</groupId>" + |
| " <artifactId>xxx</artifactId>" + |
| " <version>1</version>" + |
| " </extension>" + |
| " </extensions>" + |
| "</build>"); |
| |
| createModulePom("m2", |
| "<groupId>test</groupId>" + |
| "<artifactId>m2</artifactId>" + |
| "<version>1</version>" + |
| |
| "<build>" + |
| " <extensions>" + |
| " <extension>" + |
| " <groupId>yyy</groupId>" + |
| " <artifactId>yyy</artifactId>" + |
| " <version>1</version>" + |
| " </extension>" + |
| " <extension>" + |
| " <groupId>zzz</groupId>" + |
| " <artifactId>zzz</artifactId>" + |
| " <version>1</version>" + |
| " </extension>" + |
| " </extensions>" + |
| "</build>"); |
| |
| importProject(); |
| |
| MavenProject root = getRootProjects().get(0); |
| |
| assertProblems(root); |
| assertProblems(getModules(root).get(0), |
| "Unresolved build extension: 'xxx:xxx:1'"); |
| assertProblems(getModules(root).get(1), |
| "Unresolved build extension: 'yyy:yyy:1'", |
| "Unresolved build extension: 'zzz:zzz:1'"); |
| } |
| |
| public void testUnresolvedPlugins() throws Exception { |
| importProject("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>" + |
| |
| "<build>" + |
| " <plugins>" + |
| " <plugin>" + |
| " <groupId>xxx</groupId>" + |
| " <artifactId>yyy</artifactId>" + |
| " <version>1</version>" + |
| " </plugin>" + |
| " </plugins>" + |
| "</build>"); |
| |
| MavenProject root = getRootProjects().get(0); |
| assertProblems(root, "Unresolved plugin: 'xxx:yyy:1'"); |
| } |
| |
| public void testDoNotReportResolvedPlugins() throws Exception { |
| MavenCustomRepositoryHelper helper = new MavenCustomRepositoryHelper(myDir, "plugins"); |
| |
| setRepositoryPath(helper.getTestDataPath("plugins")); |
| |
| importProject("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>" + |
| |
| "<build>" + |
| " <plugins>" + |
| " <plugin>" + |
| " <groupId>org.apache.maven.plugins</groupId>" + |
| " <artifactId>maven-compiler-plugin</artifactId>" + |
| " <version>2.0.2</version>" + |
| " </plugin>" + |
| " </plugins>" + |
| "</build>"); |
| |
| assertProblems(getRootProjects().get(0)); |
| } |
| |
| public void testUnresolvedPluginsAsExtensions() throws Exception { |
| importProject("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>" + |
| |
| "<build>" + |
| " <plugins>" + |
| " <plugin>" + |
| " <groupId>xxx</groupId>" + |
| " <artifactId>yyy</artifactId>" + |
| " <version>1</version>" + |
| " <extensions>true</extensions>" + |
| " </plugin>" + |
| " </plugins>" + |
| "</build>"); |
| |
| assertModules("project"); |
| |
| MavenProject root = getRootProjects().get(0); |
| assertProblems(root, "Unresolved plugin: 'xxx:yyy:1'"); |
| } |
| |
| public void testInvalidSettingsXml() throws Exception { |
| updateSettingsXml("<localRepo<<"); |
| |
| importProject("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>"); |
| assertModules("project"); |
| |
| MavenProject root = getRootProjects().get(0); |
| assertProblems(root, "'settings.xml' has syntax errors"); |
| } |
| |
| public void testInvalidProfilesXml() throws Exception { |
| createProfilesXml("<prof<<"); |
| |
| importProject("<groupId>test</groupId>" + |
| "<artifactId>project</artifactId>" + |
| "<version>1</version>"); |
| assertModules("project"); |
| |
| MavenProject root = getRootProjects().get(0); |
| assertProblems(root, "'profiles.xml' has syntax errors"); |
| } |
| |
| private static void assertProblems(MavenProject project, String... expectedProblems) { |
| List<String> actualProblems = new ArrayList<String>(); |
| for (MavenProjectProblem each : project.getProblems()) { |
| actualProblems.add(each.getDescription()); |
| } |
| assertOrderedElementsAreEqual(actualProblems, expectedProblems); |
| } |
| |
| private List<MavenProject> getRootProjects() { |
| return myProjectsTree.getRootProjects(); |
| } |
| |
| private List<MavenProject> getModules(MavenProject p) { |
| return myProjectsTree.getModules(p); |
| } |
| } |