/*
* Copyright (C) 2013 The Android Open Source Project
*
* 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 com.android.tools.idea.gradle.compiler;
import com.android.tools.idea.AndroidTestCaseHelper;
import com.android.tools.idea.gradle.project.BuildSettings;
import com.android.tools.idea.gradle.util.BuildMode;
import com.android.tools.idea.gradle.util.GradleBuilds;
import com.android.tools.idea.sdk.DefaultSdks;
import com.google.common.collect.Lists;
import com.intellij.openapi.externalSystem.util.DisposeAwareProjectChange;
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.util.KeyValue;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.testFramework.IdeaTestCase;
import org.jetbrains.plugins.gradle.settings.GradleExecutionSettings;
import org.jetbrains.plugins.gradle.settings.GradleSettings;
import java.io.File;
import java.util.List;
import static org.easymock.classextension.EasyMock.*;
/**
* Tests for {@link AndroidGradleBuildProcessParametersProvider}.
*/
public class AndroidGradleBuildProcessParametersProviderTest extends IdeaTestCase {
private AndroidGradleBuildProcessParametersProvider myParametersProvider;
private Sdk myJdk;
@Override
public void setUp() throws Exception {
super.setUp();
myJdk = AndroidTestCaseHelper.createAndSetJdk(myProject);
myParametersProvider = new AndroidGradleBuildProcessParametersProvider(myProject);
}
public void testPopulateJvmArgsWithGradleExecutionSettings() {
ExternalSystemApiUtil.executeProjectChangeAction(true, new DisposeAwareProjectChange(myProject) {
@Override
public void execute() {
String jdkHome = myJdk.getHomePath();
assertNotNull(jdkHome);
File jdkHomePath = new File(FileUtil.toSystemDependentName(jdkHome));
DefaultSdks.setDefaultJavaHome(jdkHomePath);
}
});
GradleExecutionSettings settings = createMock(GradleExecutionSettings.class);
expect(settings.getGradleHome()).andReturn("~/gradle-1.6");
expect(settings.isVerboseProcessing()).andReturn(true);
expect(settings.getServiceDirectory()).andReturn("~./gradle");
expect(settings.getDaemonVmOptions()).andReturn("-Xmx2048m -XX:MaxPermSize=512m");
replay(settings);
List<String> jvmArgs = Lists.newArrayList();
myParametersProvider.populateJvmArgs(settings, jvmArgs);
verify(settings);
String projectDirPath = FileUtil.toSystemDependentName(myProject.getBasePath());
assertTrue(jvmArgs.contains("-Dcom.android.studio.gradle.project.path=" + projectDirPath));
assertTrue(jvmArgs.contains("-Dcom.android.studio.gradle.home.path=~" + File.separatorChar + "gradle-1.6"));
assertTrue(jvmArgs.contains("-Dcom.android.studio.gradle.use.verbose.logging=true"));
assertTrue(jvmArgs.contains("-Dcom.android.studio.gradle.service.dir.path=~." + File.separatorChar + "gradle"));
assertTrue(jvmArgs.contains("-Dcom.android.studio.gradle.daemon.jvm.option.0=-Xmx2048m"));
assertTrue(jvmArgs.contains("-Dcom.android.studio.gradle.daemon.jvm.option.1=-XX:MaxPermSize=512m"));
String javaHomeDirPath = myJdk.getHomePath();
assertNotNull(javaHomeDirPath);
javaHomeDirPath = FileUtil.toSystemDependentName(javaHomeDirPath);
assertTrue(jvmArgs.contains("-Dcom.android.studio.gradle.java.home.path=" + javaHomeDirPath));
}
public void testPopulateHttpProxyProperties() {
List<KeyValue<String, String>> properties = Lists.newArrayList();
properties.add(KeyValue.create("http.proxyHost", "proxy.android.com"));
properties.add(KeyValue.create("http.proxyPort", "8080"));
List<String> jvmArgs = Lists.newArrayList();
AndroidGradleBuildProcessParametersProvider.populateHttpProxyProperties(jvmArgs, properties);
assertEquals(2, jvmArgs.size());
assertTrue(jvmArgs.contains("-Dcom.android.studio.gradle.proxy.property.0=http.proxyHost:proxy.android.com"));
assertTrue(jvmArgs.contains("-Dcom.android.studio.gradle.proxy.property.1=http.proxyPort:8080"));
}
public void testPopulateGradleTasksToInvokeWithAssembleTranslate() {
BuildSettings.getInstance(myProject).setModulesToBuild(new Module[] {myModule});
List<String> jvmArgs = Lists.newArrayList();
myParametersProvider.populateGradleTasksToInvoke(BuildMode.ASSEMBLE_TRANSLATE, jvmArgs);
assertEquals(1, jvmArgs.size());
assertEquals("-Dcom.android.studio.gradle.gradle.tasks.0=" + GradleBuilds.ASSEMBLE_TRANSLATE_TASK_NAME, jvmArgs.get(0));
}
public void testPopulateJvmArgsWithBuildConfiguration() {
AndroidGradleBuildConfiguration configuration = new AndroidGradleBuildConfiguration();
configuration.COMMAND_LINE_OPTIONS = "--stacktrace --offline";
GradleSettings.getInstance(myProject).setOfflineWork(true);
List<String> jvmArgs = Lists.newArrayList();
AndroidGradleBuildProcessParametersProvider.populateJvmArgs(configuration, jvmArgs, myProject);
assertEquals(4, jvmArgs.size());
assertEquals("-Dcom.android.studio.gradle.offline.mode=true", jvmArgs.get(0));
assertEquals("-Dcom.android.studio.gradle.configuration.on.demand=true", jvmArgs.get(1));
assertEquals("-Dcom.android.studio.gradle.daemon.command.line.option.0=--stacktrace", jvmArgs.get(2));
assertEquals("-Dcom.android.studio.gradle.daemon.command.line.option.1=--offline", jvmArgs.get(3));
}
}