summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Ruiz <alruiz@google.com>2015-05-02 15:44:48 -0700
committerAlex Ruiz <alruiz@google.com>2015-05-04 10:21:07 -0700
commitbf9b375544dbe72c96f21ec016d68995a3f29a0c (patch)
tree85d4c41dbf1904c427d12a6221f3db8b34c7d7f7
parent9158cfc2f4dc115b60a7e18c9cbcf8ceba85c1d9 (diff)
downloadidea-bf9b375544dbe72c96f21ec016d68995a3f29a0c.tar.gz
Now the IDE warns user if plugin has layout rendering issue.
Android plugin 1.2.0, 1.2.1 and 1.2.2 have a rendering issue that has been fixed in 1.2.3 and has been reported here http://code.google.com/p/android/issues/detail?id=170841 This CL adds a warning, during project sync, if the project is using a plugin with any of the versions listed above. The warning is displayed in the "Sync Messages" view. Change-Id: Ia8fa711a1d6ca417c0c96f29ab363986b3842567
-rw-r--r--android/guiTestSrc/com/android/tools/idea/tests/gui/gradle/GradleSyncTest.java47
-rw-r--r--android/src/com/android/tools/idea/gradle/service/AndroidProjectDataService.java38
-rw-r--r--android/src/com/android/tools/idea/gradle/service/notification/errors/UnsupportedModelVersionErrorHandler.java11
-rw-r--r--android/src/com/android/tools/idea/gradle/service/notification/hyperlink/FixGradleModelVersionHyperlink.java21
-rw-r--r--android/src/com/android/tools/idea/gradle/util/GradleUtil.java12
-rw-r--r--android/src/com/android/tools/idea/rendering/RenderErrorPanel.java10
-rw-r--r--android/testSrc/com/android/tools/idea/gradle/stubs/android/AndroidProjectStub.java7
-rw-r--r--android/testSrc/com/android/tools/idea/gradle/util/GradleUtilTest.java84
8 files changed, 143 insertions, 87 deletions
diff --git a/android/guiTestSrc/com/android/tools/idea/tests/gui/gradle/GradleSyncTest.java b/android/guiTestSrc/com/android/tools/idea/tests/gui/gradle/GradleSyncTest.java
index a3f2ee41519..642345d0cf4 100644
--- a/android/guiTestSrc/com/android/tools/idea/tests/gui/gradle/GradleSyncTest.java
+++ b/android/guiTestSrc/com/android/tools/idea/tests/gui/gradle/GradleSyncTest.java
@@ -96,6 +96,7 @@ import static com.android.tools.idea.tests.gui.framework.fixture.MessageDialogFi
import static com.android.tools.idea.tests.gui.framework.fixture.MessagesToolWindowFixture.MessageMatcher.firstLineStartingWith;
import static com.google.common.io.Files.write;
import static com.intellij.ide.errorTreeView.ErrorTreeElementKind.ERROR;
+import static com.intellij.ide.errorTreeView.ErrorTreeElementKind.WARNING;
import static com.intellij.openapi.util.io.FileUtil.*;
import static com.intellij.openapi.util.text.StringUtil.isEmpty;
import static com.intellij.openapi.util.text.StringUtil.isNotEmpty;
@@ -854,22 +855,9 @@ public class GradleSyncTest extends GuiTestCase {
IdeFrameFixture projectFrame = openSimpleApplication();
- File projectPath = projectFrame.getProjectPath();
- File buildFile = new File(projectPath, FN_BUILD_GRADLE);
- assertThat(buildFile).isFile();
-
// Set the plugin version to 1.0.0. This version is incompatible with Gradle 2.4.
// We expect the IDE to warn the user about this incompatibility.
- String contents = Files.toString(buildFile, Charsets.UTF_8);
- Pattern pattern = Pattern.compile("classpath ['\"]com.android.tools.build:gradle:(.+)['\"]");
- Matcher matcher = pattern.matcher(contents);
- if (matcher.find()) {
- contents = contents.substring(0, matcher.start(1)) + "1.0.0" + contents.substring(matcher.end(1));
- write(contents, buildFile, Charsets.UTF_8);
- }
- else {
- fail("Cannot find declaration of Android plugin");
- }
+ updateAndroidModelVersion(projectFrame.getProjectPath(), "1.0.0");
projectFrame.useLocalGradleDistribution(gradleTwoDotFourHome)
.requestProjectSync()
@@ -938,7 +926,8 @@ public class GradleSyncTest extends GuiTestCase {
DataNode<ProjectData> cache = getCachedProjectData(project);
assertNotNull(cache);
- List<DataNode<?>> cachedChildren = field("myChildren").ofType(new TypeRef<List<DataNode<?>>>(){}).in(cache).get();
+ List<DataNode<?>> cachedChildren = field("myChildren").ofType(new TypeRef<List<DataNode<?>>>() {
+ }).in(cache).get();
assertThat(cachedChildren.size()).isGreaterThan(1);
DataNode<?> toRemove = null;
for (DataNode<?> child : cachedChildren) {
@@ -961,6 +950,34 @@ public class GradleSyncTest extends GuiTestCase {
projectFrame.requestProjectSync().waitForGradleProjectSyncToFinish();
}
+ // Verify that the IDE warns users about rendering issue when using plugin 1.2.0 to 1.2.2.
+ // See https://code.google.com/p/android/issues/detail?id=170841
+ @Test
+ public void testModelWithLayoutRenderingIssue() throws IOException {
+ IdeFrameFixture projectFrame = openSimpleApplication();
+ updateAndroidModelVersion(projectFrame.getProjectPath(), "1.2.0");
+ projectFrame.requestProjectSync().waitForGradleProjectSyncToFinish();
+
+ AbstractContentFixture syncMessages = projectFrame.getMessagesToolWindow().getGradleSyncContent();
+ syncMessages.findMessage(WARNING, firstLineStartingWith("Using an obsolete version of the Gradle plugin (1.2.0)"));
+ }
+
+ private static void updateAndroidModelVersion(@NotNull File projectPath, @NotNull String modelVersion) throws IOException {
+ File buildFile = new File(projectPath, FN_BUILD_GRADLE);
+ assertThat(buildFile).isFile();
+
+ String contents = Files.toString(buildFile, Charsets.UTF_8);
+ Pattern pattern = Pattern.compile("classpath ['\"]com.android.tools.build:gradle:(.+)['\"]");
+ Matcher matcher = pattern.matcher(contents);
+ if (matcher.find()) {
+ contents = contents.substring(0, matcher.start(1)) + modelVersion + contents.substring(matcher.end(1));
+ write(contents, buildFile, Charsets.UTF_8);
+ }
+ else {
+ fail("Cannot find declaration of Android plugin");
+ }
+ }
+
@NotNull
private static String getUnsupportedGradleHome() {
return getGradleHomeFromSystemProperty(UNSUPPORTED_GRADLE_HOME_PROPERTY, "2.1");
diff --git a/android/src/com/android/tools/idea/gradle/service/AndroidProjectDataService.java b/android/src/com/android/tools/idea/gradle/service/AndroidProjectDataService.java
index b27aca469e8..eebf10ca129 100644
--- a/android/src/com/android/tools/idea/gradle/service/AndroidProjectDataService.java
+++ b/android/src/com/android/tools/idea/gradle/service/AndroidProjectDataService.java
@@ -15,7 +15,6 @@
*/
package com.android.tools.idea.gradle.service;
-import com.android.SdkConstants;
import com.android.builder.model.AndroidProject;
import com.android.sdklib.repository.FullRevision;
import com.android.sdklib.repository.FullRevision.PreviewComparison;
@@ -26,7 +25,6 @@ import com.android.tools.idea.gradle.IdeaAndroidProject;
import com.android.tools.idea.gradle.compiler.PostProjectBuildTasksExecutor;
import com.android.tools.idea.gradle.customizer.ModuleCustomizer;
import com.android.tools.idea.gradle.customizer.android.*;
-import com.android.tools.idea.gradle.messages.CommonMessageGroupNames;
import com.android.tools.idea.gradle.messages.Message;
import com.android.tools.idea.gradle.messages.ProjectSyncMessages;
import com.android.tools.idea.gradle.service.notification.hyperlink.FixGradleModelVersionHyperlink;
@@ -75,7 +73,10 @@ import java.util.Map;
import static com.android.SdkConstants.GRADLE_PLUGIN_RECOMMENDED_VERSION;
import static com.android.sdklib.repository.PreciseRevision.parseRevision;
import static com.android.tools.idea.gradle.messages.CommonMessageGroupNames.EXTRA_GENERATED_SOURCES;
+import static com.android.tools.idea.gradle.messages.CommonMessageGroupNames.UNHANDLED_SYNC_ISSUE_TYPE;
+import static com.android.tools.idea.gradle.messages.Message.Type.*;
import static com.android.tools.idea.gradle.util.GradleUtil.getGradleVersion;
+import static com.android.tools.idea.gradle.util.GradleUtil.hasLayoutRenderingIssue;
/**
* Service that sets an Android SDK and facets to the modules of a project that has been imported from an Android-Gradle project.
@@ -86,6 +87,7 @@ public class AndroidProjectDataService implements ProjectDataService<IdeaAndroid
private final List<ModuleCustomizer<IdeaAndroidProject>> myCustomizers;
// This constructor is called by the IDE. See this module's plugin.xml file, implementation of extension 'externalProjectDataService'.
+ @SuppressWarnings("unused")
public AndroidProjectDataService() {
this(ImmutableList.of(new AndroidSdkModuleCustomizer(), new AndroidFacetModuleCustomizer(), new ContentRootModuleCustomizer(),
new RunConfigModuleCustomizer(), new DependenciesModuleCustomizer(), new CompilerOutputModuleCustomizer()));
@@ -148,6 +150,7 @@ public class AndroidProjectDataService implements ProjectDataService<IdeaAndroid
String incompatibleVersionFound = null;
String nonMatchingEncodingFound = null;
+ String modelVersionWithRenderingIssue = null;
ModuleManager moduleManager = ModuleManager.getInstance(project);
for (Module module : moduleManager.getModules()) {
@@ -157,6 +160,10 @@ public class AndroidProjectDataService implements ProjectDataService<IdeaAndroid
if (androidProject != null) {
AndroidProject delegate = androidProject.getDelegate();
+ if (modelVersionWithRenderingIssue == null && hasLayoutRenderingIssue(delegate)) {
+ modelVersionWithRenderingIssue = delegate.getModelVersion();
+ }
+
FullRevision modelVersion = parseRevision(delegate.getModelVersion());
boolean isModelVersionOneDotTwoOrNewer = modelVersion.compareTo(oneDotTwoModelVersion, PreviewComparison.IGNORE) >= 0;
@@ -188,21 +195,19 @@ public class AndroidProjectDataService implements ProjectDataService<IdeaAndroid
for (File folder : sourceFolders) {
// Have to add a word before the path, otherwise IDEA won't show it.
String[] text = {"Folder " + folder.getPath()};
- messages.add(new Message(EXTRA_GENERATED_SOURCES, Message.Type.WARNING, text));
+ messages.add(new Message(EXTRA_GENERATED_SOURCES, WARNING, text));
}
}
}
if (incompatibleVersionFound != null) {
- FixGradleModelVersionHyperlink quickFix =
- new FixGradleModelVersionHyperlink("Fix plug-in version and sync project", GRADLE_PLUGIN_RECOMMENDED_VERSION,
- null /* do not update Gradle version */, false);
+ FixGradleModelVersionHyperlink quickFix = new FixGradleModelVersionHyperlink(GRADLE_PLUGIN_RECOMMENDED_VERSION,
+ null /* do not update Gradle version */, false);
String[] text = {
String.format("Android plugin version %1$s is not compatible with Gradle version 2.4 (or newer.)", incompatibleVersionFound),
"Please use Android plugin version 1.2 or newer."
};
- messages.add(new Message(CommonMessageGroupNames.UNHANDLED_SYNC_ISSUE_TYPE, Message.Type.ERROR, text),
- quickFix);
+ messages.add(new Message(UNHANDLED_SYNC_ISSUE_TYPE, ERROR, text), quickFix);
}
if (nonMatchingEncodingFound != null) {
@@ -221,12 +226,23 @@ public class AndroidProjectDataService implements ProjectDataService<IdeaAndroid
ideEncoding.displayName(), nonMatchingEncodingFound),
"This can lead to serious bugs."
};
- messages.add(new Message(CommonMessageGroupNames.UNHANDLED_SYNC_ISSUE_TYPE, Message.Type.WARNING, text), openDocHyperlink,
- openEncodingSettingsHyperlink);
+ messages.add(new Message(UNHANDLED_SYNC_ISSUE_TYPE, WARNING, text), openDocHyperlink, openEncodingSettingsHyperlink);
+ }
+
+ if (modelVersionWithRenderingIssue != null) {
+ // See https://code.google.com/p/android/issues/detail?id=170841
+ NotificationHyperlink quickFix = new FixGradleModelVersionHyperlink(false);
+ NotificationHyperlink openDocHyperlink = new OpenUrlHyperlink("https://code.google.com/p/android/issues/detail?id=170841",
+ "More Info...");
+ String[] text = {
+ String.format("Using an obsolete version of the Gradle plugin (%1$s); this can lead to layouts not rendering correctly.",
+ modelVersionWithRenderingIssue)
+ };
+ messages.add(new Message(UNHANDLED_SYNC_ISSUE_TYPE, WARNING, text), openDocHyperlink, quickFix);
}
if (hasExtraGeneratedFolders) {
- messages.add(new Message(EXTRA_GENERATED_SOURCES, Message.Type.INFO, "3rd-party Gradle plug-ins may be the cause"));
+ messages.add(new Message(EXTRA_GENERATED_SOURCES, INFO, "3rd-party Gradle plug-ins may be the cause"));
}
Sdk jdk = ProjectRootManager.getInstance(project).getProjectSdk();
diff --git a/android/src/com/android/tools/idea/gradle/service/notification/errors/UnsupportedModelVersionErrorHandler.java b/android/src/com/android/tools/idea/gradle/service/notification/errors/UnsupportedModelVersionErrorHandler.java
index 8aab1ad0fd2..bfda21d721b 100644
--- a/android/src/com/android/tools/idea/gradle/service/notification/errors/UnsupportedModelVersionErrorHandler.java
+++ b/android/src/com/android/tools/idea/gradle/service/notification/errors/UnsupportedModelVersionErrorHandler.java
@@ -41,15 +41,8 @@ public class UnsupportedModelVersionErrorHandler extends AbstractSyncErrorHandle
@NotNull Project project) {
String msg = error.getMessage();
if (msg.startsWith(UNSUPPORTED_MODEL_VERSION_ERROR_PREFIX)) {
- NotificationHyperlink fixGradleModelHyperlink;
- if (msg.contains(READ_MIGRATION_GUIDE_MSG)) {
- fixGradleModelHyperlink = new FixGradleModelVersionHyperlink();
- }
- else {
- fixGradleModelHyperlink = new FixGradleModelVersionHyperlink("Fix plugin version and re-import project", false);
- }
-
- updateNotification(notification, project, msg, fixGradleModelHyperlink);
+ boolean openMigrationGuide = msg.contains(READ_MIGRATION_GUIDE_MSG);
+ updateNotification(notification, project, msg, new FixGradleModelVersionHyperlink(openMigrationGuide));
return true;
}
return false;
diff --git a/android/src/com/android/tools/idea/gradle/service/notification/hyperlink/FixGradleModelVersionHyperlink.java b/android/src/com/android/tools/idea/gradle/service/notification/hyperlink/FixGradleModelVersionHyperlink.java
index 3ffb5a643e2..d33b177993a 100644
--- a/android/src/com/android/tools/idea/gradle/service/notification/hyperlink/FixGradleModelVersionHyperlink.java
+++ b/android/src/com/android/tools/idea/gradle/service/notification/hyperlink/FixGradleModelVersionHyperlink.java
@@ -50,38 +50,27 @@ public class FixGradleModelVersionHyperlink extends NotificationHyperlink {
/**
* Creates a new {@link FixGradleModelVersionHyperlink}. This constructor updates the Gradle model to the version in
* {@link SdkConstants#GRADLE_PLUGIN_RECOMMENDED_VERSION} and Gradle to the version in {@link SdkConstants#GRADLE_LATEST_VERSION}.
- * This constructor also opens the migration to the Android Gradle model version 1.0 (from an older version) in the browser.
- */
- public FixGradleModelVersionHyperlink() {
- this("Open migration guide, fix plug-in version and sync project", true);
- }
-
- /**
- * Creates a new {@link FixGradleModelVersionHyperlink}. This constructor updates the Gradle model to the version in
- * {@link SdkConstants#GRADLE_PLUGIN_RECOMMENDED_VERSION} and Gradle to the version in {@link SdkConstants#GRADLE_LATEST_VERSION}.
*
- * @param text the text of the URL.
* @param openMigrationGuide indicates whether the migration guide to the Android Gradle model version 1.0 (from an older version) should
* be opened in the browser.
*/
- public FixGradleModelVersionHyperlink(@NotNull String text, boolean openMigrationGuide) {
- this(text, GRADLE_PLUGIN_RECOMMENDED_VERSION, GRADLE_LATEST_VERSION, openMigrationGuide);
+ public FixGradleModelVersionHyperlink(boolean openMigrationGuide) {
+ this(GRADLE_PLUGIN_RECOMMENDED_VERSION, GRADLE_LATEST_VERSION, openMigrationGuide);
}
/**
* Creates a new {@link FixGradleModelVersionHyperlink}.
*
- * @param text the text of the URL.
* @param modelVersion the version to update the Android Gradle model to.
* @param gradleVersion the version of Gradle to update to. This can be {@code null} if only the model version needs to be updated.
* @param openMigrationGuide indicates whether the migration guide to the Android Gradle model version 1.0 (from an older version) should
* be opened in the browser.
*/
- public FixGradleModelVersionHyperlink(@NotNull String text,
- @NotNull String modelVersion,
+ public FixGradleModelVersionHyperlink(@NotNull String modelVersion,
@Nullable String gradleVersion,
boolean openMigrationGuide) {
- super("fixGradleElements", text);
+ super("fixGradleElements",
+ openMigrationGuide ? "Open migration guide, fix plug-in version and sync project" : "Fix plug-in version and sync project");
myModelVersion = modelVersion;
myGradleVersion = gradleVersion;
myOpenMigrationGuide = openMigrationGuide;
diff --git a/android/src/com/android/tools/idea/gradle/util/GradleUtil.java b/android/src/com/android/tools/idea/gradle/util/GradleUtil.java
index c9093997307..c2497c17fe0 100644
--- a/android/src/com/android/tools/idea/gradle/util/GradleUtil.java
+++ b/android/src/com/android/tools/idea/gradle/util/GradleUtil.java
@@ -1277,4 +1277,16 @@ public final class GradleUtil {
assert projectBasePath != null;
return projectBasePath;
}
+
+ /**
+ * Indicates whether <a href="https://code.google.com/p/android/issues/detail?id=170841">a known layout rendering issue</a> is present in
+ * the given model.
+ *
+ * @param model the given model.
+ * @return {@true} if the model has the layout rendering issue; {@code false} otherwise.
+ */
+ public static boolean hasLayoutRenderingIssue(@NotNull AndroidProject model) {
+ String modelVersion = model.getModelVersion();
+ return modelVersion.startsWith("1.2.0") || modelVersion.equals("1.2.1") || modelVersion.equals("1.2.2");
+ }
}
diff --git a/android/src/com/android/tools/idea/rendering/RenderErrorPanel.java b/android/src/com/android/tools/idea/rendering/RenderErrorPanel.java
index 21234d16b79..5d7a793ad18 100644
--- a/android/src/com/android/tools/idea/rendering/RenderErrorPanel.java
+++ b/android/src/com/android/tools/idea/rendering/RenderErrorPanel.java
@@ -16,8 +16,8 @@
package com.android.tools.idea.rendering;
-import com.android.SdkConstants;
import com.android.annotations.VisibleForTesting;
+import com.android.builder.model.AndroidProject;
import com.android.ide.common.rendering.RenderSecurityManager;
import com.android.ide.common.rendering.api.LayoutLog;
import com.android.ide.common.resources.ResourceResolver;
@@ -101,6 +101,7 @@ import static com.android.SdkConstants.*;
import static com.android.ide.common.rendering.api.LayoutLog.TAG_RESOURCES_PREFIX;
import static com.android.ide.common.rendering.api.LayoutLog.TAG_RESOURCES_RESOLVE_THEME_ATTR;
import static com.android.tools.idea.configurations.RenderContext.UsageType.LAYOUT_EDITOR;
+import static com.android.tools.idea.gradle.util.GradleUtil.hasLayoutRenderingIssue;
import static com.android.tools.idea.rendering.HtmlLinkManager.URL_ACTION_CLOSE;
import static com.android.tools.idea.rendering.RenderLogger.TAG_STILL_BUILDING;
import static com.android.tools.idea.rendering.ResourceHelper.viewNeedsPackage;
@@ -554,8 +555,9 @@ public class RenderErrorPanel extends JPanel {
if (module != null) {
AndroidFacet facet = AndroidFacet.getInstance(module);
if (facet != null && facet.isGradleProject() && facet.getIdeaAndroidProject() != null) {
- String modelVersion = facet.getIdeaAndroidProject().getDelegate().getModelVersion();
- if (modelVersion.startsWith("1.2.0") || modelVersion.equals("1.2.1") || modelVersion.equals("1.2.2")) {
+ AndroidProject androidProject = facet.getIdeaAndroidProject().getDelegate();
+ String modelVersion = androidProject.getModelVersion();
+ if (hasLayoutRenderingIssue(androidProject)) {
builder.addBold("Using an obsolete version of the Gradle plugin (" + modelVersion +
"); this can lead to layouts not rendering correctly.").newline();
builder.addIcon(HtmlBuilderHelper.getTipIconPath());
@@ -563,7 +565,7 @@ public class RenderErrorPanel extends JPanel {
Runnable runnable = new Runnable() {
@Override
public void run() {
- FixGradleModelVersionHyperlink quickFix = new FixGradleModelVersionHyperlink("", GRADLE_PLUGIN_RECOMMENDED_VERSION,
+ FixGradleModelVersionHyperlink quickFix = new FixGradleModelVersionHyperlink(GRADLE_PLUGIN_RECOMMENDED_VERSION,
null, false);
quickFix.executeIfClicked(module.getProject(),
new HyperlinkEvent(this, HyperlinkEvent.EventType.ACTIVATED, null, quickFix.getUrl()));
diff --git a/android/testSrc/com/android/tools/idea/gradle/stubs/android/AndroidProjectStub.java b/android/testSrc/com/android/tools/idea/gradle/stubs/android/AndroidProjectStub.java
index 3102951e8c8..4ad554f6aba 100644
--- a/android/testSrc/com/android/tools/idea/gradle/stubs/android/AndroidProjectStub.java
+++ b/android/testSrc/com/android/tools/idea/gradle/stubs/android/AndroidProjectStub.java
@@ -44,6 +44,7 @@ public class AndroidProjectStub implements AndroidProject {
@NotNull private final JavaCompileOptionsStub myJavaCompileOptions = new JavaCompileOptionsStub();
+ @NotNull private String myModelVersion = SdkConstants.GRADLE_PLUGIN_MINIMUM_VERSION + "-SNAPSHOT";
@Nullable private VariantStub myFirstVariant;
private boolean myLibrary;
@@ -66,7 +67,11 @@ public class AndroidProjectStub implements AndroidProject {
@Override
@NotNull
public String getModelVersion() {
- return SdkConstants.GRADLE_PLUGIN_MINIMUM_VERSION + "-SNAPSHOT";
+ return myModelVersion;
+ }
+
+ public void setModelVersion(@NotNull String modelVersion) {
+ myModelVersion = modelVersion;
}
@Override
diff --git a/android/testSrc/com/android/tools/idea/gradle/util/GradleUtilTest.java b/android/testSrc/com/android/tools/idea/gradle/util/GradleUtilTest.java
index 83afe05cc4d..ef12a638327 100644
--- a/android/testSrc/com/android/tools/idea/gradle/util/GradleUtilTest.java
+++ b/android/testSrc/com/android/tools/idea/gradle/util/GradleUtilTest.java
@@ -16,11 +16,10 @@
package com.android.tools.idea.gradle.util;
import com.android.sdklib.repository.FullRevision;
+import com.android.tools.idea.gradle.stubs.android.AndroidProjectStub;
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;
@@ -29,6 +28,10 @@ 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}.
@@ -53,69 +56,69 @@ public class GradleUtilTest extends TestCase {
}
public void testGetGradleWrapperPropertiesFilePath() throws IOException {
- myTempDir = Files.createTempDir();
+ myTempDir = createTempDir();
File wrapper = new File(myTempDir, FN_GRADLE_WRAPPER_PROPERTIES);
- FileUtilRt.createIfNotExists(wrapper);
+ createIfNotExists(wrapper);
GradleUtil.updateGradleDistributionUrl("1.6", wrapper);
- Properties properties = PropertiesUtil.getProperties(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 = Files.createTempDir();
+ myTempDir = 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=https\\://services.gradle.org/distributions/gradle-1.9-bin.zip", wrapper, Charsets.UTF_8);
+ 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 = PropertiesUtil.getProperties(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 = Files.createTempDir();
+ myTempDir = 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=https\\://services.gradle.org/distributions/gradle-1.9-all.zip", wrapper, Charsets.UTF_8);
+ 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 = PropertiesUtil.getProperties(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 = Files.createTempDir();
+ myTempDir = 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=https\\://services.gradle.org/distributions/gradle-1.9-bin.zip", wrapper, Charsets.UTF_8);
+ 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 = PropertiesUtil.getProperties(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 = Files.createTempDir();
+ myTempDir = createTempDir();
File wrapperPath = GradleUtil.getGradleWrapperPropertiesFilePath(myTempDir);
List<String> expected = Lists.newArrayList(FileUtil.splitPath(myTempDir.getPath()));
@@ -136,7 +139,7 @@ public class GradleUtilTest extends TestCase {
}
public void testGetGradleBuildFilePath() {
- myTempDir = Files.createTempDir();
+ myTempDir = createTempDir();
File buildFilePath = GradleUtil.getGradleBuildFilePath(myTempDir);
assertEquals(new File(myTempDir, FN_BUILD_GRADLE), buildFilePath);
}
@@ -279,4 +282,23 @@ public class GradleUtilTest extends TestCase {
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));
+ }
}