From fce543ac6018b411e519fe01ddc71a8c1bbd138b Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Thu, 17 Dec 2020 17:46:59 +0700 Subject: [PATCH] [java-tests] Inline introduce variable in property tests GitOrigin-RevId: 77af7b2ef7e15a13bd0d09a22e21f1fce3237cc9 --- .../java/propertyBased/IntroduceVariable.java | 37 ++++++++++++++++++- .../RandomActivityInterceptor.java | 4 +- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/java/java-tests/testSrc/com/intellij/java/propertyBased/IntroduceVariable.java b/java/java-tests/testSrc/com/intellij/java/propertyBased/IntroduceVariable.java index efd830376a70..a18e99808a9e 100644 --- a/java/java-tests/testSrc/com/intellij/java/propertyBased/IntroduceVariable.java +++ b/java/java-tests/testSrc/com/intellij/java/propertyBased/IntroduceVariable.java @@ -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) { } } diff --git a/platform/testFramework/src/com/intellij/testFramework/propertyBased/RandomActivityInterceptor.java b/platform/testFramework/src/com/intellij/testFramework/propertyBased/RandomActivityInterceptor.java index 241a6c2bca47..f609db3c1b76 100644 --- a/platform/testFramework/src/com/intellij/testFramework/propertyBased/RandomActivityInterceptor.java +++ b/platform/testFramework/src/com/intellij/testFramework/propertyBased/RandomActivityInterceptor.java @@ -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 { +public class RandomActivityInterceptor extends UiInterceptors.UiInterceptor { /** * 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 { 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));