diff --git a/plugins/android/testData/lint/global/duplicateIcons/dup1.png b/plugins/android/testData/lint/global/duplicateIcons/dup1.png
new file mode 100644
index 000000000000..3779d4d33dc0
Binary files /dev/null and b/plugins/android/testData/lint/global/duplicateIcons/dup1.png differ
diff --git a/plugins/android/testData/lint/global/duplicateIcons/dup2.png b/plugins/android/testData/lint/global/duplicateIcons/dup2.png
new file mode 100644
index 000000000000..3779d4d33dc0
Binary files /dev/null and b/plugins/android/testData/lint/global/duplicateIcons/dup2.png differ
diff --git a/plugins/android/testData/lint/global/duplicateIcons/expected.xml b/plugins/android/testData/lint/global/duplicateIcons/expected.xml
new file mode 100644
index 000000000000..f52bc6d402b0
--- /dev/null
+++ b/plugins/android/testData/lint/global/duplicateIcons/expected.xml
@@ -0,0 +1,8 @@
+
+
+
+ dup2.png
+ 1
+ The following unrelated icon files have identical contents: dup1.png, dup2.png
+
+
\ No newline at end of file
diff --git a/plugins/android/testData/lint/global/duplicateIcons/other.png b/plugins/android/testData/lint/global/duplicateIcons/other.png
new file mode 100644
index 000000000000..6adea8576647
Binary files /dev/null and b/plugins/android/testData/lint/global/duplicateIcons/other.png differ
diff --git a/plugins/android/testData/lint/global/manifestOrder/AndroidManifest.xml b/plugins/android/testData/lint/global/manifestOrder/AndroidManifest.xml
new file mode 100644
index 000000000000..2148ce24957d
--- /dev/null
+++ b/plugins/android/testData/lint/global/manifestOrder/AndroidManifest.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/plugins/android/testData/lint/global/manifestOrder/expected.xml b/plugins/android/testData/lint/global/manifestOrder/expected.xml
new file mode 100644
index 000000000000..616700c5539d
--- /dev/null
+++ b/plugins/android/testData/lint/global/manifestOrder/expected.xml
@@ -0,0 +1,8 @@
+
+
+
+ AndroidManifest.xml
+ 9
+ <uses-sdk> tag appears after <application> tag
+
+
\ No newline at end of file
diff --git a/plugins/android/testData/lint/global/proguard/expected.xml b/plugins/android/testData/lint/global/proguard/expected.xml
new file mode 100644
index 000000000000..81e12d62c562
--- /dev/null
+++ b/plugins/android/testData/lint/global/proguard/expected.xml
@@ -0,0 +1,8 @@
+
+
+
+ proguard.cfg
+ 1
+ Obsolete proguard file; use -keepclasseswithmembers instead of -keepclasseswithmembernames
+
+
\ No newline at end of file
diff --git a/plugins/android/testData/lint/global/proguard/proguard.cfg b/plugins/android/testData/lint/global/proguard/proguard.cfg
new file mode 100644
index 000000000000..160247cd3fac
--- /dev/null
+++ b/plugins/android/testData/lint/global/proguard/proguard.cfg
@@ -0,0 +1,3 @@
+-keepclasseswithmembernames class * {
+ public (android.");
+}
\ No newline at end of file
diff --git a/plugins/android/testSrc/org/jetbrains/android/AndroidLintTest.java b/plugins/android/testSrc/org/jetbrains/android/AndroidLintTest.java
index 186b291dd2b4..004f2ea099f6 100644
--- a/plugins/android/testSrc/org/jetbrains/android/AndroidLintTest.java
+++ b/plugins/android/testSrc/org/jetbrains/android/AndroidLintTest.java
@@ -1,11 +1,20 @@
package org.jetbrains.android;
+import com.intellij.analysis.AnalysisScope;
import com.intellij.codeInsight.intention.IntentionAction;
+import com.intellij.codeInspection.InspectionManager;
+import com.intellij.codeInspection.ex.GlobalInspectionContextImpl;
import com.intellij.codeInspection.ex.GlobalInspectionToolWrapper;
+import com.intellij.codeInspection.ex.InspectionManagerEx;
import com.intellij.openapi.application.Result;
import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.openapi.vfs.VirtualFile;
-import org.jetbrains.android.inspections.lint.*;
+import com.intellij.testFramework.InspectionTestUtil;
+import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl;
+import org.jetbrains.android.inspections.lint.AndroidAddStringResourceQuickFix;
+import org.jetbrains.android.inspections.lint.AndroidLintExternalAnnotator;
+import org.jetbrains.android.inspections.lint.AndroidLintInspectionBase;
+import org.jetbrains.android.inspections.lint.AndroidLintInspectionToolProvider;
import org.jetbrains.android.util.AndroidBundle;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
@@ -18,6 +27,7 @@ import java.io.IOException;
*/
public class AndroidLintTest extends AndroidTestCase {
@NonNls private static final String BASE_PATH = "/lint/";
+ @NonNls private static final String BASE_PATH_GLOBAL = BASE_PATH + "global/";
public AndroidLintTest() {
super(false);
@@ -152,6 +162,44 @@ public class AndroidLintTest extends AndroidTestCase {
"/res/values/typography.xml", "xml");
}
+ public void testProguard() throws Exception {
+ createManifest();
+ myFixture.copyFileToProject(getGlobalTestDir() + "/proguard.cfg", "proguard.cfg");
+ doGlobalInspectionTest(new AndroidLintInspectionToolProvider.AndroidLintProguardInspection());
+ }
+
+ public void testManifestOrder() throws Exception {
+ myFixture.copyFileToProject(getGlobalTestDir() + "/AndroidManifest.xml", "AndroidManifest.xml");
+ doGlobalInspectionTest(new AndroidLintInspectionToolProvider.AndroidLintManifestOrderInspection());
+ }
+
+ public void testDuplicateIcons() throws Exception {
+ createManifest();
+ myFixture.copyFileToProject(getGlobalTestDir() + "/dup1.png", "res/drawable/dup1.png");
+ myFixture.copyFileToProject(getGlobalTestDir() + "/dup2.png", "res/drawable/dup2.png");
+ myFixture.copyFileToProject(getGlobalTestDir() + "/other.png", "res/drawable/other.png");
+ doGlobalInspectionTest(new AndroidLintInspectionToolProvider.AndroidLintIconDuplicatesInspection());
+ }
+
+ private void doGlobalInspectionTest(@NotNull AndroidLintInspectionBase inspection) {
+ final GlobalInspectionToolWrapper wrapper = new GlobalInspectionToolWrapper(inspection);
+ myFixture.enableInspections(wrapper);
+
+ final AnalysisScope scope = new AnalysisScope(myModule);
+ scope.invalidate();
+
+ final InspectionManagerEx inspectionManager = (InspectionManagerEx)InspectionManager.getInstance(getProject());
+ final GlobalInspectionContextImpl globalContext =
+ CodeInsightTestFixtureImpl.createGlobalContextForTool(scope, getProject(), inspectionManager, wrapper);
+
+ InspectionTestUtil.runTool(wrapper, scope, globalContext, inspectionManager);
+ InspectionTestUtil.compareToolResults(wrapper, false, getTestDataPath() + getGlobalTestDir());
+ }
+
+ private String getGlobalTestDir() {
+ return BASE_PATH_GLOBAL + getTestName(true);
+ }
+
private void doTestNoFix(@NotNull AndroidLintInspectionBase inspection, @NotNull String copyTo, @NotNull String extension)
throws IOException {
doTestHighlighting(inspection, copyTo, extension);