1package org.jf.smalidea;
2
3import com.intellij.openapi.fileEditor.FileDocumentManager;
4import com.intellij.openapi.vfs.VirtualFile;
5import com.intellij.psi.PsiClass;
6import com.intellij.psi.PsiDocumentManager;
7import com.intellij.psi.PsiMethod;
8import com.intellij.psi.search.GlobalSearchScope;
9import com.intellij.refactoring.MultiFileTestCase;
10import com.intellij.refactoring.rename.RenameProcessor;
11import org.jetbrains.annotations.NotNull;
12
13public class MethodRenameTest extends MultiFileTestCase {
14    @Override
15    protected String getTestDataPath() {
16        return "testData";
17    }
18
19    @NotNull
20    @Override
21    protected String getTestRoot() {
22        return "/methodRename/";
23    }
24
25    public void testMethodRename() {
26        doTest("blah", "blah", "blort");
27    }
28
29    private void doTest(@NotNull final String containingClass, @NotNull final String oldMethodName,
30                        @NotNull final String newMethodName) {
31        doTest(new PerformAction() {
32            @Override
33            public void performAction(VirtualFile rootDir, VirtualFile rootAfter) throws Exception {
34                doRename(containingClass, oldMethodName, newMethodName);
35            }
36        });
37    }
38
39    private void doRename(String containingClass, String oldMethodName, String newMethodName) throws Exception {
40        PsiClass testClass = myJavaFacade.findClass(containingClass, GlobalSearchScope.allScope(getProject()));
41
42        PsiMethod method = testClass.findMethodsByName(oldMethodName, false)[0];
43
44        RenameProcessor processor = new RenameProcessor(getProject(), method, newMethodName, false, false);
45        processor.run();
46
47        PsiDocumentManager.getInstance(getProject()).commitAllDocuments();
48        FileDocumentManager.getInstance().saveAllDocuments();
49    }
50}
51