blob: ad30324ac05d373a51a568fab330e00efd25e7b8 [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.sdklib.repository.FullRevision;
import com.android.tools.idea.gradle.eclipse.GradleImport;
import com.android.tools.idea.gradle.stubs.android.AndroidProjectStub;
import com.google.common.base.Charsets;
import com.google.common.collect.Lists;
import com.intellij.openapi.util.io.FileUtil;
import junit.framework.TestCase;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Properties;
import static com.android.SdkConstants.*;
import static com.android.tools.idea.gradle.util.PropertiesUtil.getProperties;
import static com.google.common.io.Files.createTempDir;
import static com.google.common.io.Files.write;
import static com.intellij.openapi.util.io.FileUtilRt.createIfNotExists;
/**
* Tests for {@link GradleUtil}.
*/
public class GradleUtilTest extends TestCase {
private File myTempDir;
@Override
protected void tearDown() throws Exception {
if (myTempDir != null) {
FileUtil.delete(myTempDir);
}
super.tearDown();
}
public void testGetGradleInvocationJvmArgWithNullBuildMode() {
assertNull(GradleUtil.getGradleInvocationJvmArg(null));
}
public void testGetGradleInvocationJvmArgWithAssembleTranslateBuildMode() {
assertEquals("-DenableTranslation=true", GradleUtil.getGradleInvocationJvmArg(BuildMode.ASSEMBLE_TRANSLATE));
}
public void testGetGradleWrapperPropertiesFilePath() throws IOException {
myTempDir = createTempDir();
File wrapper = new File(myTempDir, FN_GRADLE_WRAPPER_PROPERTIES);
createIfNotExists(wrapper);
GradleUtil.updateGradleDistributionUrl("1.6", wrapper);
Properties properties = getProperties(wrapper);
String distributionUrl = properties.getProperty("distributionUrl");
assertEquals("https://services.gradle.org/distributions/gradle-1.6-all.zip", distributionUrl);
}
public void testLeaveGradleWrapperAloneBin() throws IOException {
// Ensure that if we already have the right version, we don't replace a -bin.zip with a -all.zip
myTempDir = createTempDir();
File wrapper = new File(myTempDir, FN_GRADLE_WRAPPER_PROPERTIES);
write("#Wed Apr 10 15:27:10 PDT 2013\n" +
"distributionBase=GRADLE_USER_HOME\n" +
"distributionPath=wrapper/dists\n" +
"zipStoreBase=GRADLE_USER_HOME\n" +
"zipStorePath=wrapper/dists\n" +
"distributionUrl=https\\://services.gradle.org/distributions/gradle-1.9-bin.zip", wrapper, Charsets.UTF_8);
GradleUtil.updateGradleDistributionUrl("1.9", wrapper);
Properties properties = getProperties(wrapper);
String distributionUrl = properties.getProperty("distributionUrl");
assertEquals("https://services.gradle.org/distributions/gradle-1.9-bin.zip", distributionUrl);
}
public void testLeaveGradleWrapperAloneAll() throws IOException {
// Ensure that if we already have the right version, we don't replace a -all.zip with a -bin.zip
myTempDir = createTempDir();
File wrapper = new File(myTempDir, FN_GRADLE_WRAPPER_PROPERTIES);
write("#Wed Apr 10 15:27:10 PDT 2013\n" +
"distributionBase=GRADLE_USER_HOME\n" +
"distributionPath=wrapper/dists\n" +
"zipStoreBase=GRADLE_USER_HOME\n" +
"zipStorePath=wrapper/dists\n" +
"distributionUrl=https\\://services.gradle.org/distributions/gradle-1.9-all.zip", wrapper, Charsets.UTF_8);
GradleUtil.updateGradleDistributionUrl("1.9", wrapper);
Properties properties = getProperties(wrapper);
String distributionUrl = properties.getProperty("distributionUrl");
assertEquals("https://services.gradle.org/distributions/gradle-1.9-all.zip", distributionUrl);
}
public void testReplaceGradleWrapper() throws IOException {
// Test that when we replace to a new version we use -all.zip
myTempDir = createTempDir();
File wrapper = new File(myTempDir, FN_GRADLE_WRAPPER_PROPERTIES);
write("#Wed Apr 10 15:27:10 PDT 2013\n" +
"distributionBase=GRADLE_USER_HOME\n" +
"distributionPath=wrapper/dists\n" +
"zipStoreBase=GRADLE_USER_HOME\n" +
"zipStorePath=wrapper/dists\n" +
"distributionUrl=https\\://services.gradle.org/distributions/gradle-1.9-bin.zip", wrapper, Charsets.UTF_8);
GradleUtil.updateGradleDistributionUrl("1.6", wrapper);
Properties properties = getProperties(wrapper);
String distributionUrl = properties.getProperty("distributionUrl");
assertEquals("https://services.gradle.org/distributions/gradle-1.6-all.zip", distributionUrl);
}
public void testUpdateGradleDistributionUrl() {
myTempDir = createTempDir();
File wrapperPath = GradleUtil.getGradleWrapperPropertiesFilePath(myTempDir);
List<String> expected = Lists.newArrayList(FileUtil.splitPath(myTempDir.getPath()));
expected.addAll(FileUtil.splitPath(FD_GRADLE_WRAPPER));
expected.add(FN_GRADLE_WRAPPER_PROPERTIES);
assertEquals(expected, FileUtil.splitPath(wrapperPath.getPath()));
}
public void testGetPathSegments() {
List<String> pathSegments = GradleUtil.getPathSegments("foo:bar:baz");
assertEquals(Lists.newArrayList("foo", "bar", "baz"), pathSegments);
}
public void testGetPathSegmentsWithEmptyString() {
List<String> pathSegments = GradleUtil.getPathSegments("");
assertEquals(0, pathSegments.size());
}
public void testGetGradleBuildFilePath() {
myTempDir = createTempDir();
File buildFilePath = GradleUtil.getGradleBuildFilePath(myTempDir);
assertEquals(new File(myTempDir, FN_BUILD_GRADLE), buildFilePath);
}
public void testGetGradleVersionFromJarUsingGradleLibraryJar() {
File jarFile = new File("gradle-core-2.0.jar");
FullRevision gradleVersion = GradleUtil.getGradleVersionFromJar(jarFile);
assertNotNull(gradleVersion);
assertEquals(FullRevision.parseRevision("2.0"), gradleVersion);
}
public void testGetGradleVersionFromJarUsingGradleLibraryJarWithoutVersion() {
File jarFile = new File("gradle-core-two.jar");
FullRevision gradleVersion = GradleUtil.getGradleVersionFromJar(jarFile);
assertNull(gradleVersion);
}
public void testGetGradleVersionFromJarUsingNonGradleLibraryJar() {
File jarFile = new File("ant-1.9.3.jar");
FullRevision gradleVersion = GradleUtil.getGradleVersionFromJar(jarFile);
assertNull(gradleVersion);
}
public void testGetAndroidGradleModelVersion() throws IOException {
String contents = "buildscript {\n" +
" repositories {\n" +
" jcenter()\n" +
" }\n" +
" dependencies {\n" +
" classpath 'com.android.tools.build:gradle:0.13.0'\n" +
" }\n" +
"}";
FullRevision revision = GradleUtil.getAndroidGradleModelVersionFromBuildFile(contents, null);
assertNotNull(revision);
assertEquals("0.13.0", revision.toString());
}
public void testGetAndroidGradleModelVersionWithPlusInMicro() throws IOException {
String contents = "buildscript {\n" +
" repositories {\n" +
" jcenter()\n" +
" }\n" +
" dependencies {\n" +
" classpath 'com.android.tools.build:gradle:0.13.+'\n" +
" }\n" +
"}";
FullRevision revision = GradleUtil.getAndroidGradleModelVersionFromBuildFile(contents, null);
assertNotNull(revision);
assertEquals("0.13.0", revision.toString());
}
public void testGetAndroidGradleModelVersionWithPlusNotation() throws IOException {
String contents = "buildscript {\n" +
" repositories {\n" +
" jcenter()\n" +
" }\n" +
" dependencies {\n" +
" classpath 'com.android.tools.build:gradle:+'\n" +
" }\n" +
"}";
FullRevision revision = GradleUtil.getAndroidGradleModelVersionFromBuildFile(contents, null);
assertNotNull(revision);
}
public void testAddLocalMavenRepoInitScriptCommandLineOption() throws IOException {
File repoPath = new File("/xyz/repo");
List<String> cmdOptions = Lists.newArrayList();
File initScriptPath = GradleUtil.addLocalMavenRepoInitScriptCommandLineOption(cmdOptions, repoPath);
assertNotNull(initScriptPath);
assertEquals(2, cmdOptions.size());
assertEquals("--init-script", cmdOptions.get(0));
assertEquals(initScriptPath.getPath(), cmdOptions.get(1));
String expectedScript = "allprojects {\n" +
" buildscript {\n" +
" repositories {\n" +
" maven { url '" + GradleImport.escapeGroovyStringLiteral(repoPath.getPath()) + "'}\n" +
" }\n" +
" }\n" +
"}\n";
String initScript = FileUtil.loadFile(initScriptPath);
assertEquals(expectedScript, initScript);
}
public void testGetGradleWrapperVersionWithUrl() {
// Tries both http and https, bin and all. Also versions 2.2.1, 2.2 and 1.12
String url = "https://services.gradle.org/distributions/gradle-2.2.1-all.zip";
String version = GradleUtil.getGradleWrapperVersionOnlyIfComingForGradleDotOrg(url);
assertEquals("2.2.1", version);
url = "https://services.gradle.org/distributions/gradle-2.2.1-bin.zip";
version = GradleUtil.getGradleWrapperVersionOnlyIfComingForGradleDotOrg(url);
assertEquals("2.2.1", version);
url = "http://services.gradle.org/distributions/gradle-2.2.1-all.zip";
version = GradleUtil.getGradleWrapperVersionOnlyIfComingForGradleDotOrg(url);
assertEquals("2.2.1", version);
url = "http://services.gradle.org/distributions/gradle-2.2.1-bin.zip";
version = GradleUtil.getGradleWrapperVersionOnlyIfComingForGradleDotOrg(url);
assertEquals("2.2.1", version);
url = "https://services.gradle.org/distributions/gradle-2.2-all.zip";
version = GradleUtil.getGradleWrapperVersionOnlyIfComingForGradleDotOrg(url);
assertEquals("2.2", version);
url = "https://services.gradle.org/distributions/gradle-2.2-bin.zip";
version = GradleUtil.getGradleWrapperVersionOnlyIfComingForGradleDotOrg(url);
assertEquals("2.2", version);
url = "http://services.gradle.org/distributions/gradle-2.2-all.zip";
version = GradleUtil.getGradleWrapperVersionOnlyIfComingForGradleDotOrg(url);
assertEquals("2.2", version);
url = "http://services.gradle.org/distributions/gradle-2.2-bin.zip";
version = GradleUtil.getGradleWrapperVersionOnlyIfComingForGradleDotOrg(url);
assertEquals("2.2", version);
url = "https://services.gradle.org/distributions/gradle-1.12-all.zip";
version = GradleUtil.getGradleWrapperVersionOnlyIfComingForGradleDotOrg(url);
assertEquals("1.12", version);
url = "https://services.gradle.org/distributions/gradle-1.12-bin.zip";
version = GradleUtil.getGradleWrapperVersionOnlyIfComingForGradleDotOrg(url);
assertEquals("1.12", version);
url = "http://services.gradle.org/distributions/gradle-1.12-all.zip";
version = GradleUtil.getGradleWrapperVersionOnlyIfComingForGradleDotOrg(url);
assertEquals("1.12", version);
url = "http://services.gradle.org/distributions/gradle-1.12-bin.zip";
version = GradleUtil.getGradleWrapperVersionOnlyIfComingForGradleDotOrg(url);
assertEquals("1.12", version);
// Use custom URL.
url = "http://myown.com/gradle-2.2.1-bin.zip";
version = GradleUtil.getGradleWrapperVersionOnlyIfComingForGradleDotOrg(url);
assertNull(version);
}
public void testHasLayoutRenderingIssue() {
AndroidProjectStub model = new AndroidProjectStub("app");
model.setModelVersion("1.1.0");
assertFalse(GradleUtil.hasLayoutRenderingIssue(model));
model.setModelVersion("1.2.0");
assertTrue(GradleUtil.hasLayoutRenderingIssue(model));
model.setModelVersion("1.2.1");
assertTrue(GradleUtil.hasLayoutRenderingIssue(model));
model.setModelVersion("1.2.2");
assertTrue(GradleUtil.hasLayoutRenderingIssue(model));
model.setModelVersion("1.2.3");
assertFalse(GradleUtil.hasLayoutRenderingIssue(model));
}
}