diff --git a/python/testData/refactoring/extractmethod/BinaryExpression.after.py b/python/testData/refactoring/extractmethod/BinaryExpression.after.py
new file mode 100644
index 000000000000..97e855544d46
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/BinaryExpression.after.py
@@ -0,0 +1,4 @@
+def foo():
+ return bbb
+
+aaa = foo() && ccc
\ No newline at end of file
diff --git a/python/testData/refactoring/extractmethod/BinaryExpression.before.py b/python/testData/refactoring/extractmethod/BinaryExpression.before.py
new file mode 100644
index 000000000000..714e824993dd
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/BinaryExpression.before.py
@@ -0,0 +1 @@
+aaa = bbb && ccc
\ No newline at end of file
diff --git a/python/testData/refactoring/extractmethod/BreakAst.after.py b/python/testData/refactoring/extractmethod/BreakAst.after.py
new file mode 100644
index 000000000000..bf980f363971
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/BreakAst.after.py
@@ -0,0 +1,6 @@
+def bar(r_new):
+ return PI * r_new ** 2
+
+
+def cylinder_volume(r, h):
+ h * bar(r)
diff --git a/python/testData/refactoring/extractmethod/BreakAst.before.py b/python/testData/refactoring/extractmethod/BreakAst.before.py
new file mode 100644
index 000000000000..0abd37a690d9
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/BreakAst.before.py
@@ -0,0 +1,2 @@
+def cylinder_volume(r, h):
+ h * PI * r ** 2
diff --git a/python/testData/refactoring/extractmethod/ClassContext.after.py b/python/testData/refactoring/extractmethod/ClassContext.after.py
new file mode 100644
index 000000000000..d8d43cddfcb9
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/ClassContext.after.py
@@ -0,0 +1,5 @@
+class PyCharm:
+ def bar():
+ print("Hello Pycharm!")
+
+ bar()
\ No newline at end of file
diff --git a/python/testData/refactoring/extractmethod/ClassContext.before.py b/python/testData/refactoring/extractmethod/ClassContext.before.py
new file mode 100644
index 000000000000..b33d3dea282a
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/ClassContext.before.py
@@ -0,0 +1,2 @@
+class PyCharm:
+ print("Hello Pycharm!")
\ No newline at end of file
diff --git a/python/testData/refactoring/extractmethod/classmethod.after.py b/python/testData/refactoring/extractmethod/ClassMethod.after.py
similarity index 100%
rename from python/testData/refactoring/extractmethod/classmethod.after.py
rename to python/testData/refactoring/extractmethod/ClassMethod.after.py
diff --git a/python/testData/refactoring/extractmethod/classmethod.before.py b/python/testData/refactoring/extractmethod/ClassMethod.before.py
similarity index 100%
rename from python/testData/refactoring/extractmethod/classmethod.before.py
rename to python/testData/refactoring/extractmethod/ClassMethod.before.py
diff --git a/python/testData/refactoring/extractmethod/comment.after.py b/python/testData/refactoring/extractmethod/Comment.after.py
similarity index 100%
rename from python/testData/refactoring/extractmethod/comment.after.py
rename to python/testData/refactoring/extractmethod/Comment.after.py
diff --git a/python/testData/refactoring/extractmethod/comment.before.py b/python/testData/refactoring/extractmethod/Comment.before.py
similarity index 100%
rename from python/testData/refactoring/extractmethod/comment.before.py
rename to python/testData/refactoring/extractmethod/Comment.before.py
diff --git a/python/testData/refactoring/extractmethod/comment2.after.py b/python/testData/refactoring/extractmethod/Comment2.after.py
similarity index 100%
rename from python/testData/refactoring/extractmethod/comment2.after.py
rename to python/testData/refactoring/extractmethod/Comment2.after.py
diff --git a/python/testData/refactoring/extractmethod/comment2.before.py b/python/testData/refactoring/extractmethod/Comment2.before.py
similarity index 100%
rename from python/testData/refactoring/extractmethod/comment2.before.py
rename to python/testData/refactoring/extractmethod/Comment2.before.py
diff --git a/python/testData/refactoring/extractmethod/conditionalreturn.before.py b/python/testData/refactoring/extractmethod/ConditionalReturn.before.py
similarity index 100%
rename from python/testData/refactoring/extractmethod/conditionalreturn.before.py
rename to python/testData/refactoring/extractmethod/ConditionalReturn.before.py
diff --git a/python/testData/refactoring/extractmethod/elsebody.after.py b/python/testData/refactoring/extractmethod/ElseBody.after.py
similarity index 100%
rename from python/testData/refactoring/extractmethod/elsebody.after.py
rename to python/testData/refactoring/extractmethod/ElseBody.after.py
diff --git a/python/testData/refactoring/extractmethod/elsebody.before.py b/python/testData/refactoring/extractmethod/ElseBody.before.py
similarity index 100%
rename from python/testData/refactoring/extractmethod/elsebody.before.py
rename to python/testData/refactoring/extractmethod/ElseBody.before.py
diff --git a/python/testData/refactoring/extractmethod/Expression.after.py b/python/testData/refactoring/extractmethod/Expression.after.py
new file mode 100644
index 000000000000..5ef6f9653efb
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/Expression.after.py
@@ -0,0 +1,8 @@
+def plus(a_new, b_new):
+ return a_new + b_new * 123
+
+
+def f():
+ a = 1
+ b = 1
+ c = plus(a, b)
\ No newline at end of file
diff --git a/python/testData/refactoring/extractmethod/Expression.before.py b/python/testData/refactoring/extractmethod/Expression.before.py
new file mode 100644
index 000000000000..58e1958353a2
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/Expression.before.py
@@ -0,0 +1,4 @@
+def f():
+ a = 1
+ b = 1
+ c = a + b * 123
\ No newline at end of file
diff --git a/python/testData/refactoring/extractmethod/file.after.py b/python/testData/refactoring/extractmethod/File.after.py
similarity index 100%
rename from python/testData/refactoring/extractmethod/file.after.py
rename to python/testData/refactoring/extractmethod/File.after.py
diff --git a/python/testData/refactoring/extractmethod/file.before.py b/python/testData/refactoring/extractmethod/File.before.py
similarity index 100%
rename from python/testData/refactoring/extractmethod/file.before.py
rename to python/testData/refactoring/extractmethod/File.before.py
diff --git a/python/testData/refactoring/extractmethod/MethodContext.after.py b/python/testData/refactoring/extractmethod/MethodContext.after.py
new file mode 100644
index 000000000000..894730b4a9e4
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/MethodContext.after.py
@@ -0,0 +1,7 @@
+class C:
+ def bar(self):
+ for x in [1, 2]:
+ print x
+
+ def foo(self):
+ self.bar()
\ No newline at end of file
diff --git a/python/testData/refactoring/extractmethod/MethodContext.before.py b/python/testData/refactoring/extractmethod/MethodContext.before.py
new file mode 100644
index 000000000000..3fbab10fdfa0
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/MethodContext.before.py
@@ -0,0 +1,4 @@
+class C:
+ def foo(self):
+ for x in [1, 2]:
+ print x
\ No newline at end of file
diff --git a/python/testData/refactoring/extractmethod/methodInIf.after.py b/python/testData/refactoring/extractmethod/MethodInIf.after.py
similarity index 100%
rename from python/testData/refactoring/extractmethod/methodInIf.after.py
rename to python/testData/refactoring/extractmethod/MethodInIf.after.py
diff --git a/python/testData/refactoring/extractmethod/methodInIf.before.py b/python/testData/refactoring/extractmethod/MethodInIf.before.py
similarity index 100%
rename from python/testData/refactoring/extractmethod/methodInIf.before.py
rename to python/testData/refactoring/extractmethod/MethodInIf.before.py
diff --git a/python/testData/refactoring/extractmethod/MethodIndent.after.py b/python/testData/refactoring/extractmethod/MethodIndent.after.py
new file mode 100644
index 000000000000..f725cb8f8982
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/MethodIndent.after.py
@@ -0,0 +1,8 @@
+class Foo(X, Y, Z):
+ def bar(self, base_new):
+ try: base_new.__init__(self)
+ except AttributeError: pass
+
+ def __init__(self):
+ for base in self__class__.__bases__:
+ self.bar(base)
diff --git a/python/testData/refactoring/extractmethod/MethodIndent.before.py b/python/testData/refactoring/extractmethod/MethodIndent.before.py
new file mode 100644
index 000000000000..43ae5769b400
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/MethodIndent.before.py
@@ -0,0 +1,5 @@
+class Foo(X, Y, Z):
+ def __init__(self):
+ for base in self__class__.__bases__:
+ try: base.__init__(self)
+ except AttributeError: pass
diff --git a/python/testData/refactoring/extractmethod/MethodReturn.after.py b/python/testData/refactoring/extractmethod/MethodReturn.after.py
new file mode 100644
index 000000000000..c284021950fd
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/MethodReturn.after.py
@@ -0,0 +1,9 @@
+class C:
+ def bar(self):
+ if (self.cond):
+ return 1
+ else:
+ return 2
+
+ def foo(self):
+ return self.bar()
\ No newline at end of file
diff --git a/python/testData/refactoring/extractmethod/MethodReturn.before.py b/python/testData/refactoring/extractmethod/MethodReturn.before.py
new file mode 100644
index 000000000000..70e2a62bffce
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/MethodReturn.before.py
@@ -0,0 +1,6 @@
+class C:
+ def foo(self):
+ if (self.cond):
+ return 1
+ else:
+ return 2
\ No newline at end of file
diff --git a/python/testData/refactoring/extractmethod/NameCollisionClass.before.py b/python/testData/refactoring/extractmethod/NameCollisionClass.before.py
new file mode 100644
index 000000000000..5aa02294eab8
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/NameCollisionClass.before.py
@@ -0,0 +1,5 @@
+class A:
+ def hello():
+ pass
+
+ print("Hello")
diff --git a/python/testData/refactoring/extractmethod/NameCollisionFile.before.py b/python/testData/refactoring/extractmethod/NameCollisionFile.before.py
new file mode 100644
index 000000000000..4638816d913c
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/NameCollisionFile.before.py
@@ -0,0 +1,4 @@
+def hello():
+ pass
+
+print("Hello")
\ No newline at end of file
diff --git a/python/testData/refactoring/extractmethod/NameCollisionSuperClass.before.py b/python/testData/refactoring/extractmethod/NameCollisionSuperClass.before.py
new file mode 100644
index 000000000000..9f06672765ba
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/NameCollisionSuperClass.before.py
@@ -0,0 +1,7 @@
+class A:
+ def hello(self):
+ pass
+
+class B(A):
+ def foo(self):
+ print("Hello")
diff --git a/python/testData/refactoring/extractmethod/OutNotEmptyStatements.after.py b/python/testData/refactoring/extractmethod/OutNotEmptyStatements.after.py
new file mode 100644
index 000000000000..e76646160990
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/OutNotEmptyStatements.after.py
@@ -0,0 +1,12 @@
+def sum_squares(a_new, result_new):
+ while a_new < 10:
+ result_new += a_new * a_new
+ a_new += 1
+ return result_new
+
+
+def f():
+ a = 10
+ result = 0
+ result = sum_squares(a, result)
+ print("Sum of squares: " + result)
diff --git a/python/testData/refactoring/extractmethod/OutNotEmptyStatements.before.py b/python/testData/refactoring/extractmethod/OutNotEmptyStatements.before.py
new file mode 100644
index 000000000000..dbc4dda006e4
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/OutNotEmptyStatements.before.py
@@ -0,0 +1,7 @@
+def f():
+ a = 10
+ result = 0
+ while a < 10:
+ result += a * a
+ a += 1
+ print("Sum of squares: " + result)
diff --git a/python/testData/refactoring/extractmethod/OutNotEmptyStatements2.after.py b/python/testData/refactoring/extractmethod/OutNotEmptyStatements2.after.py
new file mode 100644
index 000000000000..31e3e2fde502
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/OutNotEmptyStatements2.after.py
@@ -0,0 +1,12 @@
+def sum_squares(a_new):
+ result = 0
+ while a_new < 10:
+ result += a_new * a_new
+ a_new += 1
+ return a_new, result
+
+
+def f():
+ a = 1
+ a, result = sum_squares(a)
+ print("Sum of squares: " + a + " = " + result)
diff --git a/python/testData/refactoring/extractmethod/OutNotEmptyStatements2.before.py b/python/testData/refactoring/extractmethod/OutNotEmptyStatements2.before.py
new file mode 100644
index 000000000000..8618a55f7fd5
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/OutNotEmptyStatements2.before.py
@@ -0,0 +1,7 @@
+def f():
+ a = 1
+ result = 0
+ while a < 10:
+ result += a * a
+ a += 1
+ print("Sum of squares: " + a + " = " + result)
diff --git a/python/testData/refactoring/extractmethod/Parameter.after.py b/python/testData/refactoring/extractmethod/Parameter.after.py
new file mode 100644
index 000000000000..d8a11e00ef99
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/Parameter.after.py
@@ -0,0 +1,6 @@
+def bar(a_new):
+ print(a_new)
+
+
+def foo(a):
+ bar(a)
diff --git a/python/testData/refactoring/extractmethod/Parameter.before.py b/python/testData/refactoring/extractmethod/Parameter.before.py
new file mode 100644
index 000000000000..66dd68486827
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/Parameter.before.py
@@ -0,0 +1,2 @@
+def foo(a):
+ print(a)
diff --git a/python/testData/refactoring/extractmethod/Py479.after.py b/python/testData/refactoring/extractmethod/Py479.after.py
new file mode 100644
index 000000000000..6de82ec0c85a
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/Py479.after.py
@@ -0,0 +1,25 @@
+class Foo:
+ def __init__(self):
+ self.tmp = False
+
+ def bar(self, condition3_new, condition4_new):
+ self.tmp2 = True
+ if condition3_new:
+ print(condition3_new)
+ if condition4_new:
+ print(condition4_new)
+ print("misterious extract method test")
+
+ def extract_method(self, condition1, condition2, condition3, condition4):
+ list = (1, 2, 3)
+ a = 6
+ b = False
+ if a in list or self.tmp:
+ if condition1:
+ print(condition1)
+ if b is not condition2:
+ print(b)
+ else:
+ self.bar(condition3, condition4)
+f = Foo()
+f.extract_method(True, True, True, True)
\ No newline at end of file
diff --git a/python/testData/refactoring/extractmethod/Py479.before.py b/python/testData/refactoring/extractmethod/Py479.before.py
new file mode 100644
index 000000000000..33abf490a9f1
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/Py479.before.py
@@ -0,0 +1,22 @@
+class Foo:
+ def __init__(self):
+ self.tmp = False
+
+ def extract_method(self, condition1, condition2, condition3, condition4):
+ list = (1, 2, 3)
+ a = 6
+ b = False
+ if a in list or self.tmp:
+ if condition1:
+ print(condition1)
+ if b is not condition2:
+ print(b)
+ else:
+ self.tmp2 = True
+ if condition3:
+ print(condition3)
+ if condition4:
+ print(condition4)
+ print("misterious extract method test")
+f = Foo()
+f.extract_method(True, True, True, True)
\ No newline at end of file
diff --git a/python/testData/refactoring/extractmethod/return_tuple.after.py b/python/testData/refactoring/extractmethod/ReturnTuple.after.py
similarity index 100%
rename from python/testData/refactoring/extractmethod/return_tuple.after.py
rename to python/testData/refactoring/extractmethod/ReturnTuple.after.py
diff --git a/python/testData/refactoring/extractmethod/return_tuple.before.py b/python/testData/refactoring/extractmethod/ReturnTuple.before.py
similarity index 100%
rename from python/testData/refactoring/extractmethod/return_tuple.before.py
rename to python/testData/refactoring/extractmethod/ReturnTuple.before.py
diff --git a/python/testData/refactoring/extractmethod/Statement.after.py b/python/testData/refactoring/extractmethod/Statement.after.py
new file mode 100644
index 000000000000..b8cd0525969d
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/Statement.after.py
@@ -0,0 +1,8 @@
+def foo(a_new, b_new):
+ print(a_new + b_new * 123)
+
+
+def f():
+ a = 1
+ b = 1
+ foo(a, b)
\ No newline at end of file
diff --git a/python/testData/refactoring/extractmethod/Statement.before.py b/python/testData/refactoring/extractmethod/Statement.before.py
new file mode 100644
index 000000000000..32c0393c2407
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/Statement.before.py
@@ -0,0 +1,4 @@
+def f():
+ a = 1
+ b = 1
+ print(a + b * 123)
\ No newline at end of file
diff --git a/python/testData/refactoring/extractmethod/StatementReturn.after.py b/python/testData/refactoring/extractmethod/StatementReturn.after.py
new file mode 100644
index 000000000000..61694ca944de
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/StatementReturn.after.py
@@ -0,0 +1,10 @@
+def foo():
+ if foo():
+ return -1
+ else:
+ return 1
+
+return foo()
+
+
+bar
\ No newline at end of file
diff --git a/python/testData/refactoring/extractmethod/StatementReturn.before.py b/python/testData/refactoring/extractmethod/StatementReturn.before.py
new file mode 100644
index 000000000000..148938b0d851
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/StatementReturn.before.py
@@ -0,0 +1,8 @@
+
+if foo():
+ return -1
+else:
+ return 1
+
+
+bar
\ No newline at end of file
diff --git a/python/testData/refactoring/extractmethod/Statements.after.py b/python/testData/refactoring/extractmethod/Statements.after.py
new file mode 100644
index 000000000000..70aa5c212096
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/Statements.after.py
@@ -0,0 +1,10 @@
+def foo(a_new, b_new):
+ puts(a_new + b_new * 123)
+ print("Hello from extract method")
+
+
+def f():
+ a = 1
+ b = 1
+ foo(a, b)
+
diff --git a/python/testData/refactoring/extractmethod/Statements.before.py b/python/testData/refactoring/extractmethod/Statements.before.py
new file mode 100644
index 000000000000..c8e804887c89
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/Statements.before.py
@@ -0,0 +1,6 @@
+def f():
+ a = 1
+ b = 1
+ puts(a + b * 123)
+ print("Hello from extract method")
+
diff --git a/python/testData/refactoring/extractmethod/staticmethod.after.py b/python/testData/refactoring/extractmethod/StaticMethod.after.py
similarity index 100%
rename from python/testData/refactoring/extractmethod/staticmethod.after.py
rename to python/testData/refactoring/extractmethod/StaticMethod.after.py
diff --git a/python/testData/refactoring/extractmethod/staticmethod.before.py b/python/testData/refactoring/extractmethod/StaticMethod.before.py
similarity index 100%
rename from python/testData/refactoring/extractmethod/staticmethod.before.py
rename to python/testData/refactoring/extractmethod/StaticMethod.before.py
diff --git a/python/testData/refactoring/extractmethod/WhileOutput.after.py b/python/testData/refactoring/extractmethod/WhileOutput.after.py
new file mode 100644
index 000000000000..502f8d2ee25b
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/WhileOutput.after.py
@@ -0,0 +1,11 @@
+def bar(a_new):
+ do_smth
+ a_new += 1
+ return a_new
+
+
+def f():
+ a = 1
+ while a < 10:
+ a = bar(a)
+ print(a)
diff --git a/python/testData/refactoring/extractmethod/WhileOutput.before.py b/python/testData/refactoring/extractmethod/WhileOutput.before.py
new file mode 100644
index 000000000000..7dc2ed5893d1
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/WhileOutput.before.py
@@ -0,0 +1,6 @@
+def f():
+ a = 1
+ while a < 10:
+ do_smth
+ a+=1
+ print(a)
diff --git a/python/testData/refactoring/extractmethod/WrongSelectionFromImportStar.before.py b/python/testData/refactoring/extractmethod/WrongSelectionFromImportStar.before.py
new file mode 100644
index 000000000000..a1f3184f5249
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/WrongSelectionFromImportStar.before.py
@@ -0,0 +1 @@
+from mymodule import *
diff --git a/python/testData/refactoring/extractmethod/WrongSelectionIfPart.before.py b/python/testData/refactoring/extractmethod/WrongSelectionIfPart.before.py
new file mode 100644
index 000000000000..9274a2c1a07b
--- /dev/null
+++ b/python/testData/refactoring/extractmethod/WrongSelectionIfPart.before.py
@@ -0,0 +1,13 @@
+class Settings(patterns.Observer, UnicodeAwareConfigParser):
+ def __init__(self):
+ pass
+ def set(self, section, option, value, new=False):
+ if new:
+ currentValue = 'a new option, so use something as current value'\
+ ' that is unlikely to be equal to the new value'
+ else:
+ currentValue = self.get(section, option)
+ if value != currentValue:
+ patterns.Event('before.%s.%s'%(section, option), self, value).send()
+ super(Settings, self).set(section, option, value)
+ patterns.Event('%s.%s'%(section, option), self, value).send()
diff --git a/python/testSrc/com/jetbrains/python/refactoring/PyExtractMethodTest.java b/python/testSrc/com/jetbrains/python/refactoring/PyExtractMethodTest.java
index 84b1b40d3222..a2d9dc970a85 100644
--- a/python/testSrc/com/jetbrains/python/refactoring/PyExtractMethodTest.java
+++ b/python/testSrc/com/jetbrains/python/refactoring/PyExtractMethodTest.java
@@ -1,6 +1,8 @@
package com.jetbrains.python.refactoring;
import com.intellij.lang.LanguageRefactoringSupport;
+import com.intellij.lang.refactoring.RefactoringSupportProvider;
+import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.ex.EditorEx;
import com.intellij.refactoring.RefactoringActionHandler;
import com.jetbrains.python.PythonLanguage;
@@ -11,152 +13,156 @@ import com.jetbrains.python.refactoring.extractmethod.PyExtractMethodUtil;
* @author oleg
*/
public class PyExtractMethodTest extends LightMarkedTestCase {
- private void doTest(final String testPath,
- final String name,
- final String result) {
-
- myFixture.configureByFile("/refactoring/extractmethod/" + testPath);
- final RefactoringActionHandler handler = LanguageRefactoringSupport.INSTANCE.forLanguage(PythonLanguage.getInstance()).getExtractMethodHandler();
- try {
- System.setProperty(PyExtractMethodUtil.NAME, name);
- try {
- handler.invoke(myFixture.getProject(), myFixture.getEditor(), myFixture.getFile(), ((EditorEx) myFixture.getEditor()).getDataContext());
- }
- catch (Exception e) {
- if (result.endsWith(".py")) { // expected output file, not an exception
- e.printStackTrace();
- }
- assertEquals(result, e.getMessage());
- return;
- }
- } finally {
- System.clearProperty(PyExtractMethodUtil.NAME);
- }
- myFixture.checkResultByFile("/refactoring/extractmethod/" + result);
- }
-
private void doTest(String newName) {
final String testName = getTestName(false);
- doTest(testName + ".before.py", newName, testName + ".after.py");
+ final String beforeName = testName + ".before.py";
+ final String afterName = testName + ".after.py";
+ final String dir = "refactoring/extractmethod/";
+
+ myFixture.configureByFile(dir + beforeName);
+ final RefactoringSupportProvider provider = LanguageRefactoringSupport.INSTANCE.forLanguage(PythonLanguage.getInstance());
+ assertNotNull(provider);
+ final RefactoringActionHandler handler = provider.getExtractMethodHandler();
+ assertNotNull(handler);
+ final Editor editor = myFixture.getEditor();
+ assertInstanceOf(editor, EditorEx.class);
+ System.setProperty(PyExtractMethodUtil.NAME, newName);
+ try {
+ handler.invoke(myFixture.getProject(), editor, myFixture.getFile(), ((EditorEx)editor).getDataContext());
+ }
+ finally {
+ System.clearProperty(PyExtractMethodUtil.NAME);
+ }
+ myFixture.checkResultByFile(dir + afterName);
+ }
+
+ private void doFail(String newName, String message) {
+ try {
+ doTest(newName);
+ }
+ catch (Exception e) {
+ assertEquals(message, e.getMessage());
+ return;
+ }
+ fail("No exception was thrown");
}
public void testParameter() {
- doTest("outEmpty/parameter.before.py", "bar", "outEmpty/parameter.after.py");
+ doTest("bar");
}
public void testBreakAst() {
- doTest("outEmpty/break_ast.before.py", "bar", "outEmpty/break_ast.after.py");
+ doTest("bar");
}
public void testExpression() {
- doTest("outEmpty/expression.before.py", "plus", "outEmpty/expression.after.py");
+ doTest("plus");
}
public void testStatement() {
- doTest("outEmpty/statement.before.py", "foo", "outEmpty/statement.after.py");
+ doTest("foo");
}
public void testStatements() {
- doTest("outEmpty/statements.before.py", "foo", "outEmpty/statements.after.py");
+ doTest("foo");
}
public void testStatementReturn() {
- doTest("outEmpty/statement_return.before.py", "foo", "outEmpty/statement_return.after.py");
+ doTest("foo");
}
public void testBinaryExpression() {
- doTest("controlFlow/binary_expr.before.py", "foo", "controlFlow/binary_expr.after.py");
+ doTest("foo");
}
public void testWhileOutput() {
- doTest("controlFlow/while_output.before.py", "bar", "controlFlow/while_output.after.py");
+ doTest("bar");
}
public void testNameCollisionClass() {
- doTest("namesCollision/class.before.py", "hello", "Method name clashes with already existing method name");
+ doFail("hello", "Method name clashes with already existing method name");
}
public void testNameCollisionFile() {
- doTest("namesCollision/file.before.py", "hello", "Method name clashes with already existing method name");
+ doFail("hello", "Method name clashes with already existing method name");
}
public void testNameCollisionSuperClass() {
- doTest("namesCollision/superclass.before.py", "hello", "Method name clashes with already existing method name");
+ doFail("hello", "Method name clashes with already existing method name");
}
public void testOutNotEmptyStatements() {
- doTest("outNotEmpty/statements.before.py", "sum_squares", "outNotEmpty/statements.after.py");
+ doTest("sum_squares");
}
public void testOutNotEmptyStatements2() {
- doTest("outNotEmpty/statements2.before.py", "sum_squares", "outNotEmpty/statements2.after.py");
+ doTest("sum_squares");
}
// PY-2903
public void _testComment() {
- doTest("comment.before.py", "bar", "comment.after.py");
+ doTest("bar");
}
public void testFile() {
- doTest("file.before.py", "bar", "file.after.py");
+ doTest("bar");
}
-
- public void testMethod() {
- doTest("context/method.before.py", "bar", "context/method.after.py");
+ public void testMethodContext() {
+ doTest("bar");
}
public void testMethodIndent() {
- doTest("context/methodindent.before.py", "bar", "context/methodindent.after.py");
+ doTest("bar");
}
public void testMethodReturn() {
- doTest("context/methodreturn.before.py", "bar", "context/methodreturn.after.py");
+ doTest("bar");
}
public void testWrongSelectionIfPart() {
- doTest("wrongSelection/ifpart.before.py", "bar", "Cannot perform extract method using selected element(s)");
+ doFail("bar", "Cannot perform extract method using selected element(s)");
}
- public void testFromImportStatement() {
- doTest("wrongSelection/fromimport.before.py", "bar", "Cannot perform refactoring with from import statement inside code block");
+ public void testWrongSelectionFromImportStar() {
+ doFail("bar", "Cannot perform refactoring with from import statement inside code block");
}
public void testPy479() {
- doTest("outEmpty/py479.before.py", "bar", "outEmpty/py479.after.py");
+ doTest("bar");
}
- public void testClass() {
- doTest("context/class.before.py", "bar", "context/class.after.py");
+ public void testClassContext() {
+ doTest("bar");
}
public void testConditionalReturn() {
- doTest("conditionalreturn.before.py", "bar", "Cannot perform refactoring when execution flow is interrupted");
+ doFail("bar", "Cannot perform refactoring when execution flow is interrupted");
}
public void testReturnTuple() {
- doTest("return_tuple.before.py", "bar", "return_tuple.after.py");
+ doTest("bar");
}
public void testComment2() {
- doTest("comment2.before.py", "baz", "comment2.after.py");
+ doTest("baz");
}
public void testElseBody() {
- doTest("elsebody.before.py", "baz", "elsebody.after.py");
+ doTest("baz");
}
public void testClassMethod() {
- doTest("classmethod.before.py", "baz", "classmethod.after.py");
+ doTest("baz");
}
public void testStaticMethod() {
- doTest("staticmethod.before.py", "baz", "staticmethod.after.py");
+ doTest("baz");
}
// PY-5123
public void testMethodInIf() {
- doTest("methodInIf.before.py", "baz", "methodInIf.after.py");
+ doTest("baz");
}
// PY-6081