blob: cdcb6a40e02da0e684623379a16990a154ec07e1 [file] [log] [blame]
/*
* 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.util;
import com.android.SdkConstants;
import com.android.tools.idea.gradle.IdeaGradleProject;
import com.android.tools.idea.gradle.facet.AndroidGradleFacet;
import com.intellij.facet.FacetManager;
import com.intellij.facet.ModifiableFacetModel;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.io.FileUtilRt;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.testFramework.IdeaTestCase;
import org.gradle.tooling.model.DomainObjectSet;
import org.gradle.tooling.model.GradleProject;
import org.gradle.tooling.model.GradleTask;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.io.IOException;
import java.util.Properties;
import static com.android.SdkConstants.FD_GRADLE_WRAPPER;
import static com.android.SdkConstants.FN_GRADLE_WRAPPER_PROPERTIES;
import static org.easymock.EasyMock.*;
import static org.gradle.wrapper.WrapperExecutor.DISTRIBUTION_URL_PROPERTY;
/**
* Tests for {@link GradleUtil}.
*/
public class GradleUtilIdeaTest extends IdeaTestCase {
private File myModuleRootDir;
private File myBuildFile;
@Override
protected void setUp() throws Exception {
super.setUp();
File moduleFilePath = new File(myModule.getModuleFilePath());
myModuleRootDir = moduleFilePath.getParentFile();
myBuildFile = new File(myModuleRootDir, SdkConstants.FN_BUILD_GRADLE);
FileUtilRt.createIfNotExists(myBuildFile);
}
public void testGetGradleBuildFileFromRootDir() {
VirtualFile buildFile = GradleUtil.getGradleBuildFile(myModuleRootDir);
assertIsGradleBuildFile(buildFile);
}
public void testGetGradleBuildFileFromModuleWithoutGradleFacet() {
VirtualFile buildFile = GradleUtil.getGradleBuildFile(myModule);
assertIsGradleBuildFile(buildFile);
}
public void testGetGradleBuildFileFromModuleWithGradleFacet() {
GradleProject project = createMock(GradleProject.class);
expect(project.getPath()).andReturn(myModule.getName());
//noinspection unchecked
DomainObjectSet<? extends GradleTask> tasks = createMock(DomainObjectSet.class);
project.getTasks();
expectLastCall().andReturn(tasks);
expect(tasks.isEmpty()).andReturn(true);
replay(project, tasks);
IdeaGradleProject gradleProject = IdeaGradleProject.newIdeaGradleProject(myModule.getName(), project, myBuildFile, "2.2.1");
FacetManager facetManager = FacetManager.getInstance(myModule);
ModifiableFacetModel model = facetManager.createModifiableModel();
try {
AndroidGradleFacet facet = facetManager.createFacet(AndroidGradleFacet.getFacetType(), AndroidGradleFacet.NAME, null);
model.addFacet(facet);
facet.setGradleProject(gradleProject);
}
finally {
model.commit();
}
VirtualFile buildFile = GradleUtil.getGradleBuildFile(myModule);
assertIsGradleBuildFile(buildFile);
verify(project, tasks);
}
private static void assertIsGradleBuildFile(@Nullable VirtualFile buildFile) {
assertNotNull(buildFile);
assertFalse(buildFile.isDirectory());
assertTrue(buildFile.isValid());
assertEquals(SdkConstants.FN_BUILD_GRADLE, buildFile.getName());
}
public void testCreateGradleWrapperWithSpecificGradleVersion() throws IOException {
File projectDirPath = new File(myProject.getBasePath());
File projectWrapperDirPath = new File(projectDirPath, FD_GRADLE_WRAPPER);
assertFalse(projectWrapperDirPath.exists());
String gradleVersion = "1.5";
boolean created = GradleUtil.createGradleWrapper(projectDirPath, gradleVersion);
assertTrue(created);
assertGradleWrapperCreated(projectWrapperDirPath, gradleVersion);
}
public void testCreateGradleWrapperWithoutSpecificGradleVersion() throws IOException {
File projectDirPath = new File(myProject.getBasePath());
File projectWrapperDirPath = new File(projectDirPath, FD_GRADLE_WRAPPER);
assertFalse(projectWrapperDirPath.exists());
boolean created = GradleUtil.createGradleWrapper(projectDirPath);
assertTrue(created);
assertGradleWrapperCreated(projectWrapperDirPath, SdkConstants.GRADLE_LATEST_VERSION);
}
private static void assertGradleWrapperCreated(@NotNull File projectWrapperDirPath, @NotNull String gradleVersion) throws IOException {
assertTrue(projectWrapperDirPath.isDirectory());
File[] wrapperFiles = FileUtil.notNullize(projectWrapperDirPath.listFiles());
assertEquals(2, wrapperFiles.length);
Properties gradleProperties = PropertiesUtil.getProperties(new File(projectWrapperDirPath, FN_GRADLE_WRAPPER_PROPERTIES));
String distributionUrl = gradleProperties.getProperty(DISTRIBUTION_URL_PROPERTY);
assertEquals("https://services.gradle.org/distributions/gradle-" + gradleVersion + "-all.zip", distributionUrl);
}
}