diff options
Diffstat (limited to 'java/java-tests/testSrc/com/intellij/refactoring/PullUpTest.java')
-rw-r--r-- | java/java-tests/testSrc/com/intellij/refactoring/PullUpTest.java | 56 |
1 files changed, 55 insertions, 1 deletions
diff --git a/java/java-tests/testSrc/com/intellij/refactoring/PullUpTest.java b/java/java-tests/testSrc/com/intellij/refactoring/PullUpTest.java index cbf095578213..f0d4e771ed1a 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/PullUpTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/PullUpTest.java @@ -16,17 +16,24 @@ package com.intellij.refactoring; import com.intellij.JavaTestUtil; +import com.intellij.openapi.projectRoots.Sdk; import com.intellij.pom.java.LanguageLevel; 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.PullUpConflictsUtil; import com.intellij.refactoring.memberPullUp.PullUpProcessor; import com.intellij.refactoring.util.DocCommentPolicy; +import com.intellij.refactoring.util.classMembers.InterfaceContainmentVerifier; import com.intellij.refactoring.util.classMembers.MemberInfo; +import com.intellij.testFramework.IdeaTestUtil; +import com.intellij.util.containers.MultiMap; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; +import java.util.Arrays; + /** * @author ven */ @@ -86,6 +93,16 @@ public class PullUpTest extends LightRefactoringTestCase { doTest(new RefactoringTestUtil.MemberDescriptor("get", PsiMethod.class)); } + public void testNotFunctionalAnymore() { + setLanguageLevel(LanguageLevel.JDK_1_8); + doTest(true, "Functional expression demands functional interface to have exact one method", new RefactoringTestUtil.MemberDescriptor("get", PsiMethod.class, true)); + } + + public void testStillFunctional() { + setLanguageLevel(LanguageLevel.JDK_1_8); + doTest(true, new RefactoringTestUtil.MemberDescriptor("get", PsiMethod.class, false)); + } + public void testAsDefault() { final RefactoringTestUtil.MemberDescriptor descriptor = new RefactoringTestUtil.MemberDescriptor("get", PsiMethod.class); doTest(descriptor); @@ -156,6 +173,13 @@ public class PullUpTest extends LightRefactoringTestCase { } private void doTest(final boolean checkMembersMovedCount, RefactoringTestUtil.MemberDescriptor... membersToFind) { + doTest(checkMembersMovedCount, null, membersToFind); + } + + private void doTest(final boolean checkMembersMovedCount, + String conflictMessage, + RefactoringTestUtil.MemberDescriptor... membersToFind) { + final MultiMap<PsiElement, String> conflictsMap = new MultiMap<PsiElement, String>(); configureByFile(BASE_PATH + getTestName(false) + ".java"); PsiElement elementAt = getFile().findElementAt(getEditor().getCaretModel().getOffset()); final PsiClass sourceClass = PsiTreeUtil.getParentOfType(elementAt, PsiClass.class); @@ -169,7 +193,7 @@ public class PullUpTest extends LightRefactoringTestCase { assertTrue(interfaces[0].isWritable()); targetClass = interfaces[0]; } - MemberInfo[] infos = RefactoringTestUtil.findMembers(sourceClass, membersToFind); + final MemberInfo[] infos = RefactoringTestUtil.findMembers(sourceClass, membersToFind); final int[] countMoved = {0}; final MoveMemberListener listener = new MoveMemberListener() { @@ -180,10 +204,35 @@ public class PullUpTest extends LightRefactoringTestCase { } }; JavaRefactoringListenerManager.getInstance(getProject()).addMoveMembersListener(listener); + final PsiDirectory targetDirectory = targetClass.getContainingFile().getContainingDirectory(); + final PsiPackage targetPackage = targetDirectory != null ? JavaDirectoryService.getInstance().getPackage(targetDirectory) : null; + conflictsMap.putAllValues( + PullUpConflictsUtil + .checkConflicts(infos, sourceClass, targetClass, targetPackage, targetDirectory, new InterfaceContainmentVerifier() { + @Override + public boolean checkedInterfacesContain(PsiMethod psiMethod) { + return PullUpProcessor.checkedInterfacesContain(Arrays.asList(infos), psiMethod); + } + }) + ); final PullUpProcessor helper = new PullUpProcessor(sourceClass, targetClass, infos, new DocCommentPolicy(DocCommentPolicy.ASIS)); helper.run(); UIUtil.dispatchAllInvocationEvents(); JavaRefactoringListenerManager.getInstance(getProject()).removeMoveMembersListener(listener); + + if (conflictMessage != null && conflictsMap.isEmpty()) { + fail("Conflict was not detected"); + } + + if (conflictMessage == null && !conflictsMap.isEmpty()) { + fail(conflictsMap.values().iterator().next()); + } + + if (conflictMessage != null) { + assertEquals(conflictMessage, conflictsMap.values().iterator().next()); + return; + } + if (checkMembersMovedCount) { assertEquals(countMoved[0], membersToFind.length); } @@ -195,4 +244,9 @@ public class PullUpTest extends LightRefactoringTestCase { protected String getTestDataPath() { return JavaTestUtil.getJavaTestDataPath(); } + + @Override + protected Sdk getProjectJDK() { + return IdeaTestUtil.getMockJdk18(); + } } |