From baf71bf764ed1b500891ab584a464cba5d7cef81 Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Fri, 27 Apr 2012 19:33:34 +0400 Subject: [PATCH] fix testOverrideJavaMethod --- .../codeInsight/OverrideImplementTest.java | 42 +++++++++++++++---- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/idea/tests/org/jetbrains/jet/plugin/codeInsight/OverrideImplementTest.java b/idea/tests/org/jetbrains/jet/plugin/codeInsight/OverrideImplementTest.java index fadfbc34b22..8dbbd752847 100644 --- a/idea/tests/org/jetbrains/jet/plugin/codeInsight/OverrideImplementTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/codeInsight/OverrideImplementTest.java @@ -23,6 +23,7 @@ import com.intellij.psi.util.PsiTreeUtil; import com.intellij.testFramework.LightProjectDescriptor; import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor; import org.jetbrains.jet.lang.psi.JetClassOrObject; import org.jetbrains.jet.plugin.JetLightProjectDescriptor; @@ -123,7 +124,7 @@ public class OverrideImplementTest extends LightCodeInsightFixtureTestCase { } public void testOverrideJavaMethod() { - doOverrideDirectoryTest(); + doOverrideDirectoryTest("getAnswer"); } public void testInheritVisibilities() { @@ -150,13 +151,13 @@ public class OverrideImplementTest extends LightCodeInsightFixtureTestCase { doDirectoryTest(new ImplementMethodsHandler()); } - private void doOverrideDirectoryTest() { - doDirectoryTest(new OverrideMethodsHandler()); + private void doOverrideDirectoryTest(@Nullable String memberToImplement) { + doDirectoryTest(new OverrideMethodsHandler(), memberToImplement); } private void doFileTest(OverrideImplementMethodsHandler handler) { myFixture.configureByFile(getTestName(true) + ".kt"); - doOverrideImplement(handler); + doOverrideImplement(handler, null); myFixture.checkResultByFile(getTestName(true) + ".kt.after"); } @@ -167,24 +168,49 @@ public class OverrideImplementTest extends LightCodeInsightFixtureTestCase { } private void doDirectoryTest(OverrideImplementMethodsHandler handler) { + doDirectoryTest(handler, null); + } + + private void doDirectoryTest(OverrideImplementMethodsHandler handler, @Nullable String memberToOverride) { myFixture.copyDirectoryToProject(getTestName(true), ""); myFixture.configureFromTempProjectFile("foo/Impl.kt"); - doOverrideImplement(handler); + doOverrideImplement(handler, memberToOverride); myFixture.checkResultByFile(getTestName(true) + "/foo/Impl.kt.after"); } - private void doOverrideImplement(OverrideImplementMethodsHandler handler) { + private void doOverrideImplement(OverrideImplementMethodsHandler handler, @Nullable String memberToOverride) { final PsiElement elementAtCaret = myFixture.getFile().findElementAt(myFixture.getEditor().getCaretModel().getOffset()); final JetClassOrObject classOrObject = PsiTreeUtil.getParentOfType(elementAtCaret, JetClassOrObject.class); assertNotNull("Caret should be inside class or object", classOrObject); final Set descriptors = handler.collectMethodsToGenerate(classOrObject); - assertEquals("Invalid number of available descriptors for override", 1, descriptors.size()); + + final CallableMemberDescriptor singleToOverride; + if (memberToOverride == null) { + assertEquals("Invalid number of available descriptors for override", 1, descriptors.size()); + singleToOverride = descriptors.iterator().next(); + } + else { + CallableMemberDescriptor candidateToOverride = null; + for (CallableMemberDescriptor callable : descriptors) { + if (callable.getName().equals(memberToOverride)) { + if (candidateToOverride != null) { + throw new IllegalStateException("more then one descriptor with name " + memberToOverride); + } + candidateToOverride = callable; + } + } + if (candidateToOverride == null) { + throw new IllegalStateException("no descriptors to override with name " + memberToOverride + " found"); + } + singleToOverride = candidateToOverride; + } + new WriteCommandAction(myFixture.getProject(), myFixture.getFile()) { @Override protected void run(Result result) throws Throwable { OverrideImplementMethodsHandler.generateMethods( myFixture.getProject(), myFixture.getEditor(), classOrObject, - OverrideImplementMethodsHandler.membersFromDescriptors(descriptors)); + OverrideImplementMethodsHandler.membersFromDescriptors(Collections.singletonList(singleToOverride))); } }.execute(); }