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);