IDEA-189985 - RegistrationProblemsInspection - Move action tests from PluginXmlFunctionalTest to specific classes

GitOrigin-RevId: b4779798a4fd314163a7579926375bbe365b73a8
This commit is contained in:
Karol Lewandowski
2022-11-03 19:38:27 +00:00
committed by intellij-monorepo-bot
parent 375689d19f
commit 21d9d47e6a
10 changed files with 182 additions and 31 deletions
@@ -0,0 +1,2 @@
my.key=My Text
advanced.setting.mySettingKey=Advanced Setting Key
@@ -110,9 +110,9 @@ class PluginXmlFunctionalTest extends JavaCodeInsightFixtureTestCase {
String ideCore = PathUtil.getJarPathForClass(Configurable.class)
moduleBuilder.addLibrary("ide-core", ideCore)
String ideCoreImpl = PathUtil.getJarPathForClass(NotificationGroupEP.class)
moduleBuilder.addLibrary("ide-core-impl", ideCoreImpl);
moduleBuilder.addLibrary("ide-core-impl", ideCoreImpl)
moduleBuilder.addLibrary("util-ui", PathUtil.getJarPathForClass(AllIcons.class));
moduleBuilder.addLibrary("util-ui", PathUtil.getJarPathForClass(AllIcons.class))
}
// Gradle-like setup, but JBList not in Library
@@ -232,9 +232,9 @@ class PluginXmlFunctionalTest extends JavaCodeInsightFixtureTestCase {
String moduleDescriptorFilename = name+ ".xml"
VirtualFile moduleRoot = myFixture.tempDirFixture.findOrCreateDir(name)
VirtualFile file = myFixture.copyFileToProject(moduleDescriptorFilename, "/" + name + "/" + moduleDescriptorFilename)
Module dependencyModule = PsiTestUtil.addModule(getProject(), StdModuleTypes.JAVA, name, moduleRoot);
ModuleRootModificationUtil.setModuleSdk(dependencyModule, IdeaTestUtil.getMockJdk17());
ModuleRootModificationUtil.addDependency(getModule(), dependencyModule);
Module dependencyModule = PsiTestUtil.addModule(getProject(), StdModuleTypes.JAVA, name, moduleRoot)
ModuleRootModificationUtil.setModuleSdk(dependencyModule, IdeaTestUtil.getMockJdk17())
ModuleRootModificationUtil.addDependency(getModule(), dependencyModule)
return file
}
@@ -690,28 +690,6 @@ public class MyErrorHandler extends ErrorReportSubmitter {}
myFixture.checkResultByFile(getTestName(true) + "_after.xml")
}
@SuppressWarnings("ComponentNotRegistered")
void testActionHighlighting() {
configureByFile()
myFixture.copyFileToProject("MyBundle.properties")
myFixture.copyFileToProject("AnotherBundle.properties")
myFixture.addClass("package foo.bar; public class BarAction extends com.intellij.openapi.actionSystem.AnAction { }")
myFixture.addClass("""package foo; class PackagePrivateActionBase extends com.intellij.openapi.actionSystem.AnAction {
PackagePrivateActionBase() {}
} """)
myFixture.addClass("package foo; public class ActionWithDefaultConstructor extends PackagePrivateActionBase { }")
myFixture.addClass("package foo.bar; public class BarGroup extends com.intellij.openapi.actionSystem.ActionGroup { }")
myFixture.addClass("package foo.bar; import org.jetbrains.annotations.NotNull;" +
"public class GroupWithCanBePerformed extends com.intellij.openapi.actionSystem.ActionGroup { " +
" @Override " +
" public boolean canBePerformed(@NotNull com.intellij.openapi.actionSystem.DataContext context) {" +
" return true;" +
" }" +
"}")
myFixture.addFileToProject("keymaps/MyKeymap.xml", "<keymap/>")
myFixture.testHighlighting()
}
@SuppressWarnings("ComponentNotRegistered")
void testActionCompletion() {
configureByFile()
@@ -827,12 +805,12 @@ public class MyErrorHandler extends ErrorReportSubmitter {}
true)
}
static List<IntentionAction> actions(HighlightInfo info) {
List<IntentionAction> result = new ArrayList<IntentionAction>();
List<IntentionAction> result = new ArrayList<IntentionAction>()
info.findRegisteredQuickFix((descriptor,range) -> {
result.add(descriptor.getAction())
return null;
});
return result;
return null
})
return result
}
@@ -28,4 +28,28 @@ public class PluginXmlDomInspectionActionHighlightingTest extends PluginXmlDomIn
public void testActionWrongClass() {
myFixture.testHighlighting("ActionWrongClass.xml");
}
@SuppressWarnings({"ComponentNotRegistered", "removal"})
public void testActionComplexHighlighting() {
myFixture.copyFileToProject("MyBundle.properties");
myFixture.copyFileToProject("AnotherBundle.properties");
myFixture.addClass("package foo.bar; public class BarAction extends com.intellij.openapi.actionSystem.AnAction {}");
myFixture.addClass("""
package foo;
class PackagePrivateActionBase extends com.intellij.openapi.actionSystem.AnAction {
PackagePrivateActionBase() {}
}""");
myFixture.addClass("package foo; public class ActionWithDefaultConstructor extends PackagePrivateActionBase {}");
myFixture.addClass("package foo.bar; public class BarGroup extends com.intellij.openapi.actionSystem.ActionGroup {}");
myFixture.addClass("""
package foo.bar;
import org.jetbrains.annotations.NotNull;
public class GroupWithCanBePerformed extends com.intellij.openapi.actionSystem.ActionGroup {
@Override
public boolean canBePerformed(@NotNull com.intellij.openapi.actionSystem.DataContext context) { return true; }
}""");
myFixture.addFileToProject("keymaps/MyKeymap.xml", "<keymap/>");
myFixture.testHighlighting("ActionComplexHighlighting.xml");
}
}
@@ -0,0 +1,107 @@
<idea-plugin>
<resource-bundle>MyBundle</resource-bundle>
<actions>
<group id="myGroup">
<group id="myRecursiveGroup"/>
<action id="myRecursiveAction" class="foo.bar.BarAction"/>
</group>
<action id="myAction" class="foo.bar.BarAction" keymap="MyKeymap">
<keyboard-shortcut first-keystroke="F" keymap="MyKeymap"/>
<mouse-shortcut keystroke="button2" keymap="MyKeymap"/>
</action>
<group id=<error descr="Value must not be empty">""</error>/>
<group id="withClass" class="foo.bar.BarGroup"/>
<group id="invalidClass" class="<error descr="'java.lang.String' is not assignable to 'com.intellij.openapi.actionSystem.ActionGroup'">java.lang.String</error>"/>
<<warning descr="'id' should be specified">group</warning> class="foo.bar.BarGroup"/>
<group id="groupWithUseShortcutOf" class="foo.bar.GroupWithCanBePerformed" use-shortcut-of="myAction"/>
<group id="groupWithUseShortcutOfInvalid" class="foo.bar.GroupWithCanBePerformed" use-shortcut-of="<error descr="Cannot resolve action 'INVALID_VALUE'">INVALID_VALUE</error>"/>
<<error descr="'class' must be specified with 'use-shortcut-of'">group</error> id="groupWithUseShortcutOfWithoutClassAttribute" use-shortcut-of="myAction"/>
<group id="groupWithUseShortcutOfCanBePerformedNotOverridden" class="<error descr="Must override ActionGroup.canBePerformed(DataContext) with 'use-shortcut-of'">foo.bar.BarGroup</error>" use-shortcut-of="myAction"/>
<action id=<error descr="Value must not be empty">""</error> class="foo.bar.BarAction"/>
<action id="invalidClass" class="<error descr="'java.lang.String' is not assignable to 'com.intellij.openapi.actionSystem.AnAction'">java.lang.String</error>" />
<action id="withUseShortcutOf" class="foo.bar.BarAction" use-shortcut-of="myAction"/>
<action id="withUseShortcutOfGroupInvalid" class="foo.bar.BarAction" use-shortcut-of="<error descr="Cannot resolve action 'myGroup'">myGroup</error>"/>
<action id="withUseShortcutOfInvalid" class="foo.bar.BarAction" use-shortcut-of="<error descr="Cannot resolve action 'INVALID_VALUE'">INVALID_VALUE</error>"/>
<action id="withKeymapInvalid" class="foo.bar.BarAction" keymap="<error descr="Cannot resolve keymap 'INVALID_VALUE'">INVALID_VALUE</error>">
<keyboard-shortcut first-keystroke="F" keymap="<error descr="Cannot resolve keymap 'INVALID_VALUE'">INVALID_VALUE</error>"/>
<mouse-shortcut keystroke="button2" keymap="<error descr="Cannot resolve keymap 'INVALID_VALUE'">INVALID_VALUE</error>"/>
</action>
<action id="testAddToGroup" class="foo.bar.BarAction">
<add-to-group group-id="myGroup"/>
<add-to-group group-id="<error descr="Cannot resolve group 'myAction'">myAction</error>"/>
<add-to-group group-id="<error descr="Cannot resolve group 'INVALID_VALUE'">INVALID_VALUE</error>"/>
<add-to-group group-id="myGroup" relative-to-action="myAction" anchor="after"/>
<add-to-group group-id="myGroup" relative-to-action="<error descr="Cannot resolve action or group 'INVALID_VALUE'">INVALID_VALUE</error>" anchor="after"/>
<<error descr="'anchor' must be specified with 'relative-to-action'">add-to-group</error> group-id="myGroup" relative-to-action="myAction"/>
<add-to-group group-id="myGroup" relative-to-action="myAction" anchor="<error descr="Must use 'after'|'before' with 'relative-to-action'">first</error>"/>
</action>
<action id="testSynonymAttributes" class="foo.bar.BarAction">
<synonym text="Syn Text"/>
<synonym key="<error descr="Cannot resolve property key">INVALID_KEY</error>"/>
<<error descr="'<synonym>' must specify either 'key' or 'text' attribute">synonym</error>/>
<<error descr="'<synonym>' must not specify both 'key' or 'text' attributes">synonym</error> text="Syn Text" key="<error descr="Cannot resolve property key">INVALID_KEY</error>"/>
</action>
<reference id="myGroup"/>
<reference id="myAction"/>
<reference id="myRecursiveGroup"/>
<reference id="myRecursiveAction"/>
<reference id="<error descr="Cannot resolve action or group 'INVALID_VALUE'">INVALID_VALUE</error>"/>
<reference ref="myGroup"/>
<reference ref="myAction"/>
<reference ref="myRecursiveGroup"/>
<reference ref="myRecursiveAction"/>
<reference ref="<error descr="Cannot resolve action or group 'INVALID_VALUE'">INVALID_VALUE</error>"/>
<action id="WithDefaultConstructor" class="foo.ActionWithDefaultConstructor"/>
</actions>
<!-- separator/synonym I18N -->
<actions>
<group id="separatorGroup">
<separator key="my.key"/>
<separator key="<error descr="Cannot resolve property key">INVALID_KEY</error>"/>
</group>
<group id="synonymGroup">
<action class="foo.bar.BarAction">
<synonym key="my.key"/>
<synonym key="<error descr="Cannot resolve property key">INVALID_KEY</error>"/>
</action>
<reference ref="myGroup">
<synonym key="my.key"/>
<synonym key="<error descr="Cannot resolve property key">INVALID_KEY</error>"/>
</reference>
</group>
</actions>
<actions resource-bundle="AnotherBundle">
<group id="separatorGroupWithCustomResourceBundle">
<separator key="another.key"/>
<separator key="<error descr="Cannot resolve property key">my.key</error>"/>
</group>
<group id="synonymGroupWithCustomResourceBundle">
<action class="foo.bar.BarAction">
<synonym key="another.key"/>
<synonym key="<error descr="Cannot resolve property key">my.key</error>"/>
</action>
</group>
</actions>
<actions resource-bundle="<error descr="Cannot resolve property bundle">INVALID_BUNDLE</error>"/>
</idea-plugin>
@@ -0,0 +1,2 @@
my.key=My Text
advanced.setting.mySettingKey=Advanced Setting Key
@@ -2,6 +2,7 @@
package org.jetbrains.idea.devkit.kotlin.inspections;
import com.intellij.testFramework.TestDataPath;
import org.intellij.lang.annotations.Language;
import org.jetbrains.idea.devkit.inspections.PluginXmlDomInspectionTestBase;
import org.jetbrains.idea.devkit.kotlin.DevkitKtTestsUtil;
@@ -29,4 +30,37 @@ public class KtPluginXmlDomInspectionActionHighlightingTest extends PluginXmlDom
public void testActionWrongClass() {
myFixture.testHighlighting("ActionWrongClass.xml");
}
public void testActionComplexHighlighting() {
myFixture.copyFileToProject("MyBundle.properties");
myFixture.copyFileToProject("AnotherBundle.properties");
addKotlinClass("foo/bar/BarAction.kt",
"""
package foo.bar
class BarAction : com.intellij.openapi.actionSystem.AnAction() {}""");
addKotlinClass("foo/InternalActionBase.kt", """
package foo
internal class InternalActionBase : com.intellij.openapi.actionSystem.AnAction() {
constructor() {}
}""");
addKotlinClass("foo/ActionWithDefaultConstructor.kt", """
package foo
class ActionWithDefaultConstructor : InternalActionBase() {}""");
addKotlinClass("foo/bar/BarGroup.kt", """
package foo.bar
public class BarGroup : com.intellij.openapi.actionSystem.ActionGroup() {}""");
addKotlinClass("foo/bar/GroupWithCanBePerformed.kt", """
package foo.bar
public class GroupWithCanBePerformed : com.intellij.openapi.actionSystem.ActionGroup() {
override fun canBePerformed(context: com.intellij.openapi.actionSystem.DataContext): Boolean {
return true
}
}""");
myFixture.addFileToProject("keymaps/MyKeymap.xml", "<keymap/>");
myFixture.testHighlighting("ActionComplexHighlighting.xml");
}
private void addKotlinClass(String fileName, @Language("kotlin") String code) {
myFixture.addFileToProject(fileName, code);
}
}
@@ -8,7 +8,9 @@ public abstract class PluginXmlDomInspectionTestBase extends LightJavaCodeInsigh
@Override
protected void setUp() throws Exception {
super.setUp();
myFixture.addClass("package com.intellij.openapi.actionSystem; public interface DataContext {}");
myFixture.addClass("package com.intellij.openapi.actionSystem; public class AnAction {}");
myFixture.addClass("package com.intellij.openapi.actionSystem; public abstract class ActionGroup extends AnAction {}");
myFixture.addClass("package com.intellij.openapi.components; public interface ApplicationComponent {}");
myFixture.enableInspections(new PluginXmlDomInspection());
}