mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
check in more kinds of tests that intentions clear read-only status
This commit is contained in:
@@ -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,
|
||||
|
||||
+1
-29
@@ -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) {
|
||||
|
||||
+41
-6
@@ -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;
|
||||
|
||||
+2
-2
@@ -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");
|
||||
}
|
||||
|
||||
|
||||
+2
-3
@@ -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 {
|
||||
|
||||
+2
-3
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user