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