From d6a94bef2dccd240457b1f80a12f844d5cb58b91 Mon Sep 17 00:00:00 2001 From: Eugene Kudelevsky Date: Fri, 3 Feb 2012 21:29:43 +0400 Subject: [PATCH] android lint: some test for batch-mode-only inspections --- .../lint/global/duplicateIcons/dup1.png | Bin 0 -> 3609 bytes .../lint/global/duplicateIcons/dup2.png | Bin 0 -> 3609 bytes .../lint/global/duplicateIcons/expected.xml | 8 +++ .../lint/global/duplicateIcons/other.png | Bin 0 -> 209 bytes .../global/manifestOrder/AndroidManifest.xml | 10 ++++ .../lint/global/manifestOrder/expected.xml | 8 +++ .../lint/global/proguard/expected.xml | 8 +++ .../lint/global/proguard/proguard.cfg | 3 ++ .../jetbrains/android/AndroidLintTest.java | 50 +++++++++++++++++- 9 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 plugins/android/testData/lint/global/duplicateIcons/dup1.png create mode 100644 plugins/android/testData/lint/global/duplicateIcons/dup2.png create mode 100644 plugins/android/testData/lint/global/duplicateIcons/expected.xml create mode 100644 plugins/android/testData/lint/global/duplicateIcons/other.png create mode 100644 plugins/android/testData/lint/global/manifestOrder/AndroidManifest.xml create mode 100644 plugins/android/testData/lint/global/manifestOrder/expected.xml create mode 100644 plugins/android/testData/lint/global/proguard/expected.xml create mode 100644 plugins/android/testData/lint/global/proguard/proguard.cfg 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 0000000000000000000000000000000000000000..3779d4d33dc0c8b5c7db7e1d8f5cadca4d94f21d GIT binary patch literal 3609 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..3779d4d33dc0c8b5c7db7e1d8f5cadca4d94f21d GIT binary patch literal 3609 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..6adea85766473cb4f9ac2e3dfa64be54af90b9b8 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^>>$j+1|*LJg(*Z7pzScqpCXQGk7BR*`%ML~X2b~C& z%MBG~Am)on3fAEVEf^SEbTavlET0g{#3I3 + + + + + + \ 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);