check in more kinds of tests that intentions clear read-only status

This commit is contained in:
peter
2016-11-24 11:23:36 +01:00
parent 493146db13
commit 78ebf19b3c
6 changed files with 49 additions and 49 deletions
@@ -23,7 +23,6 @@ import com.intellij.codeInsight.daemon.impl.HighlightInfo;
import com.intellij.codeInsight.daemon.quickFix.LightQuickFixTestCase;
import com.intellij.codeInsight.intention.IntentionAction;
import com.intellij.codeInsight.intention.IntentionManager;
import com.intellij.codeInsight.intention.impl.ShowIntentionActionsHandler;
import com.intellij.codeInspection.InspectionProfileEntry;
import com.intellij.codeInspection.InspectionToolProvider;
import com.intellij.codeInspection.LocalInspectionTool;
@@ -37,7 +36,6 @@ import com.intellij.lang.StdLanguages;
import com.intellij.lang.annotation.HighlightSeverity;
import com.intellij.lang.injection.InjectedLanguageManager;
import com.intellij.lang.java.JavaLanguage;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.Result;
import com.intellij.openapi.application.ex.PathManagerEx;
import com.intellij.openapi.command.WriteCommandAction;
@@ -65,7 +63,6 @@ import com.intellij.testFramework.InspectionsKt;
import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.UIUtil;
import com.intellij.xml.XmlSchemaProvider;
import gnu.trove.TIntArrayList;
import org.jetbrains.annotations.NonNls;
@@ -355,9 +352,7 @@ public abstract class DaemonAnalyzerTestCase extends CodeInsightTestCase {
IntentionAction intentionAction = findIntentionAction(infos, intentionActionName, editor, file);
assertNotNull(intentionActionName, intentionAction);
ApplicationManager.getApplication().invokeLater(
() -> assertTrue(ShowIntentionActionsHandler.chooseActionAndInvoke(file, editor, intentionAction, intentionActionName)));
UIUtil.dispatchAllInvocationEvents();
CodeInsightTestFixtureImpl.invokeIntention(intentionAction, file, editor, intentionActionName);
}
protected static IntentionAction findIntentionAction(@NotNull Collection<HighlightInfo> infos, @NotNull String intentionActionName, @NotNull Editor editor,
@@ -18,17 +18,12 @@ package com.intellij.codeInsight.daemon.quickFix;
import com.intellij.codeInsight.daemon.LightDaemonAnalyzerTestCase;
import com.intellij.codeInsight.daemon.impl.HighlightInfo;
import com.intellij.codeInsight.intention.IntentionAction;
import com.intellij.codeInsight.intention.impl.ShowIntentionActionsHandler;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.WriteAction;
import com.intellij.openapi.command.CommandProcessor;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vcs.readOnlyHandler.ReadonlyStatusHandlerImpl;
import com.intellij.openapi.vfs.CharsetToolkit;
import com.intellij.openapi.vfs.ReadonlyStatusHandler;
import com.intellij.psi.PsiFile;
import com.intellij.rt.execution.junit.FileComparisonFailure;
import com.intellij.testFramework.LightPlatformCodeInsightTestCase;
@@ -36,14 +31,12 @@ import com.intellij.testFramework.LightPlatformTestCase;
import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.ObjectUtils;
import com.intellij.util.io.ReadOnlyAttributeUtil;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.util.List;
public abstract class LightQuickFixTestCase extends LightDaemonAnalyzerTestCase {
@@ -129,28 +122,7 @@ public abstract class LightQuickFixTestCase extends LightDaemonAnalyzerTestCase
}
protected static void invoke(@NotNull IntentionAction action) throws IncorrectOperationException {
PsiFile file = getFile();
WriteAction.run(() -> {
try {
// Test that action will automatically clear the read-only attribute if modification is necessary.
// If your test fails due to this, make sure that your quick-fix/intention has the following line:
// if (!FileModificationService.getInstance().prepareFileForWrite(file)) return;
ReadOnlyAttributeUtil.setReadOnlyAttribute(file.getVirtualFile(), true);
}
catch (IOException e) {
throw new UncheckedIOException(e);
}
});
ReadonlyStatusHandlerImpl handler = (ReadonlyStatusHandlerImpl)ReadonlyStatusHandler.getInstance(file.getProject());
handler.setClearReadOnlyInTests(true);
try {
ApplicationManager.getApplication().invokeLater(() ->
ShowIntentionActionsHandler.chooseActionAndInvoke(file, getEditor(), action, action.getText()));
UIUtil.dispatchAllInvocationEvents();
}
finally {
handler.setClearReadOnlyInTests(false);
}
CodeInsightTestFixtureImpl.invokeIntention(action, getFile(), getEditor(), action.getText());
}
protected IntentionAction findActionAndCheck(@NotNull ActionHint hint, String testFullPath) {
@@ -58,10 +58,7 @@ import com.intellij.lang.annotation.HighlightSeverity;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.actionSystem.ex.ActionManagerEx;
import com.intellij.openapi.application.ReadAction;
import com.intellij.openapi.application.Result;
import com.intellij.openapi.application.TransactionGuard;
import com.intellij.openapi.application.WriteAction;
import com.intellij.openapi.application.*;
import com.intellij.openapi.command.CommandProcessor;
import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.openapi.editor.*;
@@ -89,6 +86,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.*;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vcs.readOnlyHandler.ReadonlyStatusHandlerImpl;
import com.intellij.openapi.vfs.*;
import com.intellij.profile.codeInspection.InspectionProjectProfileManager;
import com.intellij.psi.*;
@@ -115,6 +113,7 @@ import com.intellij.usageView.UsageInfo;
import com.intellij.util.*;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.indexing.FileBasedIndex;
import com.intellij.util.io.ReadOnlyAttributeUtil;
import com.intellij.util.ui.UIUtil;
import junit.framework.ComparisonFailure;
import org.jetbrains.annotations.NotNull;
@@ -123,7 +122,9 @@ import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.io.File;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -552,8 +553,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
@Override
public void launchAction(@NotNull final IntentionAction action) {
TransactionGuard.submitTransaction(getProject(), () -> ShowIntentionActionsHandler.chooseActionAndInvoke(getFile(), getEditor(), action, action.getText()));
UIUtil.dispatchAllInvocationEvents();
invokeIntention(action, getFile(), getEditor(), action.getText());
}
@Override
@@ -1737,6 +1737,41 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
}
}
public static boolean invokeIntention(@NotNull IntentionAction action, PsiFile file, Editor editor, String actionText) {
// Test that action will automatically clear the read-only attribute if modification is necessary.
// If your test fails due to this, make sure that your quick-fix/intention
// overrides "shouldMakeCurrentFileWritable" or has the following line:
// if (!FileModificationService.getInstance().prepareFileForWrite(file)) return;
ReadonlyStatusHandlerImpl handler = (ReadonlyStatusHandlerImpl)ReadonlyStatusHandler.getInstance(file.getProject());
setReadOnly(file, true);
handler.setClearReadOnlyInTests(true);
AtomicBoolean result = new AtomicBoolean();
try {
ApplicationManager.getApplication().invokeLater(
() -> result.set(ShowIntentionActionsHandler.chooseActionAndInvoke(file, editor, action, actionText)));
UIUtil.dispatchAllInvocationEvents();
}
catch (AssertionError e) {
ExceptionUtil.rethrowUnchecked(ExceptionUtil.getRootCause(e));
throw e;
}
finally {
handler.setClearReadOnlyInTests(false);
setReadOnly(file, false);
}
return result.get();
}
private static void setReadOnly(PsiFile file, boolean readOnlyStatus) {
try {
WriteAction.run(() -> ReadOnlyAttributeUtil.setReadOnlyAttribute(InjectedLanguageUtil.getTopLevelFile(file).getVirtualFile(), readOnlyStatus));
}
catch (IOException e) {
throw new UncheckedIOException(e);
}
}
private static class SelectionAndCaretMarkupLoader {
private final String filePath;
private final String newFileText;
@@ -3,7 +3,6 @@ package org.jetbrains.plugins.javaFX;
import com.intellij.codeInsight.daemon.DaemonAnalyzerTestCase;
import com.intellij.codeInsight.daemon.impl.HighlightInfo;
import com.intellij.codeInsight.intention.IntentionAction;
import com.intellij.codeInsight.intention.impl.ShowIntentionActionsHandler;
import com.intellij.openapi.application.PluginPathManager;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.roots.LanguageLevelProjectExtension;
@@ -15,6 +14,7 @@ import com.intellij.psi.JavaPsiFacade;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiFile;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.plugins.javaFX.codeInsight.JavaFxFieldToPropertyIntention;
import org.jetbrains.plugins.javaFX.fxml.AbstractJavaFXTestCase;
@@ -86,7 +86,7 @@ public class JavaFxFieldToPropertyTest extends DaemonAnalyzerTestCase {
Editor editor = getEditor();
PsiFile file = getFile();
assertTrue(ShowIntentionActionsHandler.chooseActionAndInvoke(file, editor, intentionAction,actionName));
assertTrue(CodeInsightTestFixtureImpl.invokeIntention(intentionAction, file, editor, actionName));
checkResultByFile(getTestName(false) + "_after.java");
}
@@ -18,11 +18,10 @@ package org.jetbrains.plugins.javaFX.fxml;
import com.intellij.codeInsight.daemon.DaemonAnalyzerTestCase;
import com.intellij.codeInsight.daemon.impl.HighlightInfo;
import com.intellij.codeInsight.intention.IntentionAction;
import com.intellij.codeInsight.intention.impl.ShowIntentionActionsHandler;
import com.intellij.openapi.application.PluginPathManager;
import com.intellij.openapi.editor.Editor;
import com.intellij.psi.PsiFile;
import com.intellij.testFramework.PsiTestUtil;
import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -65,7 +64,7 @@ public class JavaFXCollapseSubtagToAttributeTest extends DaemonAnalyzerTestCase
if (available) {
assertNotNull("Collapse tag '" + tagName + "' to attribute", intentionAction);
assertTrue(ShowIntentionActionsHandler.chooseActionAndInvoke(file, editor, intentionAction,
assertTrue(CodeInsightTestFixtureImpl.invokeIntention(intentionAction, file, editor,
"Collapse tag '" + tagName + "' to attribute"));
checkResultByFile(getTestName(true) + "_after.fxml");
} else {
@@ -18,11 +18,10 @@ package org.jetbrains.plugins.javaFX.fxml;
import com.intellij.codeInsight.daemon.DaemonAnalyzerTestCase;
import com.intellij.codeInsight.daemon.impl.HighlightInfo;
import com.intellij.codeInsight.intention.IntentionAction;
import com.intellij.codeInsight.intention.impl.ShowIntentionActionsHandler;
import com.intellij.openapi.application.PluginPathManager;
import com.intellij.openapi.editor.Editor;
import com.intellij.psi.PsiFile;
import com.intellij.testFramework.PsiTestUtil;
import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -66,7 +65,7 @@ public class JavaFXExpandAttributeTest extends DaemonAnalyzerTestCase {
if (available) {
assertNotNull(actionName, intentionAction);
assertTrue(ShowIntentionActionsHandler.chooseActionAndInvoke(file, editor, intentionAction, actionName));
assertTrue(CodeInsightTestFixtureImpl.invokeIntention(intentionAction, file, editor, actionName));
checkResultByFile(getTestName(true) + "_after.fxml");
} else {
assertNull(intentionAction);