package org.jetbrains.android.dom; import com.android.SdkConstants; import com.intellij.codeInsight.completion.CompletionType; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.projectRoots.ProjectJdkTable; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.spellchecker.inspections.SpellCheckingInspection; import com.intellij.testFramework.fixtures.IdeaProjectTestFixture; import com.intellij.testFramework.fixtures.TestFixtureBuilder; import org.jetbrains.android.inspections.AndroidElementNotAllowedInspection; import org.jetbrains.android.inspections.AndroidUnknownAttributeInspection; import org.jetbrains.annotations.NotNull; import java.util.List; /** * @author coyote */ public class AndroidManifestDomTest extends AndroidDomTest { public AndroidManifestDomTest() { super(false, "dom/manifest"); } @Override protected String getPathToCopy(String testFileName) { return SdkConstants.FN_ANDROID_MANIFEST_XML; } public void testAttributeNameCompletion1() throws Throwable { doTestCompletionVariants("an1.xml", "android:icon", "android:label", "android:priority", "android:logo"); } public void testAttributeNameCompletion2() throws Throwable { doTestCompletionVariants("an2.xml", "debuggable", "description", "hasCode", "vmSafeMode"); } public void testAttributeNameCompletion3() throws Throwable { toTestCompletion("an3.xml", "an3_after.xml"); } public void testAttributeNameCompletion4() throws Throwable { toTestCompletion("an4.xml", "an4_after.xml"); } public void testAttributeByLocalNameCompletion() throws Throwable { toTestCompletion("attrByLocalName.xml", "attrByLocalName_after.xml"); } public void testTagNameCompletion2() throws Throwable { doTestCompletionVariants("tn2.xml", "manifest"); } public void testHighlighting() throws Throwable { doTestHighlighting("hl.xml"); } public void testHighlighting2() throws Throwable { doTestHighlighting("hl2.xml"); } public void testTagNameCompletion3() throws Throwable { toTestCompletion("tn3.xml", "tn3_after.xml"); } public void testTagNameCompletion4() throws Throwable { toTestCompletion("tn4.xml", "tn4_after.xml"); } public void testAttributeValueCompletion1() throws Throwable { doTestCompletionVariants("av1.xml", "behind", "landscape", "nosensor", "portrait", "sensor", "unspecified", "user", "fullSensor", "reverseLandscape", "reversePortrait", "sensorLandscape", "sensorPortrait", "fullUser", "locked", "userLandscape", "userPortrait"); } public void testResourceCompletion1() throws Throwable { doTestCompletionVariants("av2.xml", "@android:", "@style/style1"); } public void testResourceCompletion2() throws Throwable { doTestCompletionVariants("av3.xml", "@android:", "@string/hello", "@string/hello1", "@string/welcome", "@string/welcome1", "@string/itStr"); } public void testResourceCompletion3() throws Throwable { doTestCompletionVariants("av4.xml", "@android:", "@color/", "@dimen/", "@drawable/", "@id/", "@string/", "@style/"); } public void testTagNameCompletion1() throws Throwable { doTestCompletionVariants("tn1.xml", "uses-permission", "uses-sdk", "uses-configuration", "uses-feature"); } public void testSoftTagsAndAttrs() throws Throwable { myFixture.disableInspections(new AndroidUnknownAttributeInspection()); myFixture.disableInspections(new AndroidElementNotAllowedInspection()); doTestHighlighting("soft.xml"); } public void testUnknownAttribute() throws Throwable { doTestHighlighting("unknownAttribute.xml"); } /*public void testNamespaceCompletion() throws Throwable { toTestCompletion("ns.xml", "ns_after.xml"); }*/ public void testInnerActivityHighlighting() throws Throwable { copyFileToProject("A.java", "src/p1/p2/A.java"); doTestHighlighting(getTestName(false) + ".xml"); } public void testInnerActivityCompletion() throws Throwable { copyFileToProject("A.java", "src/p1/p2/A.java"); doTestCompletionVariants(getTestName(false) + ".xml", "B"); } public void testActivityCompletion1() throws Throwable { copyFileToProject("MyActivity1.java", "src/p1/p2/p3/MyActivity1.java"); copyFileToProject("MyActivity2.java", "src/p1/MyActivity2.java"); copyFileToProject("MyActivity.java", "src/p1/p2/MyActivity.java"); doTestCompletionVariants(getTestName(false) + ".xml", ".MyActivity", ".p3.MyActivity1", "p1.MyActivity2"); } public void testActivityCompletion2() throws Throwable { copyFileToProject("MyActivity.java", "src/p1/p2/MyActivity.java"); doTestCompletionVariants(getTestName(false) + ".xml", "p2.MyActivity"); } public void testActivityCompletion3() throws Throwable { copyFileToProject("MyActivity.java", "src/p1/p2/MyActivity.java"); copyFileToProject("MyActivity1.java", "src/p1/p2/p3/MyActivity1.java"); doTestCompletionVariants(getTestName(false) + ".xml", ".MyActivity", ".p3.MyActivity1"); } public void testActivityCompletion4() throws Throwable { copyFileToProject("MyActivity.java", "src/p1/p2/MyActivity.java"); copyFileToProject("MyActivity1.java", "src/p1/p2/p3/MyActivity1.java"); doTestCompletionVariants(getTestName(false) + ".xml", "MyActivity", "p3.MyActivity1"); } public void testActivityCompletion5() throws Throwable { copyFileToProject("MyActivity.java", "src/p1/p2/MyActivity.java"); copyFileToProject("MyActivity1.java", "src/p1/p2/p3/MyActivity1.java"); copyFileToProject("MyActivity2.java", "src/p1/MyActivity2.java"); doTestCompletionVariants(getTestName(false) + ".xml", "MyActivity", "p3.MyActivity1"); } public void testActivityCompletion6() throws Throwable { copyFileToProject("MyActivity.java", "src/p1/p2/MyActivity.java"); doTestCompletion(false); } public void testParentActivityCompletion1() throws Throwable { copyFileToProject("MyActivity.java", "src/p1/p2/MyActivity.java"); copyFileToProject("MyActivity1.java", "src/p1/p2/p3/MyActivity1.java"); copyFileToProject("MyActivity2.java", "src/p1/MyActivity2.java"); doTestCompletionVariants(getTestName(false) + ".xml", ".MyActivity", ".p3.MyActivity1", "p1.MyActivity2"); } public void testBackupAgentCompletion() throws Throwable { copyFileToProject("MyBackupAgent.java", "src/p1/p2/MyBackupAgent.java"); doTestCompletionVariants(getTestName(false) + ".xml", ".MyBackupAgent"); } public void testUsesPermissionCompletion() throws Throwable { doTestCompletion(false); } public void testUsesPermissionCompletion1() throws Throwable { myFixture.configureFromExistingVirtualFile( copyFileToProject(getTestName(false) + ".xml")); myFixture.complete(CompletionType.BASIC); myFixture.type('\n'); myFixture.checkResultByFile(testFolder + '/' + getTestName(false) + "_after.xml"); } public void testUsesPermissionDoc() throws Throwable { myFixture.configureFromExistingVirtualFile( copyFileToProject(getTestName(false) + ".xml")); myFixture.complete(CompletionType.BASIC); myFixture.type("WI"); doTestExternalDoc("Allows applications to access information about Wi-Fi networks"); } public void testUsesPermissionDoc1() throws Throwable { myFixture.configureFromExistingVirtualFile( copyFileToProject(getTestName(false) + ".xml")); doTestExternalDoc("Allows applications to access information about Wi-Fi networks"); } public void testIntentActionDoc() throws Throwable { myFixture.configureFromExistingVirtualFile( copyFileToProject(getTestName(false) + ".xml")); myFixture.complete(CompletionType.BASIC); myFixture.type("_BUT"); doTestExternalDoc("The user pressed the \"call\" button to go to the dialer"); } public void testIntentActionDoc1() throws Throwable { myFixture.configureFromExistingVirtualFile( copyFileToProject(getTestName(false) + ".xml")); doTestExternalDoc("The user pressed the \"call\" button to go to the dialer"); } public void testIntentActionDoc2() throws Throwable { myFixture.configureFromExistingVirtualFile( copyFileToProject(getTestName(false) + ".xml")); doTestExternalDoc("The user pressed the \"call\" button to go to the dialer"); } public void testIntentActionCompletion1() throws Throwable { doTestCompletionVariants(getTestName(false) + ".xml", "android.intent.action.CALL", "android.intent.action.CALL_BUTTON"); } public void testIntentActionCompletion2() throws Throwable { doTestCompletionVariants(getTestName(false) + ".xml", "android.intent.action.CAMERA_BUTTON", "android.intent.action.NEW_OUTGOING_CALL"); } public void testIntentActionCompletion3() throws Throwable { doTestCompletionVariants(getTestName(false) + ".xml"); } public void testIntentCategoryCompletion() throws Throwable { doTestCompletion(false); } public void testIntentActionsHighlighting() throws Throwable { doTestHighlighting(); } public void testIntentCategoryDoc() throws Throwable { myFixture.configureFromExistingVirtualFile( copyFileToProject(getTestName(false) + ".xml")); myFixture.complete(CompletionType.BASIC); myFixture.type("BRO"); doTestExternalDoc("The activity should be able to browse the Internet."); } public void testIntentCategoryDoc1() throws Throwable { myFixture.configureFromExistingVirtualFile( copyFileToProject(getTestName(false) + ".xml")); doTestExternalDoc("The activity should be able to browse the Internet."); } public void testIntentCategoryDoc2() throws Throwable { myFixture.configureFromExistingVirtualFile( copyFileToProject(getTestName(false) + ".xml")); doTestExternalDoc("To be used as a test"); } public void testApplicationNameCompletion() throws Throwable { copyFileToProject("MyApplication.java", "src/p1/p2/MyApplication.java"); doTestCompletion(false); } public void testManageSpaceActivity() throws Throwable { copyFileToProject("MyActivity.java", "src/p1/p2/MyActivity.java"); doTestCompletion(false); } public void testInstrumentationRunner() throws Throwable { doTestHighlighting(getTestName(false) + ".xml"); } public void testInstrumentationRunner1() throws Throwable { doTestHighlighting(getTestName(false) + ".xml"); } public void testInstrumentationRunner2() throws Throwable { doTestCompletion(false); } @Override protected void configureAdditionalModules(@NotNull TestFixtureBuilder<IdeaProjectTestFixture> projectBuilder, @NotNull List<MyAdditionalModuleData> modules) { if ("testInstrumentationRunner1".equals(getName()) || "testInstrumentationRunner2".equals(getName())) { addModuleWithAndroidFacet(projectBuilder, modules, "module1", false); } } public void testIntentsCompletion1() throws Throwable { doTestCompletion(); } public void testIntentsCompletion2() throws Throwable { doTestCompletion(); } public void testCompletionInManifestTag() throws Throwable { doTestCompletion(); } public void testActivityAlias() throws Throwable { copyFileToProject("MyActivity.java", "src/p1/p2/MyActivity.java"); doTestHighlighting(); } public void testActivityAlias1() throws Throwable { copyFileToProject("MyActivity.java", "src/p1/p2/MyActivity.java"); doTestHighlighting(); } public void testActivityAlias2() throws Throwable { copyFileToProject("MyActivity.java", "src/p1/p2/MyActivity.java"); doTestHighlighting(); } public void testActivityAlias3() throws Throwable { copyFileToProject("MyActivity.java", "src/p1/p2/MyActivity.java"); doTestHighlighting(); } public void testIntegerRefAsEnumValue() throws Throwable { copyFileToProject("myIntResource.xml", "res/values/myIntResource.xml"); doTestCompletion(); } public void testJavaHighlighting() throws Throwable { copyFileToProject("PermissionsManifest.xml", "AndroidManifest.xml"); copyFileToProject("Manifest.java", "src/p1/p2/Manifest.java"); doTestJavaHighlighting("p1.p2"); } public void testAndroidPrefixCompletion() throws Throwable { // do not complete prefix in manifest because there is not many attributes doTestAndroidPrefixCompletion(null); } public void testNamespaceCompletion() throws Throwable { doTestNamespaceCompletion(true, true); } public void testNamespaceCompletion1() throws Throwable { doTestNamespaceCompletion(true, false); } public void testCompatibleScreensCompletion() throws Throwable { doTestCompletion(); } public void testCompatibleScreensHighlighting() throws Throwable { doTestHighlighting(); } public void testHexInteger() throws Throwable { doTestHighlighting(); } public void testMinSdkVersionAttributeValueCompletion() throws Throwable { doTestSdkVersionAttributeValueCompletion(); } public void testTargetSdkVersionAttributeValueCompletion() throws Throwable { doTestSdkVersionAttributeValueCompletion(); } public void testMaxSdkVersionAttributeValueCompletion() throws Throwable { doTestSdkVersionAttributeValueCompletion(); } public void testSpellchecker1() throws Throwable { myFixture.enableInspections(SpellCheckingInspection.class); doTestHighlighting(); } public void testSpellchecker2() throws Throwable { doTestSpellcheckerQuickFixes(); } private void doTestSdkVersionAttributeValueCompletion() throws Throwable { final ProjectJdkTable projectJdkTable = ProjectJdkTable.getInstance(); final Sdk sdk = ModuleRootManager.getInstance(myModule).getSdk(); ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() { projectJdkTable.addJdk(sdk); } }); try { doTestCompletionVariants(getTestName(true) + ".xml", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "L"); } finally { ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() { projectJdkTable.removeJdk(sdk); } }); } } }