/*
* 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.application.Result;
import com.intellij.openapi.application.WriteAction;
import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.testFramework.PlatformTestUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.idea.maven.MavenTestCase;
import org.jetbrains.idea.maven.model.*;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class MavenProjectReaderTest extends MavenTestCase {
public void testBasics() throws Exception {
createProjectPom("test" +
"project" +
"1");
MavenId p = readProject(myProjectPom).getMavenId();
assertEquals("test", p.getGroupId());
assertEquals("project", p.getArtifactId());
assertEquals("1", p.getVersion());
}
public void testInvalidXml() throws Exception {
createProjectPom("test" +
"project" +
"1");
assertProblems(readProject(myProjectPom, new NullProjectLocator()));
createProjectPom("" +
"" +
"<" +
"testproject" +
"1");
MavenProjectReaderResult result = readProject(myProjectPom, new NullProjectLocator());
assertProblems(result, "'pom.xml' has syntax errors");
MavenId p = result.mavenModel.getMavenId();
assertEquals("test", p.getGroupId());
assertEquals("project", p.getArtifactId());
assertEquals("1", p.getVersion());
}
public void testInvalidXmlCharData() throws Exception {
createProjectPom("test" +
"project" +
"1");
assertProblems(readProject(myProjectPom, new NullProjectLocator()));
createProjectPom("a" + new String(new byte[]{0x0}) + "a");
MavenProjectReaderResult result = readProject(myProjectPom, new NullProjectLocator());
assertProblems(result, "'pom.xml' has syntax errors");
MavenModel p = result.mavenModel;
assertEquals("a0x0a", p.getName());
}
public void testInvalidParentXml() throws Exception {
createProjectPom("test" +
"parent" +
"1" +
"" +
" test" +
" parent" +
" 1" +
"");
assertProblems(readProject(module, new NullProjectLocator()), "Parent 'test:parent:1' has problems");
}
public void testProjectWithAbsentParentXmlIsValid() throws Exception {
createProjectPom("" +
" test" +
" parent" +
" 1" +
"");
assertProblems(readProject(myProjectPom, new NullProjectLocator()));
}
public void testProjectWithSelfParentIsInvalid() throws Exception {
createProjectPom("" +
" test" +
" project" +
" 1" +
"" +
"project" +
"pom");
assertProblems(readProject(myProjectPom, new NullProjectLocator()), "Self-inheritance found");
}
public void testInvalidProfilesXml() throws Exception {
createProjectPom("test" +
"project" +
"1");
createProfilesXml("test" +
"project" +
"1");
updateSettingsXml("test" +
"project" +
"1" +
"foo");
MavenProjectReaderResult readResult = readProject(myProjectPom, new NullProjectLocator());
assertProblems(readResult, "'pom.xml' has syntax errors");
MavenModel p = readResult.mavenModel;
assertEquals("test", p.getMavenId().getGroupId());
assertEquals("project", p.getMavenId().getArtifactId());
assertEquals("Unknown", p.getMavenId().getVersion());
assertEquals("foo", p.getName());
}
public void testInvalidXmlWithWrongClosingTag() throws Exception {
if (ignore()) return;
createProjectPom("test" +
"project" +
"1" +
"foo");
MavenProjectReaderResult readResult = readProject(myProjectPom, new NullProjectLocator());
assertProblems(readResult, "'pom.xml' has syntax errors");
MavenModel p = readResult.mavenModel;
assertEquals("test", p.getMavenId().getGroupId());
assertEquals("project", p.getMavenId().getArtifactId());
assertEquals("1", p.getMavenId().getVersion());
assertEquals("foo", p.getName());
}
public void testEmpty() throws Exception {
createProjectPom("");
MavenModel p = readProject(myProjectPom);
assertEquals("Unknown", p.getMavenId().getGroupId());
assertEquals("Unknown", p.getMavenId().getArtifactId());
assertEquals("Unknown", p.getMavenId().getVersion());
}
public void testSpaces() throws Exception {
createProjectPom("foo bar");
MavenModel p = readProject(myProjectPom);
assertEquals("foo bar", p.getName());
}
public void testNewLines() throws Exception {
createProjectPom("\n" +
" group\n" +
"\n" +
"\n" +
" artifact\n" +
"\n" +
"\n" +
" 1\n" +
"\n");
MavenModel p = readProject(myProjectPom);
assertEquals(new MavenId("group", "artifact", "1"), p.getMavenId());
}
public void testCommentsWithNewLinesInTags() throws Exception {
createProjectPom("test\n" +
"" +
"\n" +
"project" +
"1\n" +
"" +
"\n" +
"\n" +
"");
MavenModel p = readProject(myProjectPom);
MavenId id = p.getMavenId();
assertEquals("test", id.getGroupId());
assertEquals("project", id.getArtifactId());
assertEquals("1", id.getVersion());
assertNull(p.getName());
}
public void testTextInContainerTag() throws Exception {
createProjectPom("foo name bar");
MavenModel p = readProject(myProjectPom);
assertEquals("name", p.getName());
}
public void testDefaults() throws Exception {
VirtualFile file = new WriteAction() {
@Override
protected void run(Result result) throws Throwable {
VirtualFile res = myProjectRoot.createChildData(this, "pom.xml");
result.setResult(res);
}
}.execute().getResultObject();
VfsUtil.saveText(file, "" +
" test" +
" project" +
" 1" +
"");
MavenModel p = readProject(file);
assertEquals("jar", p.getPackaging());
assertNull(p.getName());
assertNull(p.getParent());
assertEquals("project-1", p.getBuild().getFinalName());
assertEquals(null, p.getBuild().getDefaultGoal());
assertSize(1, p.getBuild().getSources());
PlatformTestUtil.assertPathsEqual(pathFromBasedir("src/main/java"), p.getBuild().getSources().get(0));
assertSize(1, p.getBuild().getTestSources());
PlatformTestUtil.assertPathsEqual(pathFromBasedir("src/test/java"), p.getBuild().getTestSources().get(0));
assertEquals(1, p.getBuild().getResources().size());
assertResource(p.getBuild().getResources().get(0), pathFromBasedir("src/main/resources"),
false, null, Collections.emptyList(), Collections.emptyList());
assertEquals(1, p.getBuild().getTestResources().size());
assertResource(p.getBuild().getTestResources().get(0), pathFromBasedir("src/test/resources"),
false, null, Collections.emptyList(), Collections.emptyList());
PlatformTestUtil.assertPathsEqual(pathFromBasedir("target"), p.getBuild().getDirectory());
PlatformTestUtil.assertPathsEqual(pathFromBasedir("target/classes"), p.getBuild().getOutputDirectory());
PlatformTestUtil.assertPathsEqual(pathFromBasedir("target/test-classes"), p.getBuild().getTestOutputDirectory());
}
public void testDefaultsForParent() throws Exception {
createProjectPom("test" +
"project" +
"1" +
"" +
" dummy" +
"");
MavenModel p = readProject(myProjectPom);
assertParent(p, "Unknown", "Unknown", "Unknown");
}
public void testTakingCoordinatesFromParent() throws Exception {
createProjectPom("" +
" test" +
" project" +
" 1" +
"");
MavenId id = readProject(myProjectPom).getMavenId();
assertEquals("test", id.getGroupId());
assertEquals("Unknown", id.getArtifactId());
assertEquals("1", id.getVersion());
}
public void testCustomSettings() throws Exception {
VirtualFile file = new WriteAction() {
@Override
protected void run(Result result) throws Throwable {
VirtualFile res = myProjectRoot.createChildData(this, "pom.xml");
result.setResult(res);
}
}.execute().getResultObject();
VfsUtil.saveText(file, "" +
" 1.2.3" +
" test" +
" project" +
" 1" +
" foo" +
" pom" +
" " +
" testParent" +
" projectParent" +
" 2" +
" ../parent/pom.xml" +
" " +
" " +
" xxx" +
" someGoal" +
" mySrc" +
" myTestSrc" +
" myScriptSrc" +
" " +
" " +
" myRes" +
" true" +
" dir" +
" **.properties" +
" **.xml" +
" " +
" " +
" " +
" " +
" myTestRes" +
" **.properties" +
" " +
" " +
" myOutput" +
" myClasses" +
" myTestClasses" +
" " +
"");
MavenModel p = readProject(file);
assertEquals("pom", p.getPackaging());
assertEquals("foo", p.getName());
assertParent(p, "testParent", "projectParent", "2");
assertEquals("xxx", p.getBuild().getFinalName());
assertEquals("someGoal", p.getBuild().getDefaultGoal());
assertSize(1, p.getBuild().getSources());
PlatformTestUtil.assertPathsEqual(pathFromBasedir("mySrc"), p.getBuild().getSources().get(0));
assertSize(1, p.getBuild().getTestSources());
PlatformTestUtil.assertPathsEqual(pathFromBasedir("myTestSrc"), p.getBuild().getTestSources().get(0));
assertEquals(1, p.getBuild().getResources().size());
assertResource(p.getBuild().getResources().get(0), pathFromBasedir("myRes"),
true, "dir", Collections.singletonList("**.properties"), Collections.singletonList("**.xml"));
assertEquals(1, p.getBuild().getTestResources().size());
assertResource(p.getBuild().getTestResources().get(0), pathFromBasedir("myTestRes"),
false, null, Collections.singletonList("**.properties"), Collections.emptyList());
PlatformTestUtil.assertPathsEqual(pathFromBasedir("myOutput"), p.getBuild().getDirectory());
PlatformTestUtil.assertPathsEqual(pathFromBasedir("myClasses"), p.getBuild().getOutputDirectory());
PlatformTestUtil.assertPathsEqual(pathFromBasedir("myTestClasses"), p.getBuild().getTestOutputDirectory());
}
public void testOutputPathsAreBasedOnTargetPath() throws Exception {
createProjectPom("test" +
"project" +
"1" +
"" +
" my-target" +
"");
MavenModel p = readProject(myProjectPom);
PlatformTestUtil.assertPathsEqual(pathFromBasedir("my-target"), p.getBuild().getDirectory());
PlatformTestUtil.assertPathsEqual(pathFromBasedir("my-target/classes"), p.getBuild().getOutputDirectory());
PlatformTestUtil.assertPathsEqual(pathFromBasedir("my-target/test-classes"), p.getBuild().getTestOutputDirectory());
}
public void testDoesNotIncludeResourcesWithoutDirectory() throws Exception {
createProjectPom("" +
" " +
" " +
" " +
" " +
" " +
" " +
" " +
" true" +
" " +
" " +
"");
MavenModel p = readProject(myProjectPom);
assertEquals(0, p.getBuild().getResources().size());
assertEquals(0, p.getBuild().getTestResources().size());
}
public void testPathsWithProperties() throws Exception {
createProjectPom("" +
" subDir" +
" " +
"" +
"" +
" ${foo}/mySrc" +
" ${foo}/myTestSrc" +
" ${foo}/myScriptSrc" +
" " +
" " +
" ${foo}/myRes" +
" " +
" " +
" aaa/${emptyProperty}/${unexistingProperty}" +
" " +
" " +
" " +
" " +
" ${foo}/myTestRes" +
" " +
" " +
" ${foo}/myOutput" +
" ${foo}/myClasses" +
" ${foo}/myTestClasses" +
"");
MavenModel p = readProject(myProjectPom);
assertSize(1, p.getBuild().getSources());
PlatformTestUtil.assertPathsEqual(pathFromBasedir("subDir/mySrc"), p.getBuild().getSources().get(0));
assertSize(1, p.getBuild().getTestSources());
PlatformTestUtil.assertPathsEqual(pathFromBasedir("subDir/myTestSrc"), p.getBuild().getTestSources().get(0));
assertEquals(2, p.getBuild().getResources().size());
assertResource(p.getBuild().getResources().get(0), pathFromBasedir("subDir/myRes"),
false, null, Collections.emptyList(), Collections.emptyList());
assertResource(p.getBuild().getResources().get(1), pathFromBasedir("aaa/${unexistingProperty}"),
false, null, Collections.emptyList(), Collections.emptyList());
assertEquals(1, p.getBuild().getTestResources().size());
assertResource(p.getBuild().getTestResources().get(0), pathFromBasedir("subDir/myTestRes"),
false, null, Collections.emptyList(), Collections.emptyList());
PlatformTestUtil.assertPathsEqual(pathFromBasedir("subDir/myOutput"), p.getBuild().getDirectory());
PlatformTestUtil.assertPathsEqual(pathFromBasedir("subDir/myClasses"), p.getBuild().getOutputDirectory());
PlatformTestUtil.assertPathsEqual(pathFromBasedir("subDir/myTestClasses"), p.getBuild().getTestOutputDirectory());
}
public void testExpandingProperties() throws Exception {
createProjectPom("" +
" value1" +
" value2" +
"" +
"${prop1}" +
"${prop2}");
MavenModel p = readProject(myProjectPom);
assertEquals("value1", p.getName());
assertEquals("value2", p.getPackaging());
}
public void testExpandingPropertiesRecursively() throws Exception {
createProjectPom("" +
" value1" +
" ${prop1}2" +
"" +
"${prop1}" +
"${prop2}");
MavenModel p = readProject(myProjectPom);
assertEquals("value1", p.getName());
assertEquals("value12", p.getPackaging());
}
public void testHandlingRecursiveProperties() throws Exception {
createProjectPom("" +
" ${prop2}" +
" ${prop1}" +
"" +
"${prop1}" +
"${prop2}");
MavenModel p = readProject(myProjectPom);
assertEquals("${prop1}", p.getName());
assertEquals("${prop2}", p.getPackaging());
}
public void testHandlingRecursionProprielyAndDoNotForgetCoClearRecursionGuard() throws Exception {
File repositoryPath = new File(myDir, "repository");
setRepositoryPath(repositoryPath.getPath());
File parentFile = new File(repositoryPath, "test/parent/1/parent-1.pom");
parentFile.getParentFile().mkdirs();
FileUtil.writeToFile(parentFile, createPomXml("test" +
"parent" +
"1").getBytes());
createProjectPom("test" +
"not-a-project" +
"1" +
"" +
" test" +
" parent" +
" 1" +
"");
VirtualFile child = createModulePom("child",
"test" +
"child" +
"1" +
"" +
" test" +
" parent" +
" 1" +
"");
MavenProjectReaderResult readResult = readProject(child, new NullProjectLocator());
assertProblems(readResult);
}
public void testDoNotGoIntoRecursionWhenTryingToResolveParentInDefaultPath() throws Exception {
VirtualFile child = createModulePom("child",
"test" +
"child" +
"1" +
"" +
" test" +
" parent" +
" 1" +
"");
createProjectPom("test" +
"subChild" +
"1" +
"" +
" test" +
" child" +
" 1" +
" child/pom.xml" +
"");
MavenProjectReaderResult readResult = readProject(child, new NullProjectLocator());
assertProblems(readResult);
}
public void testExpandingSystemAndEnvProperties() throws Exception {
createProjectPom("${java.home}" +
"${env." + getEnvVar() + "}");
MavenModel p = readProject(myProjectPom);
assertEquals(System.getProperty("java.home"), p.getName());
assertEquals(System.getenv(getEnvVar()), p.getPackaging());
}
public void testExpandingPropertiesFromProfiles() throws Exception {
createProjectPom("${prop1}" +
"${prop2}" +
"" +
" " +
" one" +
" " +
" true" +
" " +
" " +
" value1" +
" " +
" " +
" " +
" two" +
" " +
" value2" +
" " +
" " +
"");
MavenModel p = readProject(myProjectPom);
assertEquals("value1", p.getName());
assertEquals("${prop2}", p.getPackaging());
}
public void testExpandingPropertiesFromManuallyActivatedProfiles() throws Exception {
createProjectPom("${prop1}" +
"${prop2}" +
"" +
" " +
" one" +
" " +
" true" +
" " +
" " +
" value1" +
" " +
" " +
" " +
" two" +
" " +
" value2" +
" " +
" " +
"");
MavenModel p = readProject(myProjectPom, "two");
assertEquals("${prop1}", p.getName());
assertEquals("value2", p.getPackaging());
}
public void testExpandingPropertiesFromParent() throws Exception {
createProjectPom("test" +
"parent" +
"1" +
"" +
" value" +
"");
VirtualFile module = createModulePom("module",
"" +
" test" +
" parent" +
" 1" +
"" +
"${prop}");
MavenModel p = readProject(module);
assertEquals("value", p.getName());
}
public void testDoNotExpandPropertiesFromParentWithWrongCoordinates() throws Exception {
createProjectPom("test" +
"parent" +
"1" +
"" +
" value" +
"");
VirtualFile module = createModulePom("module",
"" +
" test" +
" invalid" +
" 1" +
"" +
"${prop}");
MavenModel p = readProject(module);
assertEquals("${prop}", p.getName());
}
public void testExpandingPropertiesFromParentNotInVfs() throws Exception {
FileUtil.writeToFile(new File(myProjectRoot.getPath(), "pom.xml"),
createPomXml("test" +
"parent" +
"1" +
"" +
" value" +
"").getBytes());
VirtualFile module = createModulePom("module",
"" +
" test" +
" parent" +
" 1" +
"" +
"${prop}");
MavenModel p = readProject(module);
assertEquals("value", p.getName());
}
public void testExpandingPropertiesFromIndirectParent() throws Exception {
createProjectPom("test" +
"parent" +
"1" +
"" +
" value" +
"");
createModulePom("module",
"test" +
"module" +
"1" +
"" +
" test" +
" parent" +
" 1" +
"");
VirtualFile subModule = createModulePom("module/subModule",
"" +
" test" +
" module" +
" 1" +
"" +
"${prop}");
MavenModel p = readProject(subModule);
assertEquals("value", p.getName());
}
public void testExpandingPropertiesFromParentInSpecifiedLocation() throws Exception {
createModulePom("parent",
"test" +
"parent" +
"1" +
"" +
" value" +
"");
VirtualFile module = createModulePom("module",
"" +
" test" +
" parent" +
" 1" +
" ../parent/pom.xml" +
"" +
"${prop}");
MavenModel p = readProject(module);
assertEquals("value", p.getName());
}
public void testExpandingPropertiesFromParentInSpecifiedLocationWithoutFile() throws Exception {
createModulePom("parent",
"test" +
"parent" +
"1" +
"" +
" value" +
"");
VirtualFile module = createModulePom("module",
"" +
" test" +
" parent" +
" 1" +
" ../parent" +
"" +
"${prop}");
MavenModel p = readProject(module);
assertEquals("value", p.getName());
}
public void testExpandingPropertiesFromParentInRepository() throws Exception {
File repositoryPath = new File(myDir, "repository");
setRepositoryPath(repositoryPath.getPath());
File parentFile = new File(repositoryPath, "org/test/parent/1/parent-1.pom");
parentFile.getParentFile().mkdirs();
FileUtil.writeToFile(parentFile,
createPomXml("org.test" +
"parent" +
"1" +
"" +
" value" +
"").getBytes());
createProjectPom("" +
" org.test" +
" parent" +
" 1" +
"" +
"${prop}");
MavenModel p = readProject(myProjectPom);
assertEquals("value", p.getName());
}
public void testExpandingPropertiesFromParentInInvalidLocation() throws Exception {
final VirtualFile parent = createModulePom("parent",
"test" +
"parent" +
"1" +
"" +
" value" +
"");
VirtualFile module = createModulePom("module",
"" +
" test" +
" parent" +
" 1" +
"" +
"${prop}");
MavenModel p = readProject(module, new MavenProjectReaderProjectLocator() {
@Override
public VirtualFile findProjectFile(MavenId coordinates) {
return new MavenId("test", "parent", "1").equals(coordinates) ? parent : null;
}
}).mavenModel;
assertEquals("value", p.getName());
}
public void testPropertiesFromParentInParentSection() throws Exception {
createProjectPom("${groupProp}" +
"parent" +
"${versionProp}" +
"" +
" test" +
" 1" +
"");
VirtualFile module = createModulePom("module",
"" +
" ${groupProp}" +
" parent" +
" ${versionProp}" +
"" +
"module");
MavenId id = readProject(module).getMavenId();
assertEquals("test:module:1", id.getGroupId() + ":" + id.getArtifactId() + ":" + id.getVersion());
}
public void testInheritingSettingsFromParentAndAlignCorrectly() throws Exception {
createProjectPom("test" +
"parent" +
"1" +
"" +
" custom" +
"");
VirtualFile module = createModulePom("module",
"" +
" test" +
" parent" +
" 1" +
"");
MavenModel p = readProject(module);
PlatformTestUtil.assertPathsEqual(pathFromBasedir(module.getParent(), "custom"), p.getBuild().getDirectory());
}
public void testExpandingPropertiesAfterInheritingSettingsFromParent() throws Exception {
createProjectPom("test" +
"parent" +
"1" +
"" +
" subDir" +
"" +
"" +
" ${basedir}/${prop}/custom" +
"");
VirtualFile module = createModulePom("module",
"" +
" test" +
" parent" +
" 1" +
"");
MavenModel p = readProject(module);
PlatformTestUtil.assertPathsEqual(pathFromBasedir(module.getParent(), "subDir/custom"), p.getBuild().getDirectory());
}
public void testExpandingPropertiesAfterInheritingSettingsFromParentProfiles() throws Exception {
createProjectPom("test" +
"parent" +
"1" +
"" +
" " +
" one" +
" " +
" subDir" +
" " +
" " +
" ${basedir}/${prop}/custom" +
" " +
" " +
"");
VirtualFile module = createModulePom("module",
"" +
" test" +
" parent" +
" 1" +
"");
MavenModel p = readProject(module, "one");
PlatformTestUtil.assertPathsEqual(pathFromBasedir(module.getParent(), "subDir/custom"), p.getBuild().getDirectory());
}
public void testPropertiesFromProfilesXmlOldStyle() throws Exception {
createProjectPom("${prop}");
createProfilesXmlOldStyle("" +
" one" +
" " +
" foo" +
" " +
"");
MavenModel mavenProject = readProject(myProjectPom);
assertEquals("${prop}", mavenProject.getName());
mavenProject = readProject(myProjectPom, "one");
assertEquals("foo", mavenProject.getName());
}
public void testPropertiesFromProfilesXmlNewStyle() throws Exception {
createProjectPom("${prop}");
createProfilesXml("" +
" one" +
" " +
" foo" +
" " +
"");
MavenModel mavenProject = readProject(myProjectPom);
assertEquals("${prop}", mavenProject.getName());
mavenProject = readProject(myProjectPom, "one");
assertEquals("foo", mavenProject.getName());
}
public void testPropertiesFromSettingsXml() throws Exception {
createProjectPom("${prop}");
updateSettingsXml("" +
" " +
" one" +
" " +
" foo" +
" " +
" " +
"");
MavenModel mavenProject = readProject(myProjectPom);
assertEquals("${prop}", mavenProject.getName());
mavenProject = readProject(myProjectPom, "one");
assertEquals("foo", mavenProject.getName());
}
public void testDoNoInheritParentFinalNameIfUnspecified() throws Exception {
createProjectPom("test" +
"parent" +
"1");
VirtualFile module = createModulePom("module",
"test" +
"module" +
"2" +
"" +
" test" +
" parent" +
" 1" +
"");
MavenModel p = readProject(module, "one");
assertEquals("module-2", p.getBuild().getFinalName());
}
public void testDoInheritingParentFinalNameIfSpecified() throws Exception {
createProjectPom("test" +
"parent" +
"1" +
"" +
" xxx" +
"");
VirtualFile module = createModulePom("module",
"test" +
"module" +
"2" +
"" +
" test" +
" parent" +
" 1" +
"");
MavenModel p = readProject(module, "one");
assertEquals("xxx", p.getBuild().getFinalName());
}
public void testInheritingParentProfiles() throws Exception {
createProjectPom("test" +
"parent" +
"1" +
"" +
" " +
" profileFromParent" +
" " +
"");
VirtualFile module = createModulePom("module",
"test" +
"module" +
"1" +
"" +
" test" +
" parent" +
" 1" +
"" +
"" +
" " +
" profileFromChild" +
" " +
"");
MavenModel p = readProject(module);
assertOrderedElementsAreEqual(ContainerUtil.map(p.getProfiles(), new Function() {
@Override
public Object fun(MavenProfile profile) {
return profile.getId();
}
}), "profileFromChild", "profileFromParent");
}
public void testCorrectlyCollectProfilesFromDifferentSources() throws Exception {
createProjectPom("test" +
"parent" +
"1" +
"" +
" " +
" profile" +
" parent" +
" " +
"");
final VirtualFile parentProfiles = createProfilesXml("" +
" profile" +
" parentProfiles" +
"");
VirtualFile module = createModulePom("module",
"test" +
"module" +
"1" +
"" +
" test" +
" parent" +
" 1" +
"" +
"" +
" " +
" profile" +
" pom" +
" " +
"");
updateSettingsXml("" +
" " +
" profile" +
" settings" +
" " +
"");
final VirtualFile profiles = createProfilesXml("module",
"" +
" profile" +
" profiles" +
"");
MavenModel p = readProject(module);
assertEquals(1, p.getProfiles().size());
assertEquals("pom", p.getProfiles().get(0).getModules().get(0));
assertEquals("pom", p.getProfiles().get(0).getSource());
createModulePom("module",
"test" +
"module" +
"1" +
"" +
" test" +
" parent" +
" 1" +
"");
p = readProject(module);
assertEquals(1, p.getProfiles().size());
assertEquals("profiles", p.getProfiles().get(0).getModules().get(0));
assertEquals("profiles.xml", p.getProfiles().get(0).getSource());
new WriteCommandAction.Simple(myProject) {
@Override
protected void run() throws Throwable {
profiles.delete(this);
}
}.execute().throwException();
p = readProject(module);
assertEquals(1, p.getProfiles().size());
assertEmpty("parent", p.getProfiles().get(0).getModules());
assertEquals("pom", p.getProfiles().get(0).getSource());
createProjectPom("test" +
"parent" +
"1");
p = readProject(module);
assertEquals(1, p.getProfiles().size());
assertEmpty("parentProfiles", p.getProfiles().get(0).getModules());
assertEquals("profiles.xml", p.getProfiles().get(0).getSource());
new WriteCommandAction.Simple(myProject) {
@Override
protected void run() throws Throwable {
parentProfiles.delete(null);
}
}.execute().throwException();
p = readProject(module);
assertEquals(1, p.getProfiles().size());
assertEmpty("settings", p.getProfiles().get(0).getModules());
assertEquals("settings.xml", p.getProfiles().get(0).getSource());
}
public void testModulesAreNotInheritedFromParentsProfiles() throws Exception {
VirtualFile p = createProjectPom("test" +
"project" +
"1" +
"pom" +
"" +
" " +
" one" +
" " +
" m" +
" " +
" " +
"");
VirtualFile m = createModulePom("m", "test" +
"m" +
"1" +
"" +
" test" +
" project" +
" 1" +
"");
assertSize(1, readProject(p, "one").getModules());
assertSize(0, readProject(m, "one").getModules());
}
public void testActivatingProfilesByDefault() throws Exception {
createProjectPom("" +
" " +
" one" +
" " +
" true" +
" " +
" " +
" " +
" two" +
" " +
" false" +
" " +
" " +
"");
assertActiveProfiles("one");
}
public void testActivatingProfilesAfterResolvingInheritance() throws Exception {
createModulePom("parent",
"test" +
"parent" +
"1");
createProjectPom("" +
" test" +
" parent" +
" 1" +
" parent/pom.xml" +
"" +
"" +
" " +
" one" +
" " +
" true" +
" " +
" " +
"");
assertActiveProfiles("one");
}
public void testActivatingProfilesByOS() throws Exception {
String os = SystemInfo.isWindows ? "windows" : SystemInfo.isMac ? "mac" : "unix";
createProjectPom("" +
" " +
" one" +
" " +
" " + os + "" +
" " +
" " +
" " +
" two" +
" " +
" xxx" +
" " +
" " +
"");
assertActiveProfiles("one");
}
public void testActivatingProfilesByJdk() throws Exception {
createProjectPom("" +
" " +
" one" +
" " +
" [1.5,)" +
" " +
" " +
" " +
" two" +
" " +
" (,1.5)" +
" " +
" " +
"");
assertActiveProfiles("one");
}
public void testActivatingProfilesByStrictJdkVersion() throws Exception {
createProjectPom("" +
" " +
" one" +
" " +
" 1.4" +
" " +
" " +
"");
assertActiveProfiles();
}
public void testActivatingProfilesByProperty() throws Exception {
createProjectPom("" +
" " +
" one" +
" " +
" " +
" os.name" +
" " + System.getProperty("os.name") + "" +
" " +
" " +
" " +
" " +
" two" +
" " +
" " +
" os.name" +
" xxx" +
" " +
" " +
" " +
"");
assertActiveProfiles("one");
}
public void testActivatingProfilesByEnvProperty() throws Exception {
String value = System.getenv(getEnvVar());
createProjectPom("" +
" " +
" one" +
" " +
" " +
" env." + getEnvVar() + "" +
" " + value + "" +
" " +
" " +
" " +
" " +
" two" +
" " +
" " +
" ffffff" +
" ffffff" +
" " +
" " +
" " +
"");
assertActiveProfiles("one");
}
public void testActivatingProfilesByFile() throws Exception {
createProjectSubFile("dir/file.txt");
createProjectPom("" +
" " +
" one" +
" " +
" " +
" ${basedir}/dir/file.txt" +
" " +
" " +
" " +
" " +
" two" +
" " +
" " +
" ${basedir}/dir/file.txt" +
" " +
" " +
" " +
"");
assertActiveProfiles("one");
}
public void testActivateDefaultProfileEventIfThereAreExplicitOnesButAbsent() throws Exception {
createProjectPom("" +
" " +
" default" +
" " +
" true" +
" " +
" " +
" " +
" explicit" +
" " +
"");
assertActiveProfiles(Arrays.asList("foofoofoo"), "default");
}
public void testDoNotActivateDefaultProfileIfThereAreActivatedImplicit() throws Exception {
createProjectPom("" +
" " +
" default" +
" " +
" true" +
" " +
" " +
" " +
" implicit" +
" " +
" [1.5,)" +
" " +
" " +
"");
assertActiveProfiles("implicit");
}
public void testActivatingImplicitProfilesEventWhenThereAreExplicitOnes() throws Exception {
createProjectPom("" +
" " +
" explicit" +
" " +
" " +
" implicit" +
" " +
" [1.5,)" +
" " +
" " +
"");
assertActiveProfiles(Arrays.asList("explicit"), "explicit", "implicit");
}
public void testAlwaysActivatingActiveProfilesInSettingsXml() throws Exception {
updateSettingsXml("" +
" settings" +
"");
createProjectPom("" +
" " +
" explicit" +
" " +
" " +
" settings" +
" " +
"");
assertActiveProfiles("settings");
assertActiveProfiles(Arrays.asList("explicit"), "explicit", "settings");
}
public void testAlwaysActivatingActiveProfilesInProfilesXml() throws Exception {
createFullProfilesXml("" +
"" +
" " +
" profiles" +
" " +
"");
createProjectPom("" +
" " +
" explicit" +
" " +
" " +
" profiles" +
" " +
"");
assertActiveProfiles("profiles");
assertActiveProfiles(Arrays.asList("explicit"), "explicit", "profiles");
}
public void testActivatingBothActiveProfilesInSettingsXmlAndImplicitProfiles() throws Exception {
updateSettingsXml("" +
" settings" +
"");
createProjectPom("" +
" " +
" implicit" +
" " +
" [1.5,)" +
" " +
" " +
" " +
" settings" +
" " +
"");
assertActiveProfiles("settings", "implicit");
}
public void testDoNotActivateDefaultProfilesWhenThereAreAlwaysOnProfilesInPomXml() throws Exception {
updateSettingsXml("" +
" settings" +
"");
createProjectPom("" +
" " +
" default" +
" " +
" true" +
" " +
" " +
" " +
" settings" +
" " +
"");
assertActiveProfiles("settings");
}
public void testActivateDefaultProfilesWhenThereAreActiveProfilesInSettingsXml() throws Exception {
updateSettingsXml("" +
" " +
" settings" +
" " +
"" +
"" +
" settings" +
"");
createProjectPom("" +
" " +
" default" +
" " +
" true" +
" " +
" " +
"");
assertActiveProfiles("default", "settings");
}
public void testActivateDefaultProfilesWhenThereAreActiveProfilesInProfilesXml() throws Exception {
createFullProfilesXml("" +
"" +
" " +
" " +
" profiles" +
" " +
" " +
" " +
" profiles" +
" " +
"");
createProjectPom("" +
" " +
" default" +
" " +
" true" +
" " +
" " +
"");
assertActiveProfiles("default", "profiles");
}
public void testActiveProfilesInSettingsXmlOrProfilesXmlThroughInheritance() throws Exception {
updateSettingsXml("" +
" settings" +
"");
createFullProfilesXml("parent",
"" +
"" +
" " +
" parent" +
" " +
"");
createModulePom("parent",
"test" +
"parent" +
"1");
createFullProfilesXml("" +
"" +
" " +
" project" +
" " +
"");
createProjectPom("" +
" test" +
" parent" +
" 1" +
" parent/pom.xml" +
"" +
"" +
" " +
" project" +
" " +
" " +
" parent" +
" " +
" " +
" settings" +
" " +
"");
assertActiveProfiles("project", "settings");
}
private MavenModel readProject(VirtualFile file, String... profiles) {
MavenProjectReaderResult readResult = readProject(file, new NullProjectLocator(), profiles);
assertProblems(readResult);
return readResult.mavenModel;
}
private MavenProjectReaderResult readProject(VirtualFile file,
MavenProjectReaderProjectLocator locator,
String... profiles) {
MavenProjectReaderResult result = new MavenProjectReader().readProject(getMavenGeneralSettings(),
file,
new MavenExplicitProfiles(Arrays.asList(profiles)),
locator);
return result;
}
private static void assertParent(MavenModel p,
String groupId,
String artifactId,
String version) {
MavenId parent = p.getParent().getMavenId();
assertEquals(groupId, parent.getGroupId());
assertEquals(artifactId, parent.getArtifactId());
assertEquals(version, parent.getVersion());
}
private static void assertResource(MavenResource resource,
String dir,
boolean filtered,
String targetPath,
List includes,
List excludes) {
PlatformTestUtil.assertPathsEqual(dir, resource.getDirectory());
assertEquals(filtered, resource.isFiltered());
PlatformTestUtil.assertPathsEqual(targetPath, resource.getTargetPath());
assertOrderedElementsAreEqual(resource.getIncludes(), includes);
assertOrderedElementsAreEqual(resource.getExcludes(), excludes);
}
private static void assertProblems(MavenProjectReaderResult readerResult, String... expectedProblems) {
List actualProblems = new ArrayList();
for (MavenProjectProblem each : readerResult.readingProblems) {
actualProblems.add(each.getDescription());
}
assertOrderedElementsAreEqual(actualProblems, expectedProblems);
}
private void assertActiveProfiles(String... expected) {
assertActiveProfiles(Collections.emptyList(), expected);
}
private void assertActiveProfiles(List explicitProfiles, String... expected) {
MavenProjectReaderResult result =
readProject(myProjectPom, new NullProjectLocator(), ArrayUtil.toStringArray(explicitProfiles));
assertUnorderedElementsAreEqual(result.activatedProfiles.getEnabledProfiles(), expected);
}
private static class NullProjectLocator implements MavenProjectReaderProjectLocator {
@Override
public VirtualFile findProjectFile(MavenId coordinates) {
return null;
}
}
}