diff options
Diffstat (limited to 'java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodObject4DebuggerTest.java')
-rw-r--r-- | java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodObject4DebuggerTest.java | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodObject4DebuggerTest.java b/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodObject4DebuggerTest.java new file mode 100644 index 000000000000..9321cf9a6695 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodObject4DebuggerTest.java @@ -0,0 +1,179 @@ +/* + * Copyright 2000-2014 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. + */ + +/* + * User: anna + * Date: 06-May-2008 + */ +package com.intellij.refactoring; + +import com.intellij.JavaTestUtil; +import com.intellij.idea.Bombed; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.projectRoots.Sdk; +import com.intellij.psi.*; +import com.intellij.refactoring.extractMethodObject.ExtractLightMethodObjectHandler; +import com.intellij.testFramework.IdeaTestUtil; +import org.jetbrains.annotations.NotNull; + +import java.util.Calendar; + +public class ExtractMethodObject4DebuggerTest extends LightRefactoringTestCase { + @NotNull + @Override + protected String getTestDataPath() { + return JavaTestUtil.getJavaTestDataPath(); + } + + private void doTest(String evaluatedText, String expectedCallSite, String expectedClass) throws Exception { + final String testName = getTestName(false); + configureByFile("/refactoring/extractMethodObject4Debugger/" + testName + ".java"); + final int offset = getEditor().getCaretModel().getOffset(); + final PsiElement context = getFile().findElementAt(offset); + final JavaCodeFragment fragment = JavaCodeFragmentFactory.getInstance(getProject()).createCodeBlockCodeFragment(evaluatedText, context, false); + final ExtractLightMethodObjectHandler.ExtractedData extractedData = + ExtractLightMethodObjectHandler.extractLightMethodObject(getProject(), getFile(), fragment, "test"); + assertNotNull(extractedData); + assertEquals(expectedCallSite, extractedData.getGeneratedCallText()); + final PsiClass innerClass = extractedData.getGeneratedInnerClass(); + assertEquals(expectedClass, innerClass.getText()); + } + + public void testSimpleGeneration() throws Exception { + doTest("int i = 0; int j = 0;", "Test test = new Test().invoke();int i = test.getI();int j = test.getJ();", + + "public class Test {\n" + + " private int i;\n" + + " private int j;\n" + + "\n" + + " public int getI() {\n" + + " return i;\n" + + " }\n" + + "\n" + + " public int getJ() {\n" + + " return j;\n" + + " }\n" + + "\n" + + " public Test invoke() {\n" + + " i = 0;\n" + + " j = 0;\n" + + " return this;\n" + + " }\n" + + " }"); + } + + public void testInvokeReturnType() throws Exception { + doTest("x = 6; y = 6;", "Test test = new Test().invoke();x = test.getX();y = test.getY();", + + "public static class Test {\n" + + " private int x;\n" + + " private int y;\n" + + "\n" + + " public int getX() {\n" + + " return x;\n" + + " }\n" + + "\n" + + " public int getY() {\n" + + " return y;\n" + + " }\n" + + "\n" + + " public Test invoke() {\n" + + " x = 6;\n" + + " y = 6;\n" + + " return this;\n" + + " }\n" + + " }"); + } + + public void testAnonymousClassParams() throws Exception { + doTest("new I() {public void foo(int i) {i++;}};", "I result = new Test().invoke();", + + "public class Test {\n" + + " public I invoke() {\n" + + " return new I() {\n" + + " public void foo(int i) {\n" + + " i++;\n" + + " }\n" + + " };\n" + + " }\n" + + " }"); + } + + public void testInnerClass() throws Exception { + doTest(" new I(2).foo()", "new Test().invoke();", + + "public class Test {\n" + + " public void invoke() {\n" + + " new Sample.I(2).foo();\n" + + " }\n" + + " }"); + } + + public void testResultExpr() throws Exception { + doTest(" foo()", "int result = new Test().invoke();", + + "public class Test {\n" + + " public int invoke() {\n" + + " return foo();\n" + + " }\n" + + " }"); + } + + public void testResultStatements() throws Exception { + doTest("int i = 0;\nfoo()", "Test test = new Test().invoke();int i = test.getI();int result = test.getResult();", + + "public class Test {\n" + + " private int i;\n" + + " private int result;\n" + + "\n" + + " public int getI() {\n" + + " return i;\n" + + " }\n" + + "\n" + + " public int getResult() {\n" + + " return result;\n" + + " }\n" + + "\n" + + " public Test invoke() {\n" + + " i = 0;\n" + + " result = foo();\n" + + " return this;\n" + + " }\n" + + " }"); + } + + + public void testOffsetsAtCallSite() throws Exception { + doTest("map.entrySet().stream().filter((a) -> (a.getKey()>0));", + "java.util.stream.Stream<Map.Entry<Integer,Integer>> result = new Test(map).invoke();", + "public class Test {\n" + + " private Map<Integer, Integer> map;\n" + + "\n" + + " public Test(Map<Integer, Integer> map) {\n" + + " this.map = map;\n" + + " }\n" + + "\n" + + " public Stream<Map.Entry<Integer, Integer>> invoke() {\n" + + " return map.entrySet().stream().filter((a) -> (a.getKey() > 0));\n" + + " }\n" + + " }"); + } + + @Override + protected Sdk getProjectJDK() { + return IdeaTestUtil.getMockJdk18(); + } +} |