diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/AbstractQuickFixTest.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/AbstractQuickFixTest.java index ccbc8ff9b2e..1f48725d411 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/AbstractQuickFixTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/AbstractQuickFixTest.java @@ -35,7 +35,9 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.stubs.StubUpdatingIndex; import com.intellij.rt.execution.junit.FileComparisonFailure; import com.intellij.util.indexing.FileBasedIndex; +import kotlin.CollectionsKt; import kotlin.StringsKt; +import kotlin.jvm.functions.Function1; import org.apache.commons.lang.SystemUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -81,12 +83,12 @@ public abstract class AbstractQuickFixTest extends KotlinLightQuickFixTestCase { //region Severe hack - lot of code copied from LightQuickFixTestCase to workaround stupid format of test data with before/after prefixes @Override protected void doSingleTest(String fileSuffix) { - doTestFor(fileSuffix, createWrapper()); + doKotlinQuickFixTest(fileSuffix, createWrapper()); } private static QuickFixTestCase myWrapper; - private void doTestFor(final String testName, final QuickFixTestCase quickFixTestCase) { + private void doKotlinQuickFixTest(final String testName, final QuickFixTestCase quickFixTestCase) { String relativePath = notNull(quickFixTestCase.getBasePath(), "") + "/" + StringsKt.decapitalize(testName); final String testFullPath = quickFixTestCase.getTestDataPath().replace(File.separatorChar, '/') + relativePath; final File testFile = new File(testFullPath); @@ -161,7 +163,7 @@ public abstract class AbstractQuickFixTest extends KotlinLightQuickFixTestCase { } //endregion - private void configureRuntimeIfNeeded(@NotNull String beforeFileName) { + private static void configureRuntimeIfNeeded(@NotNull String beforeFileName) { if (beforeFileName.endsWith("JsRuntime.kt")) { // Without the following line of code subsequent tests with js-runtime will be prone to failure due "outdated stub in index" error. FileBasedIndex.getInstance().requestRebuild(StubUpdatingIndex.INDEX_ID); @@ -200,10 +202,28 @@ public abstract class AbstractQuickFixTest extends KotlinLightQuickFixTestCase { String prefix = "class "; if (pair.first.startsWith(prefix)) { String className = pair.first.substring(prefix.length()); - Class aClass = Class.forName(className); + final Class aClass = Class.forName(className); assert IntentionAction.class.isAssignableFrom(aClass) : className + " should be inheritor of IntentionAction"; - Set validActions = new HashSet(InTextDirectivesUtils.findLinesWithPrefixesRemoved(text, "// ACTION:")); + final Set validActions = new HashSet(InTextDirectivesUtils.findLinesWithPrefixesRemoved(text, "// ACTION:")); + + CollectionsKt.removeAll(actions, new Function1() { + @Override + public Boolean invoke(IntentionAction action) { + return !aClass.isAssignableFrom(action.getClass()) || validActions.contains(action.getText()); + } + }); + + if (!actions.isEmpty()) { + Assert.fail("Unexpected intention actions present\n " + + CollectionsKt.map(actions, new Function1() { + @Override + public String invoke(IntentionAction action) { + return action.getClass().toString() + " " + action.toString() + "\n"; + } + }) + ); + } for (IntentionAction action : actions) { if (aClass.isAssignableFrom(action.getClass()) && !validActions.contains(action.getText())) { @@ -213,13 +233,13 @@ public abstract class AbstractQuickFixTest extends KotlinLightQuickFixTestCase { } else { // Action shouldn't be found. Check that other actions are expected and thus tested action isn't there under another name. - DirectiveBasedActionUtils.INSTANCE$.checkAvailableActionsAreExpected((KtFile) getFile(), actions); + DirectiveBasedActionUtils.INSTANCE.checkAvailableActionsAreExpected(getFile(), actions); } } } public static void checkForUnexpectedErrors() { - DirectiveBasedActionUtils.INSTANCE$.checkForUnexpectedErrors((KtFile) getFile()); + DirectiveBasedActionUtils.INSTANCE.checkForUnexpectedErrors((KtFile) getFile()); } @Override