mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
abstract test case for inplace introduction
This commit is contained in:
+60
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Copyright 2000-2011 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.refactoring;
|
||||
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.projectRoots.impl.JavaSdkImpl;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.testFramework.IdeaTestCase;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* User: anna
|
||||
*/
|
||||
public abstract class AbstractJavaInplaceIntroduceTest extends AbstractInplaceIntroduceTest {
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
IdeaTestCase.initPlatformPrefix();
|
||||
super.setUp();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
protected PsiExpression getExpressionFromEditor() {
|
||||
final PsiExpression expression =
|
||||
PsiTreeUtil.getParentOfType(getFile().findElementAt(getEditor().getCaretModel().getOffset()), PsiExpression.class);
|
||||
if (expression instanceof PsiReferenceExpression && expression.getParent() instanceof PsiMethodCallExpression) {
|
||||
return (PsiExpression)expression.getParent();
|
||||
}
|
||||
return expression;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected PsiLocalVariable getLocalVariableFromEditor() {
|
||||
final PsiLocalVariable localVariable =
|
||||
PsiTreeUtil.getParentOfType(getFile().findElementAt(getEditor().getCaretModel().getOffset()), PsiLocalVariable.class);
|
||||
assertNotNull(localVariable);
|
||||
return localVariable;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Sdk getProjectJDK() {
|
||||
return JavaSdkImpl.getMockJdk17();
|
||||
}
|
||||
}
|
||||
@@ -22,14 +22,13 @@ import com.intellij.psi.PsiExpression;
|
||||
import com.intellij.psi.PsiLocalVariable;
|
||||
import com.intellij.refactoring.introduce.inplace.AbstractInplaceIntroducer;
|
||||
import com.intellij.refactoring.introduceField.IntroduceConstantHandler;
|
||||
import com.intellij.refactoring.introduceField.IntroduceFieldHandler;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* User: anna
|
||||
* Date: 3/16/11
|
||||
*/
|
||||
public class InplaceIntroduceConstantTest extends AbstractInplaceIntroduceTest {
|
||||
public class InplaceIntroduceConstantTest extends AbstractJavaInplaceIntroduceTest {
|
||||
|
||||
private static final String BASE_PATH = "/refactoring/inplaceIntroduceConstant/";
|
||||
|
||||
@@ -112,7 +111,7 @@ public class InplaceIntroduceConstantTest extends AbstractInplaceIntroduceTest {
|
||||
return new MyIntroduceConstantHandler();
|
||||
}
|
||||
|
||||
public static class MyIntroduceConstantHandler extends IntroduceConstantHandler implements MyIntroduceHandler {
|
||||
public static class MyIntroduceConstantHandler extends IntroduceConstantHandler implements MyIntroduceHandler<PsiExpression, PsiLocalVariable> {
|
||||
@Override
|
||||
public boolean invokeImpl(Project project, @NotNull PsiExpression selectedExpr, Editor editor) {
|
||||
return super.invokeImpl(project, selectedExpr, editor);
|
||||
|
||||
@@ -28,7 +28,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
* User: anna
|
||||
* Date: 3/16/11
|
||||
*/
|
||||
public class InplaceIntroduceFieldTest extends AbstractInplaceIntroduceTest {
|
||||
public class InplaceIntroduceFieldTest extends AbstractJavaInplaceIntroduceTest {
|
||||
|
||||
private static final String BASE_PATH = "/refactoring/inplaceIntroduceField/";
|
||||
|
||||
@@ -98,7 +98,7 @@ public class InplaceIntroduceFieldTest extends AbstractInplaceIntroduceTest {
|
||||
return new MyIntroduceFieldHandler();
|
||||
}
|
||||
|
||||
public static class MyIntroduceFieldHandler extends IntroduceFieldHandler implements MyIntroduceHandler {
|
||||
public static class MyIntroduceFieldHandler extends IntroduceFieldHandler implements MyIntroduceHandler<PsiExpression, PsiLocalVariable> {
|
||||
@Override
|
||||
public boolean invokeImpl(Project project, @NotNull PsiExpression selectedExpr, Editor editor) {
|
||||
return super.invokeImpl(project, selectedExpr, editor);
|
||||
|
||||
@@ -15,26 +15,20 @@
|
||||
*/
|
||||
package com.intellij.refactoring;
|
||||
|
||||
import com.intellij.codeInsight.template.TemplateManager;
|
||||
import com.intellij.codeInsight.template.impl.TemplateManagerImpl;
|
||||
import com.intellij.codeInsight.template.impl.TemplateState;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Pass;
|
||||
import com.intellij.psi.PsiExpression;
|
||||
import com.intellij.psi.PsiLocalVariable;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.refactoring.introduce.inplace.AbstractInplaceIntroducer;
|
||||
import com.intellij.refactoring.introduceParameter.InplaceIntroduceParameterPopup;
|
||||
import com.intellij.refactoring.introduceParameter.IntroduceParameterHandler;
|
||||
import com.intellij.testFramework.LightCodeInsightTestCase;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* User: anna
|
||||
* Date: 3/16/11
|
||||
*/
|
||||
public class InplaceIntroduceParameterTest extends AbstractInplaceIntroduceTest {
|
||||
public class InplaceIntroduceParameterTest extends AbstractJavaInplaceIntroduceTest {
|
||||
|
||||
private static final String BASE_PATH = "/refactoring/inplaceIntroduceParameter/";
|
||||
|
||||
@@ -99,7 +93,7 @@ public class InplaceIntroduceParameterTest extends AbstractInplaceIntroduceTest
|
||||
fail("Conflict expected");
|
||||
}
|
||||
|
||||
private static class MyIntroduceParameterHandler extends IntroduceParameterHandler implements MyIntroduceHandler {
|
||||
private static class MyIntroduceParameterHandler extends IntroduceParameterHandler implements MyIntroduceHandler<PsiExpression, PsiLocalVariable> {
|
||||
|
||||
@Override
|
||||
public boolean invokeImpl(Project project, @NotNull PsiExpression selectedExpr, Editor editor) {
|
||||
|
||||
+28
-38
@@ -21,39 +21,41 @@ import com.intellij.codeInsight.template.impl.TemplateState;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Pass;
|
||||
import com.intellij.psi.PsiExpression;
|
||||
import com.intellij.psi.PsiLocalVariable;
|
||||
import com.intellij.psi.PsiMethodCallExpression;
|
||||
import com.intellij.psi.PsiReferenceExpression;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiNameIdentifierOwner;
|
||||
import com.intellij.refactoring.introduce.inplace.AbstractInplaceIntroducer;
|
||||
import com.intellij.refactoring.introduceField.IntroduceFieldHandler;
|
||||
import com.intellij.testFramework.LightCodeInsightTestCase;
|
||||
import com.intellij.testFramework.LightPlatformCodeInsightTestCase;
|
||||
import com.intellij.testFramework.LightPlatformTestCase;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* User: anna
|
||||
* Date: 8/25/11
|
||||
*/
|
||||
public abstract class AbstractInplaceIntroduceTest extends LightCodeInsightTestCase {
|
||||
public abstract class AbstractInplaceIntroduceTest<E extends PsiElement, V extends PsiNameIdentifierOwner> extends LightPlatformCodeInsightTestCase {
|
||||
@Nullable protected abstract V getLocalVariableFromEditor();
|
||||
@Nullable protected abstract E getExpressionFromEditor();
|
||||
|
||||
protected abstract String getBasePath();
|
||||
protected abstract MyIntroduceHandler<E, V> createIntroduceHandler();
|
||||
|
||||
protected void doTestEscape() throws Exception {
|
||||
String name = getTestName(true);
|
||||
configureByFile(getBasePath() + name + ".java");
|
||||
final boolean enabled = getEditor().getSettings().isVariableInplaceRenameEnabled();
|
||||
TemplateManagerImpl templateManager = (TemplateManagerImpl)TemplateManager.getInstance(getProject());
|
||||
TemplateManagerImpl templateManager = (TemplateManagerImpl)TemplateManager.getInstance(LightPlatformTestCase.getProject());
|
||||
try {
|
||||
templateManager.setTemplateTesting(true);
|
||||
getEditor().getSettings().setVariableInplaceRenameEnabled(true);
|
||||
|
||||
final MyIntroduceHandler introduceFieldHandler = createIntroduceHandler();
|
||||
final PsiExpression expression =
|
||||
PsiTreeUtil.getParentOfType(getFile().findElementAt(getEditor().getCaretModel().getOffset()), PsiExpression.class);
|
||||
final E expression = getExpressionFromEditor();
|
||||
if (expression != null) {
|
||||
introduceFieldHandler.invokeImpl(getProject(), expression, getEditor());
|
||||
introduceFieldHandler.invokeImpl(LightPlatformTestCase.getProject(), expression, getEditor());
|
||||
} else {
|
||||
final PsiLocalVariable localVariable =
|
||||
PsiTreeUtil.getParentOfType(getFile().findElementAt(getEditor().getCaretModel().getOffset()), PsiLocalVariable.class);
|
||||
assertNotNull(localVariable);
|
||||
introduceFieldHandler.invokeImpl(getProject(), localVariable, getEditor());
|
||||
final V localVariable = getLocalVariableFromEditor();
|
||||
introduceFieldHandler.invokeImpl(LightPlatformTestCase.getProject(), localVariable, getEditor());
|
||||
}
|
||||
TemplateState state = TemplateManagerImpl.getTemplateState(getEditor());
|
||||
assert state != null;
|
||||
@@ -61,34 +63,27 @@ public abstract class AbstractInplaceIntroduceTest extends LightCodeInsightTestC
|
||||
checkResultByFile(getBasePath() + name + "_after.java");
|
||||
}
|
||||
finally {
|
||||
myEditor.getSettings().setVariableInplaceRenameEnabled(enabled);
|
||||
getEditor().getSettings().setVariableInplaceRenameEnabled(enabled);
|
||||
templateManager.setTemplateTesting(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected void doTest(final Pass<AbstractInplaceIntroducer> pass) throws Exception {
|
||||
String name = getTestName(true);
|
||||
configureByFile(getBasePath() + name + ".java");
|
||||
final boolean enabled = getEditor().getSettings().isVariableInplaceRenameEnabled();
|
||||
TemplateManagerImpl templateManager = (TemplateManagerImpl)TemplateManager.getInstance(getProject());
|
||||
TemplateManagerImpl templateManager = (TemplateManagerImpl)TemplateManager.getInstance(LightPlatformTestCase.getProject());
|
||||
try {
|
||||
templateManager.setTemplateTesting(true);
|
||||
getEditor().getSettings().setVariableInplaceRenameEnabled(true);
|
||||
|
||||
final MyIntroduceHandler introduceFieldHandler = createIntroduceHandler();
|
||||
PsiExpression expression =
|
||||
PsiTreeUtil.getParentOfType(getFile().findElementAt(getEditor().getCaretModel().getOffset()), PsiExpression.class);
|
||||
if (expression instanceof PsiReferenceExpression && expression.getParent() instanceof PsiMethodCallExpression) {
|
||||
expression = (PsiExpression)expression.getParent();
|
||||
}
|
||||
final E expression = getExpressionFromEditor();
|
||||
if (expression != null) {
|
||||
introduceFieldHandler.invokeImpl(getProject(), expression, getEditor());
|
||||
introduceFieldHandler.invokeImpl(LightPlatformTestCase.getProject(), expression, getEditor());
|
||||
} else {
|
||||
final PsiLocalVariable localVariable =
|
||||
PsiTreeUtil.getParentOfType(getFile().findElementAt(getEditor().getCaretModel().getOffset()), PsiLocalVariable.class);
|
||||
assertNotNull(localVariable);
|
||||
introduceFieldHandler.invokeImpl(getProject(), localVariable, getEditor());
|
||||
final V localVariable = getLocalVariableFromEditor();
|
||||
introduceFieldHandler.invokeImpl(LightPlatformTestCase.getProject(), localVariable, getEditor());
|
||||
}
|
||||
pass.pass(introduceFieldHandler.getInplaceIntroducer());
|
||||
TemplateState state = TemplateManagerImpl.getTemplateState(getEditor());
|
||||
@@ -97,19 +92,14 @@ public abstract class AbstractInplaceIntroduceTest extends LightCodeInsightTestC
|
||||
checkResultByFile(getBasePath() + name + "_after.java");
|
||||
}
|
||||
finally {
|
||||
myEditor.getSettings().setVariableInplaceRenameEnabled(enabled);
|
||||
getEditor().getSettings().setVariableInplaceRenameEnabled(enabled);
|
||||
templateManager.setTemplateTesting(false);
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract String getBasePath();
|
||||
protected abstract MyIntroduceHandler createIntroduceHandler();
|
||||
|
||||
|
||||
|
||||
public static interface MyIntroduceHandler {
|
||||
boolean invokeImpl(Project project, @NotNull PsiExpression selectedExpr, Editor editor);
|
||||
boolean invokeImpl(Project project, PsiLocalVariable localVariable, Editor editor);
|
||||
public interface MyIntroduceHandler<EH extends PsiElement, VH extends PsiNameIdentifierOwner> {
|
||||
boolean invokeImpl(Project project, @NotNull EH selectedExpr, Editor editor);
|
||||
boolean invokeImpl(Project project, VH localVariable, Editor editor);
|
||||
AbstractInplaceIntroducer getInplaceIntroducer();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user