/* * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jetbrains.idea.devkit.inspections; import com.intellij.codeInsight.intention.IntentionAction; import com.intellij.openapi.application.PluginPathManager; import com.intellij.openapi.util.text.StringUtil; import com.intellij.testFramework.TestDataPath; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.idea.devkit.dom.Anchor; import org.jetbrains.idea.devkit.inspections.quickfix.RegisterActionFix; import org.jetbrains.idea.devkit.util.ActionData; @TestDataPath("$CONTENT_ROOT/testData/inspections/componentNotRegistered") public class ComponentNotRegisteredInspectionTest extends PluginModuleTestCase { @Override protected String getBasePath() { return PluginPathManager.getPluginHomePathRelative("devkit") + "/testData/inspections/componentNotRegistered"; } @Override protected void setUp() throws Exception { super.setUp(); myFixture.addClass("package com.intellij.openapi.actionSystem; public class AnAction {}"); myFixture.addClass("package com.intellij.openapi.components; public interface ApplicationComponent {}"); myFixture.enableInspections(new ComponentNotRegisteredInspection()); } public void testRegisteredAction() { setPluginXml("registeredAction-plugin.xml"); myFixture.testHighlighting("RegisteredAction.java"); } public void testRegisteredActionInOptionalPluginDescriptor() { setPluginXml("registeredActionInOptionalPluginDescriptor-plugin.xml"); myFixture.copyFileToProject("registeredActionInOptionalPluginDescriptor-optional-plugin.xml", "META-INF/optional-plugin.xml"); myFixture.testHighlighting("RegisteredAction.java"); } public void testUnregisteredAction() { setPluginXml("unregisteredAction-plugin.xml"); myFixture.testHighlighting("UnregisteredAction.java"); RegisterActionFix.ourTestActionData = new MyActionData("UnregisteredAction"); final IntentionAction registerAction = myFixture.findSingleIntention("Register Action"); myFixture.launchAction(registerAction); myFixture.checkResultByFile("META-INF/plugin.xml", "unregisteredAction-plugin_after.xml", true); } public void testRegisteredApplicationComponent() { setPluginXml("registeredApplicationComponent-plugin.xml"); myFixture.testHighlighting("RegisteredApplicationComponent.java"); } public void testUnregisteredAbstractApplicationComponent() { myFixture.testHighlighting("UnregisteredAbstractApplicationComponent.java"); } public void testUnregisteredApplicationComponentWithoutPluginXml() { myFixture.testHighlighting("UnregisteredApplicationComponent.java", "UnregisteredApplicationComponentInterface.java"); } public void testUnregisteredApplicationComponentWithRegisterFix() { setPluginXml("unregisteredApplicationComponent-plugin.xml"); myFixture.testHighlighting("UnregisteredApplicationComponent.java", "UnregisteredApplicationComponentInterface.java"); final IntentionAction registerAction = myFixture.findSingleIntention("Register Application Component"); myFixture.launchAction(registerAction); myFixture.checkResultByFile("META-INF/plugin.xml", "unregisteredApplicationComponent-plugin_after.xml", true); } private static class MyActionData implements ActionData { private final String myActionClassFqn; public MyActionData(String actionClassFqn) { myActionClassFqn = actionClassFqn; } @NotNull @Override public String getActionId() { return StringUtil.getShortName(myActionClassFqn); } @NotNull @Override public String getActionText() { return "Action Text " + myActionClassFqn; } @Override public String getActionDescription() { return "Description " + myActionClassFqn; } @Nullable @Override public String getSelectedGroupId() { return getActionId() + "Group"; } @Nullable @Override public String getSelectedActionId() { return getActionId() + "SelectedAction"; } @Override public String getSelectedAnchor() { return Anchor.before.name(); } @Nullable @Override public String getFirstKeyStroke() { return "1st Key " + getActionId(); } @Nullable @Override public String getSecondKeyStroke() { return "2nd Key " + getActionId(); } } }