[java-tests] Inline introduce variable in property tests

GitOrigin-RevId: 77af7b2ef7e15a13bd0d09a22e21f1fce3237cc9
This commit is contained in:
Tagir Valeev
2020-12-17 12:27:59 +00:00
committed by intellij-monorepo-bot
parent 6958c18760
commit fce543ac60
2 changed files with 38 additions and 3 deletions
@@ -1,10 +1,15 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.java.propertyBased;
import com.intellij.codeInsight.template.impl.TemplateManagerImpl;
import com.intellij.codeInsight.template.impl.TemplateState;
import com.intellij.java.refactoring.InplaceIntroduceVariableTest;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.fileEditor.OpenFileDescriptor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.NlsSafe;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.*;
@@ -15,12 +20,16 @@ import com.intellij.refactoring.introduceVariable.IntroduceVariableSettings;
import com.intellij.refactoring.ui.TypeSelectorManagerImpl;
import com.intellij.refactoring.util.CommonRefactoringUtil;
import com.intellij.testFramework.propertyBased.ActionOnFile;
import com.intellij.testFramework.propertyBased.RandomActivityInterceptor;
import com.intellij.ui.UiInterceptors;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jetCheck.Generator;
import org.jetbrains.jetCheck.ImperativeCommand;
import java.util.List;
import static org.junit.Assert.assertNotNull;
public class IntroduceVariable extends ActionOnFile {
public IntroduceVariable(@NotNull PsiFile file) {
super(file);
@@ -40,13 +49,39 @@ public class IntroduceVariable extends ActionOnFile {
PsiExpression expression = env.generateValue(Generator.sampledFrom(expressions), "Expression");
TextRange range = expression.getTextRange();
editor.getSelectionModel().setSelection(range.getStartOffset(), range.getEndOffset());
if (env.generateValue(Generator.booleans(), "inline")) {
introduceVariableInline(env, project, editor, expression);
} else {
introduceVariableNoInline(env, project, editor, expression);
}
}
private static void introduceVariableInline(Environment env, Project project, Editor editor, PsiExpression expression) {
var handler = new InplaceIntroduceVariableTest.MyIntroduceVariableHandler();
Disposable disposable = Disposer.newDisposable();
try {
UiInterceptors.register(new RandomActivityInterceptor(env, disposable));
TemplateManagerImpl.setTemplateTesting(disposable);
handler.invokeImpl(project, expression, editor);
TemplateState state = TemplateManagerImpl.getTemplateState(editor);
assertNotNull(state);
state.gotoEnd(false);
}
catch (CommonRefactoringUtil.RefactoringErrorHintException ignored) { }
finally {
Disposer.dispose(disposable);
}
}
private static void introduceVariableNoInline(@NotNull Environment env, Project project, Editor editor, PsiExpression expression) {
IntroduceVariableBase handler = new MockIntroduceVariableHandler(env.generateValue(Generator.asciiIdentifiers(), "var name"),
env.generateValue(Generator.booleans(), "replaceAll"),
env.generateValue(Generator.booleans(), "replaceFinal"),
env.generateValue(Generator.booleans(), "replaceVar"),
env.generateValue(Generator.booleans(), "replaceLValues"));
try {
handler.invoke(project, expression, editor);
handler.invoke(project, expression, editor);
}
catch (CommonRefactoringUtil.RefactoringErrorHintException ignored) { }
}
@@ -21,7 +21,7 @@ import static org.junit.Assert.fail;
* A UI Interceptor which intercepts every known UI component shown and performs random activity within it
* logging that activity.
*/
class RandomActivityInterceptor extends UiInterceptors.UiInterceptor<Object> {
public class RandomActivityInterceptor extends UiInterceptors.UiInterceptor<Object> {
/**
* A sentinel UI component which is activated at dispose to remove the last interceptor
* from an interception queue.
@@ -29,7 +29,7 @@ class RandomActivityInterceptor extends UiInterceptors.UiInterceptor<Object> {
private static final Object SINK = ObjectUtils.sentinel("RandomActivityInterceptor.SINK");
private final ImperativeCommand.Environment myEnvironment;
RandomActivityInterceptor(ImperativeCommand.Environment env, Disposable disposable) {
public RandomActivityInterceptor(ImperativeCommand.Environment env, Disposable disposable) {
super(Object.class);
myEnvironment = env;
Disposer.register(disposable, () -> UiInterceptors.tryIntercept(SINK));