Test for KT-365 Support renaming packages

#KT-365 Obsolete
This commit is contained in:
Nikolay Krasko
2014-02-03 14:56:40 +04:00
parent 9a349374ee
commit 62e8883138
10 changed files with 77 additions and 0 deletions
@@ -0,0 +1,3 @@
package some.bar.other
class Test
@@ -0,0 +1,3 @@
package some.bar.other
fun testFunction() {}
@@ -0,0 +1,8 @@
package some.bar.more
import some.bar.other.Test
fun test() {
some.bar.more.test()
some.bar.other.testFunction()
}
@@ -0,0 +1,3 @@
package some.foo.other
class Test
@@ -0,0 +1,3 @@
package some.foo.other
fun testFunction() {}
@@ -0,0 +1,8 @@
package some.foo.more
import some.foo.other.Test
fun test() {
some.foo.more.test()
some.foo.other.testFunction()
}
@@ -0,0 +1,7 @@
{
"type": "KOTLIN_PACKAGE",
"fqn": "some.foo",
"newName": "bar",
"mainFile": "ForClassImport.kt",
"comment": "KT-365 Support renaming packages"
}
@@ -0,0 +1,6 @@
{
"type": "KOTLIN_PACKAGE",
"fqn": "some.foo",
"newName": "bar",
"comment": "KT-365 Support renaming packages"
}
@@ -44,6 +44,7 @@ import org.jetbrains.jet.lang.resolve.BindingContextUtils
import org.jetbrains.jet.lang.descriptors.ClassDescriptor
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe
import org.jetbrains.jet.lang.resolve.name.isSubpackageOf
private enum class RenameType {
JAVA_CLASS
@@ -51,6 +52,7 @@ private enum class RenameType {
KOTLIN_CLASS
KOTLIN_FUNCTION
KOTLIN_PROPERTY
KOTLIN_PACKAGE
}
fun JsonObject.getString(name: String): String {
@@ -89,6 +91,7 @@ public abstract class AbstractRenameTest : MultiFileTestCase() {
RenameType.KOTLIN_CLASS -> renameKotlinClassTest(renameObject, context)
RenameType.KOTLIN_FUNCTION -> renameKotlinFunctionTest(renameObject, context)
RenameType.KOTLIN_PROPERTY -> renameKotlinPropertyTest(renameObject, context)
RenameType.KOTLIN_PACKAGE -> renameKotlinPackageTest(renameObject, context)
}
if (hintDirective != null) {
@@ -158,6 +161,29 @@ public abstract class AbstractRenameTest : MultiFileTestCase() {
doRenameInKotlinClass(renameParamsObject, context) { classDescriptor -> classDescriptor }
}
private fun renameKotlinPackageTest(renameParamsObject: JsonObject, context: TestContext) {
val fqn = FqNameUnsafe(renameParamsObject.getString("fqn")).toSafe()
val newName = renameParamsObject.getString("newName")
val mainFilePath = renameParamsObject.getNullableString("mainFile") ?: "${getTestDirName(false)}.kt"
doTest { rootDir, rootAfter ->
val mainFile = rootDir.findChild(mainFilePath)!!
val document = FileDocumentManager.getInstance()!!.getDocument(mainFile)!!
val jetFile = PsiDocumentManager.getInstance(context.project).getPsiFile(document) as JetFile
val fileFqn = jetFile.getPackageDirective()!!.getFqName()
Assert.assertTrue("File '${mainFilePath}' should have package containing ${fqn}", fileFqn.isSubpackageOf(fqn))
val packageSegment = jetFile.getPackageDirective()!!.getPackageNames()[fqn.pathSegments().size - 1]
val segmentReference = packageSegment.getReference()!!
val psiElement = segmentReference.resolve()!!
val substitution = RenamePsiElementProcessor.forElement(psiElement).substituteElementToRename(psiElement, null)
RenameProcessor(context.project, substitution, newName, true, true).run()
}
}
private fun doRenameInKotlinClass(renameParamsObject: JsonObject, context: TestContext,
findDescriptorToRename: (ClassDescriptor) -> DeclarationDescriptor
) {
@@ -106,6 +106,16 @@ public class RenameTestGenerated extends AbstractRenameTest {
doTest("idea/testData/refactoring/rename/renameKotlinMethod/renameKotlinMethod.test");
}
@TestMetadata("renameKotlinPackage/renameInOtherFile.test")
public void testRenameKotlinPackage_RenameInOtherFile() throws Exception {
doTest("idea/testData/refactoring/rename/renameKotlinPackage/renameInOtherFile.test");
}
@TestMetadata("renameKotlinPackage/renameKotlinPackage.test")
public void testRenameKotlinPackage_RenameKotlinPackage() throws Exception {
doTest("idea/testData/refactoring/rename/renameKotlinPackage/renameKotlinPackage.test");
}
@TestMetadata("renameKotlinPackageClass/javaWrapperForKotlinPackageClass.test")
public void testRenameKotlinPackageClass_JavaWrapperForKotlinPackageClass() throws Exception {
doTest("idea/testData/refactoring/rename/renameKotlinPackageClass/javaWrapperForKotlinPackageClass.test");