/* * 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.google.common.base.Charsets; import com.google.common.collect.Lists; import com.google.common.io.Files; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.io.FileUtilRt; 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.*; /** * 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 = Files.createTempDir(); File wrapper = new File(myTempDir, FN_GRADLE_WRAPPER_PROPERTIES); FileUtilRt.createIfNotExists(wrapper); GradleUtil.updateGradleDistributionUrl("1.6", wrapper); Properties properties = PropertiesUtil.getProperties(wrapper); String distributionUrl = properties.getProperty("distributionUrl"); assertEquals("http://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 = Files.createTempDir(); File wrapper = new File(myTempDir, FN_GRADLE_WRAPPER_PROPERTIES); Files.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=http\\://services.gradle.org/distributions/gradle-1.9-bin.zip", wrapper, Charsets.UTF_8); GradleUtil.updateGradleDistributionUrl("1.9", wrapper); Properties properties = PropertiesUtil.getProperties(wrapper); String distributionUrl = properties.getProperty("distributionUrl"); assertEquals("http://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 = Files.createTempDir(); File wrapper = new File(myTempDir, FN_GRADLE_WRAPPER_PROPERTIES); Files.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=http\\://services.gradle.org/distributions/gradle-1.9-all.zip", wrapper, Charsets.UTF_8); GradleUtil.updateGradleDistributionUrl("1.9", wrapper); Properties properties = PropertiesUtil.getProperties(wrapper); String distributionUrl = properties.getProperty("distributionUrl"); assertEquals("http://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 = Files.createTempDir(); File wrapper = new File(myTempDir, FN_GRADLE_WRAPPER_PROPERTIES); Files.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=http\\://services.gradle.org/distributions/gradle-1.9-bin.zip", wrapper, Charsets.UTF_8); GradleUtil.updateGradleDistributionUrl("1.6", wrapper); Properties properties = PropertiesUtil.getProperties(wrapper); String distributionUrl = properties.getProperty("distributionUrl"); assertEquals("http://services.gradle.org/distributions/gradle-1.6-all.zip", distributionUrl); } public void testUpdateGradleDistributionUrl() { myTempDir = Files.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 = Files.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.getResolvedAndroidGradleModelVersion(contents); 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.getResolvedAndroidGradleModelVersion(contents); 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.getResolvedAndroidGradleModelVersion(contents); assertNotNull(revision); } }