From e9781665c8089ef7cf01c7638dd607ceb391a147 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Fri, 31 Mar 2017 18:19:40 +0300 Subject: [PATCH] made intention tests not dependent on internal representation of quick fix popup --- ...StaticPseudoFunctionalStyleMethodTest.java | 16 +----- ...requentlyUsedInheritorsInspectionTest.java | 24 ++++---- .../ChangeSignatureGestureTest.java | 6 +- .../com/siyeh/ig/IGQuickFixesTestCase.java | 21 +------ .../fixes/controlflow/TrivialIfFixTest.java | 3 +- .../CreateFieldFromParameterTest.groovy | 55 ++++++++----------- .../IntroduceLocalVariableTest.groovy | 12 ++-- .../jetbrains/python/fixtures/PyTestCase.java | 26 --------- .../quickFixes/PyAddImportQuickFixTest.java | 48 +++------------- 9 files changed, 56 insertions(+), 155 deletions(-) diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/StaticPseudoFunctionalStyleMethodTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/StaticPseudoFunctionalStyleMethodTest.java index 68a2176f68f5..5d2d28234f4e 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/StaticPseudoFunctionalStyleMethodTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/StaticPseudoFunctionalStyleMethodTest.java @@ -17,7 +17,6 @@ package com.intellij.codeInspection; import com.intellij.JavaTestUtil; import com.intellij.codeInsight.intention.IntentionAction; -import com.intellij.codeInspection.ex.QuickFixWrapper; import com.intellij.codeInspection.java18StreamApi.StaticPseudoFunctionalStyleMethodInspection; import com.intellij.openapi.application.PathManager; import com.intellij.pom.java.LanguageLevel; @@ -113,18 +112,9 @@ public class StaticPseudoFunctionalStyleMethodTest extends JavaCodeInsightFixtur private void doTest() { myFixture.configureByFile(getTestName(true) + "/test.java"); myFixture.enableInspections(new StaticPseudoFunctionalStyleMethodInspection()); - boolean isQuickFixFound = false; - for (IntentionAction action : myFixture.getAvailableIntentions()) { - if (action instanceof QuickFixWrapper) { - final LocalQuickFix fix = ((QuickFixWrapper)action).getFix(); - if (fix instanceof StaticPseudoFunctionalStyleMethodInspection.ReplacePseudoLambdaWithLambda) { - myFixture.launchAction(action); - isQuickFixFound = true; - break; - } - } - } - assertTrue("Quick fix isn't found", isQuickFixFound); + IntentionAction action = myFixture.getAvailableIntention("Replace with Java Stream API pipeline"); + assertNotNull("Quick fix isn't found", action); + myFixture.launchAction(action); myFixture.checkResultByFile(getTestName(true) + "/test_after.java"); } } diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/SuperClassHasFrequentlyUsedInheritorsInspectionTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/SuperClassHasFrequentlyUsedInheritorsInspectionTest.java index 08fc148e919f..c20df1211858 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/SuperClassHasFrequentlyUsedInheritorsInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/SuperClassHasFrequentlyUsedInheritorsInspectionTest.java @@ -2,6 +2,7 @@ package com.intellij.codeInspection; import com.intellij.JavaTestUtil; import com.intellij.codeInsight.intention.IntentionAction; +import com.intellij.codeInsight.intention.IntentionActionDelegate; import com.intellij.codeInspection.ex.QuickFixWrapper; import com.intellij.codeInspection.inheritance.ChangeSuperClassFix; import com.intellij.codeInspection.inheritance.SuperClassHasFrequentlyUsedInheritorsInspection; @@ -11,6 +12,7 @@ import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.HashSet; import org.jetbrains.annotations.Nullable; +import java.util.List; import java.util.Set; public class SuperClassHasFrequentlyUsedInheritorsInspectionTest extends JavaCodeInsightFixtureTestCase { @@ -65,7 +67,13 @@ public class SuperClassHasFrequentlyUsedInheritorsInspectionTest extends JavaCod myFixture.enableInspections(SuperClassHasFrequentlyUsedInheritorsInspection.class); final Set> actualSet = new HashSet>(); - for (IntentionAction intentionAction : myFixture.getAvailableIntentions()) { + + for (Pair pair : expectedResults) { + IntentionAction action = myFixture.findSingleIntention("Make extends '" + pair.getFirst() + + "' - " + pair.getSecond() + + "%"); + + IntentionAction intentionAction = ((IntentionActionDelegate)action).getDelegate(); if (intentionAction instanceof QuickFixWrapper) { ChangeSuperClassFix changeSuperClassFix = getQuickFixFromWrapper((QuickFixWrapper)intentionAction); if (changeSuperClassFix != null) { @@ -73,7 +81,6 @@ public class SuperClassHasFrequentlyUsedInheritorsInspectionTest extends JavaCod } } } - final Set> expectedSet = ContainerUtil.newHashSet(expectedResults); assertEquals(actualSet, expectedSet); } @@ -82,18 +89,9 @@ public class SuperClassHasFrequentlyUsedInheritorsInspectionTest extends JavaCod myFixture.configureByFile(getTestName(false) + ".java"); myFixture.enableInspections(SuperClassHasFrequentlyUsedInheritorsInspection.class); + List actions = myFixture.filterAvailableIntentions("Make extends '"); - final Set> actualSet = new HashSet>(); - for (IntentionAction intentionAction : myFixture.getAvailableIntentions()) { - if (intentionAction instanceof QuickFixWrapper) { - ChangeSuperClassFix changeSuperClassFix = getQuickFixFromWrapper((QuickFixWrapper)intentionAction); - if (changeSuperClassFix != null) { - actualSet.add(Pair.create(changeSuperClassFix.getNewSuperClass().getQualifiedName(), changeSuperClassFix.getPercent())); - } - } - } - - assertSize(expectedSize, actualSet); + assertEquals(expectedSize, actions.size()); } @Nullable diff --git a/java/java-tests/testSrc/com/intellij/refactoring/ChangeSignatureGestureTest.java b/java/java-tests/testSrc/com/intellij/refactoring/ChangeSignatureGestureTest.java index 1eabb6561392..dc89ef4dbd75 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/ChangeSignatureGestureTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/ChangeSignatureGestureTest.java @@ -16,6 +16,7 @@ package com.intellij.refactoring; import com.intellij.JavaTestUtil; +import com.intellij.codeInsight.intention.IntentionAction; import com.intellij.codeInspection.deadCode.UnusedDeclarationInspection; import com.intellij.openapi.command.CommandProcessor; import com.intellij.openapi.command.WriteCommandAction; @@ -28,11 +29,9 @@ import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiTypeElement; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.refactoring.changeSignature.ChangeSignatureHandler; -import com.intellij.refactoring.changeSignature.inplace.ApplyChangeSignatureAction; import com.intellij.refactoring.changeSignature.inplace.InplaceChangeSignature; import com.intellij.testFramework.PlatformTestCase; import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; -import com.intellij.util.containers.ContainerUtil; /** * User: anna @@ -50,7 +49,8 @@ public class ChangeSignatureGestureTest extends LightCodeInsightFixtureTestCase ChangeSignatureHandler.REFACTORING_NAME, null); run.run(); - myFixture.launchAction(ContainerUtil.findInstance(myFixture.getAvailableIntentions(), ApplyChangeSignatureAction.class)); + IntentionAction action = myFixture.findSingleIntention("Changing signature of "); + myFixture.launchAction(action); myFixture.checkResultByFile("/refactoring/changeSignatureGesture/" + getTestName(false) + "_after.java"); } diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/IGQuickFixesTestCase.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/IGQuickFixesTestCase.java index f184c962d5ac..8bcdb4ce62a9 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/IGQuickFixesTestCase.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/IGQuickFixesTestCase.java @@ -16,20 +16,15 @@ package com.siyeh.ig; import com.intellij.codeInsight.intention.IntentionAction; -import com.intellij.codeInspection.ex.QuickFixWrapper; import com.intellij.ide.highlighter.JavaFileType; import com.intellij.openapi.application.PluginPathManager; import com.intellij.pom.java.LanguageLevel; import com.intellij.testFramework.builders.JavaModuleFixtureBuilder; import com.intellij.testFramework.fixtures.JavaCodeInsightFixtureTestCase; import com.intellij.util.ArrayUtil; -import com.intellij.util.containers.ContainerUtil; import org.intellij.lang.annotations.Language; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; -import org.junit.Assert; - -import java.util.List; /** * @author anna @@ -109,24 +104,12 @@ public abstract class IGQuickFixesTestCase extends JavaCodeInsightFixtureTestCas protected void doTest(final String testName, final String hint) { myFixture.configureByFile(getRelativePath() + "/" + testName + ".java"); - final IntentionAction action = findIntention(hint); + final IntentionAction action = myFixture.getAvailableIntention(hint); assertNotNull(action); myFixture.launchAction(action); myFixture.checkResultByFile(getRelativePath() + "/" + testName + ".after.java"); } - public IntentionAction findIntention(@NotNull final String hint) { - final List allIntentions = myFixture.getAvailableIntentions(); - final List intentions = - ContainerUtil.findAll(allIntentions, - intentionAction -> intentionAction instanceof QuickFixWrapper && - intentionAction.getText().equals(hint)); - Assert.assertFalse("\"" + hint + "\" not in " + intentions, intentions.isEmpty()); - Assert.assertFalse("Too many quickfixes found for \"" + hint + "\": " + intentions + "]", intentions.size() > 1); - return intentions.get(0); - } - - protected void doExpressionTest( @NotNull String hint, @Language(value = "JAVA", prefix = "class $X$ {{System.out.print(", suffix = ");}}") @NotNull @NonNls String before, @@ -153,7 +136,7 @@ public abstract class IGQuickFixesTestCase extends JavaCodeInsightFixtureTestCas @NotNull String fileName) { before = before.replace("/**/", ""); myFixture.configureByText(fileName, before); - final IntentionAction intention = findIntention(hint); + IntentionAction intention = myFixture.getAvailableIntention(hint); assertNotNull(intention); myFixture.launchAction(intention); myFixture.checkResult(after); diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/controlflow/TrivialIfFixTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/controlflow/TrivialIfFixTest.java index bbb2f15873af..2cef14efe3ae 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/controlflow/TrivialIfFixTest.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/controlflow/TrivialIfFixTest.java @@ -15,7 +15,6 @@ */ package com.siyeh.ig.fixes.controlflow; -import com.siyeh.InspectionGadgetsBundle; import com.siyeh.ig.IGQuickFixesTestCase; import com.siyeh.ig.controlflow.TrivialIfInspection; @@ -26,7 +25,7 @@ public class TrivialIfFixTest extends IGQuickFixesTestCase { super.setUp(); myFixture.enableInspections(new TrivialIfInspection()); myRelativePath = "controlflow/trivialIf"; - myDefaultHint = InspectionGadgetsBundle.message("constant.conditional.expression.simplify.quickfix"); + myDefaultHint = "Simplify 'if else'"; } public void testComments() { diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/intentions/CreateFieldFromParameterTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/intentions/CreateFieldFromParameterTest.groovy index 550fe90208da..a715ef582dbc 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/intentions/CreateFieldFromParameterTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/intentions/CreateFieldFromParameterTest.groovy @@ -15,9 +15,8 @@ */ package org.jetbrains.plugins.groovy.intentions -import com.intellij.codeInsight.intention.impl.config.IntentionActionWrapper import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase -import org.jetbrains.plugins.groovy.intentions.declaration.GrCreateFieldForParameterIntention +import org.jetbrains.annotations.NotNull import org.jetbrains.plugins.groovy.util.TestUtils /** * @author Max Medvedev @@ -28,37 +27,31 @@ class CreateFieldFromParameterTest extends LightCodeInsightFixtureTestCase { "${TestUtils.testDataPath}intentions/createFieldFromParameter/" } - void test1() {doTest()} - void test2() {doTest()} - void test3() {doTest()} - void test4() {doTest()} - void _test5() {doTest()} - void _test6() {doTest()} - void _test7() {doTest()} - void test8() {doTest()} - void testArrayType() {doTest()} - void testBoundListTypeParameter() {doTest()} - void _testCaretOnMethod() {doTest()} - void _testCaretOnMethodWithOnlyAssignedParams() {doTest()} - void _testCaretOnMethodWithoutParams() {doTest()} - void testClassTypeParameter() {doTest()} - void testListClassTypeParameter() {doTest()} - void testListTypeParameter() {doTest()} - void _testNotNull() {doTest()} - void _testNullable() {doTest()} - void testSimpleTypeParameter() {doTest()} - void testTypeParameter() {doTest()} + void test1() {doTest("Create field for parameter 'id'")} + void test2() {doTest("Create field for parameter 'test'")} + void test3() {doTest("Create field for parameter 'length'")} + void test4() {doTest("Create field for parameter 'p1'")} + void _test5() {doTest("")} + void _test6() {doTest("")} + void _test7() {doTest("")} + void test8() {doTest("Create field for parameter 'p1'")} + void testArrayType() {doTest("Create field for parameter 'p1'")} + void testBoundListTypeParameter() {doTest("Create field for parameter 'p1'")} + void _testCaretOnMethod() {doTest("")} + void _testCaretOnMethodWithOnlyAssignedParams() {doTest("")} + void _testCaretOnMethodWithoutParams() {doTest("")} + void testClassTypeParameter() {doTest("Create field for parameter 'p1'")} + void testListClassTypeParameter() {doTest("Create field for parameter 'p1'")} + void testListTypeParameter() {doTest("Create field for parameter 'p1'")} + void _testNotNull() {doTest("")} + void _testNullable() {doTest("")} + void testSimpleTypeParameter() {doTest("Create field for parameter 'p1'")} + void testTypeParameter() {doTest("Create field for parameter 'p1'")} - private void doTest() { + private void doTest(@NotNull String hint) { myFixture.configureByFile("before${getTestName(false)}.groovy") - def intentions = myFixture.availableIntentions - for (intention in intentions) { - if (intention instanceof IntentionActionWrapper) intention = intention.delegate - if (intention instanceof GrCreateFieldForParameterIntention) { - myFixture.launchAction(intention) - break - } - } + def intention = myFixture.findSingleIntention(hint) + myFixture.launchAction(intention) myFixture.checkResultByFile("after${getTestName(false)}.groovy") } } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/introduceVariable/IntroduceLocalVariableTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/introduceVariable/IntroduceLocalVariableTest.groovy index 0c587e0031d3..1b8e1fd9e2b0 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/introduceVariable/IntroduceLocalVariableTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/introduceVariable/IntroduceLocalVariableTest.groovy @@ -15,7 +15,7 @@ */ package org.jetbrains.plugins.groovy.refactoring.introduceVariable -import com.intellij.codeInsight.intention.impl.config.IntentionActionWrapper +import com.intellij.codeInsight.intention.IntentionAction import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement @@ -24,7 +24,6 @@ import org.jetbrains.annotations.NotNull import org.jetbrains.plugins.groovy.intentions.GrIntentionTestCase import org.jetbrains.plugins.groovy.intentions.declaration.GrIntroduceLocalVariableIntention import org.jetbrains.plugins.groovy.util.TestUtils - /** * @author siosio */ @@ -52,12 +51,9 @@ class IntroduceLocalVariableTest extends GrIntentionTestCase { protected void doTest() { myFixture.configureByFile("${getTestName(false)}.groovy") def intentions = myFixture.availableIntentions - - for (intention in intentions) { - if (intention instanceof IntentionActionWrapper) intention = intention.delegate - if (intention instanceof GrIntroduceLocalVariableIntention) { - new MockGrIntroduceLocalVariableIntention().invoke(myFixture.project, myFixture.editor, myFixture.file) - } + IntentionAction intention = myFixture.getAvailableIntention("Introduce local variable") + if (intention != null) { + new MockGrIntroduceLocalVariableIntention().invoke(myFixture.project, myFixture.editor, myFixture.file) } myFixture.checkResultByFile("${getTestName(false)}-after.groovy") } diff --git a/python/testSrc/com/jetbrains/python/fixtures/PyTestCase.java b/python/testSrc/com/jetbrains/python/fixtures/PyTestCase.java index b9c59441ca0a..8370546e83f8 100644 --- a/python/testSrc/com/jetbrains/python/fixtures/PyTestCase.java +++ b/python/testSrc/com/jetbrains/python/fixtures/PyTestCase.java @@ -16,11 +16,8 @@ package com.jetbrains.python.fixtures; import com.google.common.base.Joiner; -import com.intellij.codeInsight.intention.IntentionAction; import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.codeInsight.lookup.LookupEx; -import com.intellij.codeInspection.LocalQuickFix; -import com.intellij.codeInspection.ex.QuickFixWrapper; import com.intellij.execution.actions.ConfigurationContext; import com.intellij.execution.actions.ConfigurationFromContext; import com.intellij.execution.actions.RunConfigurationProducer; @@ -201,29 +198,6 @@ public abstract class PyTestCase extends UsefulTestCase { } } - /** - * Searches for quickfix itetion by its class - * - * @param clazz quick fix class - * @param quick fix class - * @return quick fix or null if nothing found - */ - @Nullable - public T findQuickFixByClassInIntentions(@NotNull final Class clazz) { - - for (final IntentionAction action : myFixture.getAvailableIntentions()) { - if ((action instanceof QuickFixWrapper)) { - final QuickFixWrapper quickFixWrapper = (QuickFixWrapper)action; - final LocalQuickFix fix = quickFixWrapper.getFix(); - if (clazz.isInstance(fix)) { - @SuppressWarnings("unchecked") - final T result = (T)fix; - return result; - } - } - } - return null; - } protected static void assertNotParsed(PyFile file) { diff --git a/python/testSrc/com/jetbrains/python/quickFixes/PyAddImportQuickFixTest.java b/python/testSrc/com/jetbrains/python/quickFixes/PyAddImportQuickFixTest.java index 0868cf7c5283..f5b6f8843be9 100644 --- a/python/testSrc/com/jetbrains/python/quickFixes/PyAddImportQuickFixTest.java +++ b/python/testSrc/com/jetbrains/python/quickFixes/PyAddImportQuickFixTest.java @@ -16,18 +16,10 @@ package com.jetbrains.python.quickFixes; import com.intellij.codeInsight.intention.IntentionAction; -import com.intellij.codeInspection.ex.QuickFixWrapper; import com.intellij.psi.codeStyle.CommonCodeStyleSettings; -import com.intellij.util.Processor; -import com.intellij.util.containers.ContainerUtil; import com.jetbrains.python.PyQuickFixTestCase; -import com.jetbrains.python.codeInsight.imports.AutoImportQuickFix; -import com.jetbrains.python.codeInsight.imports.ImportCandidateHolder; import com.jetbrains.python.inspections.unresolvedReference.PyUnresolvedReferencesInspection; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.List; /** * @author Mikhail Golubev @@ -40,22 +32,12 @@ public class PyAddImportQuickFixTest extends PyQuickFixTestCase { } public void testOsPathFunctions() throws Exception { - doMultiFileAutoImportTest("Import", fix -> { - final List candidates = fix.getCandidates(); - final List names = ContainerUtil.map(candidates, c -> c.getPresentableText("join")); - assertSameElements(names, "os.path.join()"); - return true; - }); + doMultiFileAutoImportTest("Import 'os.path.join()'"); } // PY-19975 public void testCanonicalNamesFromHigherLevelPackage() { - doMultiFileAutoImportTest("Import", fix -> { - final List candidates = fix.getCandidates(); - final List names = ContainerUtil.map(candidates, c -> c.getPresentableText("MyClass")); - assertOrderedEquals(names, "bar.MyClass", "foo.MyClass"); - return true; - }); + doMultiFileAutoImportTest("Import this name"); } // PY-22422 @@ -65,37 +47,23 @@ public class PyAddImportQuickFixTest extends PyQuickFixTestCase { getPythonCodeStyleSettings().FROM_IMPORT_NEW_LINE_AFTER_LEFT_PARENTHESIS = true; getPythonCodeStyleSettings().FROM_IMPORT_PARENTHESES_FORCE_IF_MULTILINE = true; getPythonCodeStyleSettings().FROM_IMPORT_TRAILING_COMMA_IF_MULTILINE = true; - doMultiFileAutoImportTest("Import"); + doMultiFileAutoImportTest("Import 'bar from module'"); } // PY-21563 public void testCombineFromImportsForReferencesInTypeComment() { - doMultiFileAutoImportTest("Import"); + doMultiFileAutoImportTest("Import this name"); } private void doMultiFileAutoImportTest(@NotNull String hintPrefix) { - doMultiFileAutoImportTest(hintPrefix, null); - } - - private void doMultiFileAutoImportTest(@NotNull String hintPrefix, @Nullable Processor checkQuickfix) { myFixture.copyDirectoryToProject(getTestName(true), ""); myFixture.enableInspections(PyUnresolvedReferencesInspection.class); final String entryPoint = "main"; myFixture.configureByFile(entryPoint + ".py"); myFixture.checkHighlighting(true, false, false); - final List intentions = myFixture.filterAvailableIntentions(hintPrefix); - final IntentionAction intention = ContainerUtil.find(intentions, action -> { - return action instanceof QuickFixWrapper && ((QuickFixWrapper)action).getFix() instanceof AutoImportQuickFix; - }); - assertNotNull("Auto import quick fix starting with '" + hintPrefix + "' wasn't found", intention); - final AutoImportQuickFix quickfix = (AutoImportQuickFix)((QuickFixWrapper)intention).getFix(); - boolean applyFix = true; - if (checkQuickfix != null) { - applyFix = checkQuickfix.process(quickfix); - } - if (applyFix) { - myFixture.launchAction(intention); - myFixture.checkResultByFile(getTestName(true) + "/" + entryPoint + "_after.py", true); - } + IntentionAction intention = myFixture.findSingleIntention(hintPrefix); + + myFixture.launchAction(intention); + myFixture.checkResultByFile(getTestName(true) + "/" + entryPoint + "_after.py", true); } }