/* * 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.jps.ant; import com.intellij.lang.ant.config.impl.BuildFileProperty; import com.intellij.openapi.application.ex.PathManagerEx; import com.intellij.openapi.util.io.FileUtil; import com.intellij.testFramework.PlatformTestUtil; import com.intellij.util.SystemProperties; import gnu.trove.THashSet; import org.jetbrains.jps.ant.model.JpsAntBuildFileOptions; import org.jetbrains.jps.ant.model.JpsAntExtensionService; import org.jetbrains.jps.ant.model.JpsAntInstallation; import org.jetbrains.jps.ant.model.artifacts.JpsAntArtifactExtension; import org.jetbrains.jps.ant.model.impl.artifacts.JpsAntArtifactExtensionImpl; import org.jetbrains.jps.model.artifact.JpsArtifact; import org.jetbrains.jps.model.artifact.JpsArtifactService; import org.jetbrains.jps.model.serialization.JpsSerializationTestCase; import org.jetbrains.jps.model.serialization.PathMacroUtil; import java.io.File; import java.util.List; import java.util.Map; import java.util.Set; /** * @author nik */ public class JpsAntSerializationTest extends JpsSerializationTestCase { public static final String PROJECT_PATH = "plugins/ant/jps-plugin/testData/ant-project"; public static final String OPTIONS_PATH = "plugins/ant/jps-plugin/testData/config/options"; public void testLoadArtifactProperties() { loadProject(PROJECT_PATH); List<JpsArtifact> artifacts = JpsArtifactService.getInstance().getSortedArtifacts(myProject); assertEquals(2, artifacts.size()); JpsArtifact dir = artifacts.get(0); assertEquals("dir", dir.getName()); JpsAntArtifactExtension preprocessing = JpsAntExtensionService.getPreprocessingExtension(dir); assertNotNull(preprocessing); assertTrue(preprocessing.isEnabled()); assertEquals(getUrl("build.xml"), preprocessing.getFileUrl()); assertEquals("show-message", preprocessing.getTargetName()); assertEquals(JpsAntArtifactExtensionImpl.ARTIFACT_OUTPUT_PATH_PROPERTY, assertOneElement(preprocessing.getAntProperties()).getPropertyName()); JpsAntArtifactExtension postprocessing = JpsAntExtensionService.getPostprocessingExtension(dir); assertNotNull(postprocessing); assertEquals(getUrl("build.xml"), postprocessing.getFileUrl()); assertEquals("create-file", postprocessing.getTargetName()); List<BuildFileProperty> properties = postprocessing.getAntProperties(); assertEquals(2, properties.size()); assertEquals(JpsAntArtifactExtensionImpl.ARTIFACT_OUTPUT_PATH_PROPERTY, properties.get(0).getPropertyName()); assertEquals(dir.getOutputPath(), properties.get(0).getPropertyValue()); assertEquals("message.text", properties.get(1).getPropertyName()); assertEquals("post", properties.get(1).getPropertyValue()); JpsArtifact jar = artifacts.get(1); assertEquals("jar", jar.getName()); assertNull(JpsAntExtensionService.getPostprocessingExtension(jar)); assertNull(JpsAntExtensionService.getPreprocessingExtension(jar)); } public void testLoadAntInstallations() { loadGlobalSettings(OPTIONS_PATH); JpsAntInstallation installation = JpsAntExtensionService.findAntInstallation(myModel, "Apache Ant version 1.8.2"); assertNotNull(installation); assertEquals(FileUtil.toSystemIndependentName(installation.getAntHome().getAbsolutePath()), FileUtil.toSystemIndependentName(new File(SystemProperties.getUserHome(), "applications/apache-ant-1.8.2").getAbsolutePath())); JpsAntInstallation installation2 = JpsAntExtensionService.findAntInstallation(myModel, "Patched Ant"); assertNotNull(installation2); assertContainsElements(toFiles(installation2.getClasspath()), PathManagerEx.findFileUnderCommunityHome("lib/ant/lib/ant.jar"), PathManagerEx.findFileUnderCommunityHome("lib/trove4j.jar"), PathManagerEx.findFileUnderCommunityHome("lib/dev/easymock-3.4.jar")); } @Override protected Map<String, String> getPathVariables() { Map<String, String> pathVariables = super.getPathVariables(); pathVariables.put(PathMacroUtil.APPLICATION_HOME_DIR, PlatformTestUtil.getCommunityPath()); return pathVariables; } public void testLoadAntConfiguration() { loadProject(PROJECT_PATH); loadGlobalSettings(OPTIONS_PATH); String buildXmlUrl = getUrl("build.xml"); JpsAntBuildFileOptions options = JpsAntExtensionService.getOptions(myProject, buildXmlUrl); assertEquals(128, options.getMaxHeapSize()); assertEquals("-J-Dmy.ant.prop=123", options.getAntCommandLineParameters()); assertContainsElements(toFiles(options.getAdditionalClasspath()), new File(getAbsolutePath("lib/jdom.jar")), new File(getAbsolutePath("ant-lib/a.jar"))); BuildFileProperty property = assertOneElement(options.getProperties()); assertEquals("my.property", property.getPropertyName()); assertEquals("its value", property.getPropertyValue()); String emptyFileUrl = getUrl("empty.xml"); JpsAntBuildFileOptions options2 = JpsAntExtensionService.getOptions(myProject, emptyFileUrl); assertEquals(256, options2.getMaxHeapSize()); assertEquals(10, options2.getMaxStackSize()); assertEquals("1.6", options2.getCustomJdkName()); JpsAntInstallation bundled = JpsAntExtensionService.getAntInstallationForBuildFile(myModel, buildXmlUrl); assertNotNull(bundled); assertEquals("Bundled Ant", bundled.getName()); JpsAntInstallation installation = JpsAntExtensionService.getAntInstallationForBuildFile(myModel, emptyFileUrl); assertNotNull(installation); assertEquals("Apache Ant version 1.8.2", installation.getName()); } private static Set<File> toFiles(List<String> classpath) { Set<File> result = new THashSet<>(FileUtil.FILE_HASHING_STRATEGY); for (String path : classpath) { result.add(new File(path)); } return result; } }