abstract test case for inplace introduction

This commit is contained in:
anna
2011-08-25 19:26:07 +02:00
parent 1ade497557
commit 2931ea305a
5 changed files with 94 additions and 51 deletions
@@ -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) {
@@ -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();
}
}