Extract Function: Allow to choose between function and property extraction
This commit is contained in:
+24
-10
@@ -38,6 +38,9 @@ import com.intellij.util.containers.ContainerUtil
|
||||
import kotlin.test.assertEquals
|
||||
import org.jetbrains.jet.plugin.JetLightCodeInsightFixtureTestCase
|
||||
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase
|
||||
import org.jetbrains.jet.plugin.refactoring.extractFunction.ExtractKotlinFunctionHandlerHelper
|
||||
import org.jetbrains.jet.plugin.refactoring.extractFunction.ExtractionGeneratorOptions
|
||||
import org.jetbrains.jet.plugin.refactoring.extractFunction.ExtractableCodeDescriptor
|
||||
|
||||
public abstract class AbstractJetExtractionTest() : JetLightCodeInsightFixtureTestCase() {
|
||||
override fun getProjectDescriptor() = LightCodeInsightFixtureTestCase.JAVA_LATEST
|
||||
@@ -78,21 +81,32 @@ public abstract class AbstractJetExtractionTest() : JetLightCodeInsightFixtureTe
|
||||
InTextDirectivesUtils.findLinesWithPrefixesRemoved(fileText, "// PARAM_DESCRIPTOR: ").joinToString()
|
||||
val expectedTypes =
|
||||
InTextDirectivesUtils.findLinesWithPrefixesRemoved(fileText, "// PARAM_TYPES: ").map { "[$it]" }.joinToString()
|
||||
val extractAsProperty = InTextDirectivesUtils.isDirectiveDefined(fileText, "// EXTRACT_AS_PROPERTY")
|
||||
|
||||
val renderer = DescriptorRenderer.DEBUG_TEXT
|
||||
|
||||
val editor = fixture.getEditor()
|
||||
selectElements(editor, file) { (elements, previousSibling) ->
|
||||
ExtractKotlinFunctionHandler().doInvoke(editor, file, elements, explicitPreviousSibling ?: previousSibling) {
|
||||
val allParameters = ContainerUtil.createMaybeSingletonList(it.receiverParameter) + it.parameters
|
||||
val actualDescriptors = allParameters.map { renderer.render(it.originalDescriptor) }.joinToString()
|
||||
val actualTypes = allParameters.map {
|
||||
it.parameterTypeCandidates.map { renderer.renderType(it) }.joinToString(", ", "[", "]")
|
||||
}.joinToString()
|
||||
selectElements(editor, file) {(elements, previousSibling) ->
|
||||
ExtractKotlinFunctionHandler(
|
||||
helper = object : ExtractKotlinFunctionHandlerHelper() {
|
||||
override fun adjustGeneratorOptions(options: ExtractionGeneratorOptions): ExtractionGeneratorOptions {
|
||||
return options.copy(extractAsProperty = extractAsProperty)
|
||||
}
|
||||
|
||||
assertEquals(expectedDescriptors, actualDescriptors, "Expected descriptors mismatch.")
|
||||
assertEquals(expectedTypes, actualTypes, "Expected types mismatch.")
|
||||
}
|
||||
override fun adjustDescriptor(descriptor: ExtractableCodeDescriptor): ExtractableCodeDescriptor {
|
||||
val allParameters = ContainerUtil.createMaybeSingletonList(descriptor.receiverParameter) + descriptor.parameters
|
||||
val actualDescriptors = allParameters.map { renderer.render(it.originalDescriptor) }.joinToString()
|
||||
val actualTypes = allParameters.map {
|
||||
it.parameterTypeCandidates.map { renderer.renderType(it) }.joinToString(", ", "[", "]")
|
||||
}.joinToString()
|
||||
|
||||
assertEquals(expectedDescriptors, actualDescriptors, "Expected descriptors mismatch.")
|
||||
assertEquals(expectedTypes, actualTypes, "Expected types mismatch.")
|
||||
|
||||
return descriptor
|
||||
}
|
||||
}
|
||||
).doInvoke(editor, file, elements, explicitPreviousSibling ?: previousSibling)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+30
-1
@@ -211,12 +211,40 @@ public class JetExtractionTestGenerated extends AbstractJetExtractionTest {
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/refactoring/extractFunction")
|
||||
@InnerTestClasses({ExtractFunction.Basic.class, ExtractFunction.ControlFlow.class, ExtractFunction.DefaultContainer.class, ExtractFunction.Delegation.class, ExtractFunction.Initializers.class, ExtractFunction.Parameters.class, ExtractFunction.TypeParameters.class})
|
||||
@InnerTestClasses({ExtractFunction.AsProperty.class, ExtractFunction.Basic.class, ExtractFunction.ControlFlow.class, ExtractFunction.DefaultContainer.class, ExtractFunction.Delegation.class, ExtractFunction.Initializers.class, ExtractFunction.Parameters.class, ExtractFunction.TypeParameters.class})
|
||||
public static class ExtractFunction extends AbstractJetExtractionTest {
|
||||
public void testAllFilesPresentInExtractFunction() throws Exception {
|
||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/refactoring/extractFunction"), Pattern.compile("^(.+)\\.kt$"), true);
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/refactoring/extractFunction/asProperty")
|
||||
public static class AsProperty extends AbstractJetExtractionTest {
|
||||
public void testAllFilesPresentInAsProperty() throws Exception {
|
||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/refactoring/extractFunction/asProperty"), Pattern.compile("^(.+)\\.kt$"), true);
|
||||
}
|
||||
|
||||
@TestMetadata("extractToClass.kt")
|
||||
public void testExtractToClass() throws Exception {
|
||||
doExtractFunctionTest("idea/testData/refactoring/extractFunction/asProperty/extractToClass.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("extractToFile.kt")
|
||||
public void testExtractToFile() throws Exception {
|
||||
doExtractFunctionTest("idea/testData/refactoring/extractFunction/asProperty/extractToFile.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("extractToFunction.kt")
|
||||
public void testExtractToFunction() throws Exception {
|
||||
doExtractFunctionTest("idea/testData/refactoring/extractFunction/asProperty/extractToFunction.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("extractWithParams.kt")
|
||||
public void testExtractWithParams() throws Exception {
|
||||
doExtractFunctionTest("idea/testData/refactoring/extractFunction/asProperty/extractWithParams.kt");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/refactoring/extractFunction/basic")
|
||||
public static class Basic extends AbstractJetExtractionTest {
|
||||
public void testAllFilesPresentInBasic() throws Exception {
|
||||
@@ -1311,6 +1339,7 @@ public class JetExtractionTestGenerated extends AbstractJetExtractionTest {
|
||||
public static Test innerSuite() {
|
||||
TestSuite suite = new TestSuite("ExtractFunction");
|
||||
suite.addTestSuite(ExtractFunction.class);
|
||||
suite.addTestSuite(AsProperty.class);
|
||||
suite.addTestSuite(Basic.class);
|
||||
suite.addTest(ControlFlow.innerSuite());
|
||||
suite.addTestSuite(DefaultContainer.class);
|
||||
|
||||
Reference in New Issue
Block a user