This commit is contained in:
Dmitry Jemerov
2009-09-10 20:33:13 +04:00
parent 571ab0fc93
commit 48a701e11e
24 changed files with 9 additions and 3 deletions
@@ -0,0 +1,71 @@
package com.intellij.refactoring;
import com.intellij.JavaTestUtil;
import com.intellij.codeInsight.CodeInsightTestCase;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.projectRoots.impl.JavaSdkImpl;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.PostprocessReformattingAspect;
import com.intellij.psi.search.ProjectScope;
import com.intellij.refactoring.extractSuperclass.ExtractSuperClassProcessor;
import com.intellij.refactoring.util.JavaDocPolicy;
import com.intellij.refactoring.util.classMembers.MemberInfo;
import com.intellij.testFramework.IdeaTestUtil;
import com.intellij.testFramework.PsiTestUtil;
import org.jetbrains.annotations.NonNls;
import java.io.File;
/**
* @author yole
*/
public class ExtractSuperClassTest extends CodeInsightTestCase {
public void testFinalFieldInitialization() throws Exception { // IDEADEV-19704
doTest("Test", "TestSubclass", new Pair<String, Class<? extends PsiMember>>("X", PsiClass.class),
new Pair<String, Class<? extends PsiMember>>("x", PsiField.class));
}
public void testParameterNameEqualsFieldName() throws Exception { // IDEADEV-10629
doTest("Test", "TestSubclass", new Pair<String, Class<? extends PsiMember>>("a", PsiField.class));
}
public void testExtendsLibraryClass() throws Exception {
doTest("Test", "TestSubclass");
}
public void testRequiredImportRemoved() throws Exception {
doTest("foo.impl.B", "BImpl", new Pair<String, Class<? extends PsiMember>>("getInstance", PsiMethod.class));
}
@NonNls
private String getRoot() {
return JavaTestUtil.getJavaTestDataPath() + "/refactoring/extractSuperClass/" + getTestName(true);
}
private void doTest(@NonNls final String className, @NonNls final String newClassName,
Pair<String, Class<? extends PsiMember>>... membersToFind) throws Exception {
String rootBefore = getRoot() + "/before";
PsiTestUtil.removeAllRoots(myModule, JavaSdkImpl.getMockJdk("java 1.4"));
final VirtualFile rootDir = PsiTestUtil.createTestProjectStructure(myProject, myModule, rootBefore, myFilesToDelete);
PsiClass psiClass = myJavaFacade.findClass(className, ProjectScope.getAllScope(myProject));
assertNotNull(psiClass);
final MemberInfo[] members = PullUpTest.findMembers(psiClass, membersToFind);
ExtractSuperClassProcessor processor = new ExtractSuperClassProcessor(myProject,
psiClass.getContainingFile().getContainingDirectory(),
newClassName,
psiClass, members,
false,
new JavaDocPolicy(JavaDocPolicy.ASIS));
processor.run();
PsiDocumentManager.getInstance(myProject).commitAllDocuments();
FileDocumentManager.getInstance().saveAllDocuments();
String rootAfter = getRoot() + "/after";
VirtualFile rootDir2 = LocalFileSystem.getInstance().findFileByPath(rootAfter.replace(File.separatorChar, '/'));
myProject.getComponent(PostprocessReformattingAspect.class).doPostponedFormatting();
IdeaTestUtil.assertDirectoriesEqual(rootDir2, rootDir, IdeaTestUtil.CVS_FILE_FILTER);
}
}
@@ -0,0 +1,104 @@
/*
* Copyright (c) 2005 JetBrains s.r.o. All Rights Reserved.
*/
package com.intellij.refactoring;
import com.intellij.openapi.util.Pair;
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.refactoring.listeners.JavaRefactoringListenerManager;
import com.intellij.refactoring.listeners.MoveMemberListener;
import com.intellij.refactoring.memberPullUp.PullUpHelper;
import com.intellij.refactoring.util.JavaDocPolicy;
import com.intellij.refactoring.util.classMembers.MemberInfo;
import com.intellij.testFramework.LightCodeInsightTestCase;
import com.intellij.JavaTestUtil;
/**
* @author ven
*/
public class PullUpTest extends LightCodeInsightTestCase {
private static final String BASE_PATH = "/refactoring/pullUp/";
public void testQualifiedThis() throws Exception {
doTest(new Pair<String, Class<? extends PsiMember>> ("Inner", PsiClass.class));
}
public void testQualifiedSuper() throws Exception {
doTest(new Pair<String, Class<? extends PsiMember>> ("Inner", PsiClass.class));
}
public void testQualifiedReference() throws Exception { // IDEADEV-25008
doTest(new Pair<String, Class<? extends PsiMember>> ("x", PsiField.class),
new Pair<String, Class<? extends PsiMember>> ("getX", PsiMethod.class),
new Pair<String, Class<? extends PsiMember>> ("setX", PsiMethod.class));
}
public void testRemoveOverride() throws Exception {
doTest(new Pair<String, Class<? extends PsiMember>> ("get", PsiMethod.class));
}
private void doTest(Pair<String, Class<? extends PsiMember>>... membersToFind) throws Exception {
configureByFile(BASE_PATH + getTestName(false) + ".java");
PsiElement elementAt = getFile().findElementAt(getEditor().getCaretModel().getOffset());
final PsiClass sourceClass = PsiTreeUtil.getParentOfType(elementAt, PsiClass.class);
assertNotNull(sourceClass);
PsiClass targetClass = sourceClass.getSuperClass();
if (!targetClass.isWritable()) {
final PsiClass[] interfaces = sourceClass.getInterfaces();
assertTrue(interfaces.length == 1);
assertTrue(interfaces[0].isWritable());
targetClass = interfaces[0];
}
MemberInfo[] infos = findMembers(sourceClass, membersToFind);
final int[] countMoved = new int[] {0};
final MoveMemberListener listener = new MoveMemberListener() {
public void memberMoved(PsiClass aClass, PsiMember member) {
assertEquals(sourceClass, aClass);
countMoved[0]++;
}
};
JavaRefactoringListenerManager.getInstance(getProject()).addMoveMembersListener(listener);
new PullUpHelper(sourceClass, targetClass, infos, new JavaDocPolicy(JavaDocPolicy.ASIS)).moveMembersToBase();
JavaRefactoringListenerManager.getInstance(getProject()).removeMoveMembersListener(listener);
assertEquals(countMoved[0], membersToFind.length);
checkResultByFile(BASE_PATH + getTestName(false) + "_after.java");
}
public static MemberInfo[] findMembers(final PsiClass sourceClass, final Pair<String, Class<? extends PsiMember>>... membersToFind) {
MemberInfo[] infos = new MemberInfo[membersToFind.length];
for (int i = 0; i < membersToFind.length; i++) {
final Class<? extends PsiMember> clazz = membersToFind[i].getSecond();
final String name = membersToFind[i].getFirst();
PsiMember member = null;
if (PsiClass.class.isAssignableFrom(clazz)) {
member = sourceClass.findInnerClassByName(name, false);
} else if (PsiMethod.class.isAssignableFrom(clazz)) {
final PsiMethod[] methods = sourceClass.findMethodsByName(name, false);
assertEquals(1, methods.length);
member = methods[0];
} else if (PsiField.class.isAssignableFrom(clazz)) {
member = sourceClass.findFieldByName(name, false);
}
assertNotNull(member);
infos[i] = new MemberInfo(member);
}
return infos;
}
protected Sdk getProjectJDK() {
return JavaSdkImpl.getMockJdk15("50");
}
@Override
protected String getTestDataPath() {
return JavaTestUtil.getJavaTestDataPath();
}
}