From 62e8883138f91c82e99769f929d34c4f002d9a1b Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Mon, 3 Feb 2014 14:56:40 +0400 Subject: [PATCH] Test for KT-365 Support renaming packages #KT-365 Obsolete --- .../after/ForClassImport.kt | 3 +++ .../after/ForFunctionImport.kt | 3 +++ .../after/RenameKotlinPackage.kt | 8 ++++++ .../before/ForClassImport.kt | 3 +++ .../before/ForFunctionImport.kt | 3 +++ .../before/RenameKotlinPackage.kt | 8 ++++++ .../renameInOtherFile.test | 7 +++++ .../renameKotlinPackage.test | 6 +++++ .../refactoring/rename/AbstractRenameTest.kt | 26 +++++++++++++++++++ .../rename/RenameTestGenerated.java | 10 +++++++ 10 files changed, 77 insertions(+) create mode 100644 idea/testData/refactoring/rename/renameKotlinPackage/after/ForClassImport.kt create mode 100644 idea/testData/refactoring/rename/renameKotlinPackage/after/ForFunctionImport.kt create mode 100644 idea/testData/refactoring/rename/renameKotlinPackage/after/RenameKotlinPackage.kt create mode 100644 idea/testData/refactoring/rename/renameKotlinPackage/before/ForClassImport.kt create mode 100644 idea/testData/refactoring/rename/renameKotlinPackage/before/ForFunctionImport.kt create mode 100644 idea/testData/refactoring/rename/renameKotlinPackage/before/RenameKotlinPackage.kt create mode 100644 idea/testData/refactoring/rename/renameKotlinPackage/renameInOtherFile.test create mode 100644 idea/testData/refactoring/rename/renameKotlinPackage/renameKotlinPackage.test diff --git a/idea/testData/refactoring/rename/renameKotlinPackage/after/ForClassImport.kt b/idea/testData/refactoring/rename/renameKotlinPackage/after/ForClassImport.kt new file mode 100644 index 00000000000..deaec966847 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinPackage/after/ForClassImport.kt @@ -0,0 +1,3 @@ +package some.bar.other + +class Test \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameKotlinPackage/after/ForFunctionImport.kt b/idea/testData/refactoring/rename/renameKotlinPackage/after/ForFunctionImport.kt new file mode 100644 index 00000000000..10193b9f9d7 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinPackage/after/ForFunctionImport.kt @@ -0,0 +1,3 @@ +package some.bar.other + +fun testFunction() {} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameKotlinPackage/after/RenameKotlinPackage.kt b/idea/testData/refactoring/rename/renameKotlinPackage/after/RenameKotlinPackage.kt new file mode 100644 index 00000000000..7d6a6615e9d --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinPackage/after/RenameKotlinPackage.kt @@ -0,0 +1,8 @@ +package some.bar.more + +import some.bar.other.Test + +fun test() { + some.bar.more.test() + some.bar.other.testFunction() +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameKotlinPackage/before/ForClassImport.kt b/idea/testData/refactoring/rename/renameKotlinPackage/before/ForClassImport.kt new file mode 100644 index 00000000000..78acf9c5c5b --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinPackage/before/ForClassImport.kt @@ -0,0 +1,3 @@ +package some.foo.other + +class Test \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameKotlinPackage/before/ForFunctionImport.kt b/idea/testData/refactoring/rename/renameKotlinPackage/before/ForFunctionImport.kt new file mode 100644 index 00000000000..d53cab1e1f1 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinPackage/before/ForFunctionImport.kt @@ -0,0 +1,3 @@ +package some.foo.other + +fun testFunction() {} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameKotlinPackage/before/RenameKotlinPackage.kt b/idea/testData/refactoring/rename/renameKotlinPackage/before/RenameKotlinPackage.kt new file mode 100644 index 00000000000..6be54c09ee8 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinPackage/before/RenameKotlinPackage.kt @@ -0,0 +1,8 @@ +package some.foo.more + +import some.foo.other.Test + +fun test() { + some.foo.more.test() + some.foo.other.testFunction() +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameKotlinPackage/renameInOtherFile.test b/idea/testData/refactoring/rename/renameKotlinPackage/renameInOtherFile.test new file mode 100644 index 00000000000..1e0ee7576a7 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinPackage/renameInOtherFile.test @@ -0,0 +1,7 @@ +{ + "type": "KOTLIN_PACKAGE", + "fqn": "some.foo", + "newName": "bar", + "mainFile": "ForClassImport.kt", + "comment": "KT-365 Support renaming packages" +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameKotlinPackage/renameKotlinPackage.test b/idea/testData/refactoring/rename/renameKotlinPackage/renameKotlinPackage.test new file mode 100644 index 00000000000..016ba6260ba --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinPackage/renameKotlinPackage.test @@ -0,0 +1,6 @@ +{ + "type": "KOTLIN_PACKAGE", + "fqn": "some.foo", + "newName": "bar", + "comment": "KT-365 Support renaming packages" +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/refactoring/rename/AbstractRenameTest.kt b/idea/tests/org/jetbrains/jet/plugin/refactoring/rename/AbstractRenameTest.kt index 9ae41957e91..6e235670f5a 100644 --- a/idea/tests/org/jetbrains/jet/plugin/refactoring/rename/AbstractRenameTest.kt +++ b/idea/tests/org/jetbrains/jet/plugin/refactoring/rename/AbstractRenameTest.kt @@ -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 ) { diff --git a/idea/tests/org/jetbrains/jet/plugin/refactoring/rename/RenameTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/refactoring/rename/RenameTestGenerated.java index 804580d773c..71574a04230 100644 --- a/idea/tests/org/jetbrains/jet/plugin/refactoring/rename/RenameTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/refactoring/rename/RenameTestGenerated.java @@ -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");