From b1f3319f6c96bce167eaae853f53c35bc4929d7d Mon Sep 17 00:00:00 2001 From: Mikhail Filippov Date: Wed, 2 Oct 2024 13:53:53 +0400 Subject: [PATCH] convert GradleToolWindowTest to Kotlin GitOrigin-RevId: 2e565495930cfc72a8f8b8918b8c74b17516b3ce --- .../GradleToolWindowOldGroupingTest.kt | 7 +- .../importing/GradleToolWindowTest.groovy | 335 ------------------ .../importing/GradleToolWindowTest.kt | 335 ++++++++++++++++++ 3 files changed, 339 insertions(+), 338 deletions(-) delete mode 100644 plugins/gradle/java/testSources/importing/GradleToolWindowTest.groovy create mode 100644 plugins/gradle/java/testSources/importing/GradleToolWindowTest.kt diff --git a/plugins/gradle/java/testSources/importing/GradleToolWindowOldGroupingTest.kt b/plugins/gradle/java/testSources/importing/GradleToolWindowOldGroupingTest.kt index 4c9e4548069c..5cf8bb38421b 100644 --- a/plugins/gradle/java/testSources/importing/GradleToolWindowOldGroupingTest.kt +++ b/plugins/gradle/java/testSources/importing/GradleToolWindowOldGroupingTest.kt @@ -6,11 +6,12 @@ import java.io.File class GradleToolWindowOldGroupingTest : GradleToolWindowTest() { override fun setUp() { super.setUp() - currentExternalProjectSettings.setUseQualifiedModuleNames(false) + currentExternalProjectSettings.isUseQualifiedModuleNames = false } - override fun getPath(): String { - val testDataPath = super.getPath() + override val path: String + get() { + val testDataPath = super.path val testDataForOldGrouping = "$testDataPath.old" if (File(testDataForOldGrouping).exists()) { return testDataForOldGrouping diff --git a/plugins/gradle/java/testSources/importing/GradleToolWindowTest.groovy b/plugins/gradle/java/testSources/importing/GradleToolWindowTest.groovy deleted file mode 100644 index 7a385c974b1d..000000000000 --- a/plugins/gradle/java/testSources/importing/GradleToolWindowTest.groovy +++ /dev/null @@ -1,335 +0,0 @@ -// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -package org.jetbrains.plugins.gradle.importing - -import com.intellij.openapi.application.WriteAction -import com.intellij.openapi.externalSystem.importing.ImportSpec -import com.intellij.openapi.externalSystem.importing.ImportSpecBuilder -import com.intellij.openapi.externalSystem.service.project.ProjectDataManager -import com.intellij.openapi.externalSystem.service.project.manage.ExternalProjectsManagerImpl -import com.intellij.openapi.externalSystem.view.ExternalProjectsViewImpl -import com.intellij.openapi.externalSystem.view.ExternalSystemNode -import com.intellij.openapi.externalSystem.view.ProjectNode -import com.intellij.openapi.module.JavaModuleType -import com.intellij.openapi.module.Module -import com.intellij.openapi.module.ModuleManager -import com.intellij.openapi.vfs.VirtualFile -import com.intellij.testFramework.EdtTestUtil -import com.intellij.testFramework.PlatformTestUtil -import com.intellij.testFramework.PsiTestUtil -import com.intellij.toolWindow.ToolWindowHeadlessManagerImpl -import org.junit.Test -import org.junit.runners.Parameterized - -class GradleToolWindowTest extends GradleImportingTestCase { - ToolWindowHeadlessManagerImpl.MockToolWindow toolWindow - ExternalProjectsViewImpl view - boolean isPreview - - @Parameterized.Parameters(name = "with Gradle-{0}") - static Collection data() { - return [["5.0"] as Object[]] - } - - @Override - void setUp() throws Exception { - super.setUp() - isPreview = false - toolWindow = new ToolWindowHeadlessManagerImpl.MockToolWindow(myProject) - view = new ExternalProjectsViewImpl(myProject, toolWindow, getExternalSystemId()) - EdtTestUtil.runInEdtAndWait { - ExternalProjectsManagerImpl.getInstance(myProject).registerView(view) - view.initStructure() - } - } - - @Test - void testSimpleBuild() { - createSettingsFile(""" -rootProject.name='rooot' -include ':child1' -include ':child2'""" - ) - - createProjectSubFile "build.gradle", """ -group 'test' -version '1.0-SNAPSHOT' -""" - - createProjectSubFile "../child1/build.gradle", """ -group 'test' -version '1.0-SNAPSHOT' -""" - createProjectSubFile "../child2/build.gradle", """ -group 'test' -version '1.0-SNAPSHOT' -""" - - doTest() - } - - @Test - void testDotInModuleName() { - createSettingsFile(""" -rootProject.name='rooot.dot' -include ':child1' -include ':child2' -include ':child2:dot.child' -""" - ) - - createProjectSubFile "build.gradle", """ -group 'test' -version '1.0-SNAPSHOT' -""" - - createProjectSubFile "../child1/build.gradle", """ -group 'test' -version '1.0-SNAPSHOT' -""" - createProjectSubFile "../child2/build.gradle", """ -group 'test' -version '1.0-SNAPSHOT' -""" - - createProjectSubFile "../child2/dot.child/build.gradle", """ -group 'test' -version '1.0-SNAPSHOT' -""" - - doTest() - } - - @Test - void testBuildSrc() { - createSettingsFile(""" -rootProject.name='rooot' -include ':child1' -""" - ) - - createProjectSubFile "build.gradle", """ -group 'test' -version '1.0-SNAPSHOT' -""" - - createProjectSubFile "../child1/build.gradle", """ -group 'test' -version '1.0-SNAPSHOT' -def foo = new testBuildSrcClassesUsages.BuildSrcClass().sayHello() -""" - - createProjectSubFile "buildSrc/src/main/groovy/testBuildSrcClassesUsages/BuildSrcClass.groovy", """ -package testBuildSrcClassesUsages; -public class BuildSrcClass { - public String sayHello() { 'Hello!' } -} -""" - - doTest() - } - - - @Test - void testSimpleBuildWithoutGrouping() { - createSettingsFile(""" -rootProject.name='rooot' -include ':child1' -include ':child2'""" - ) - - createProjectSubFile "build.gradle", """ -group 'test' -version '1.0-SNAPSHOT' -""" - - createProjectSubFile "../child1/build.gradle", """ -group 'test' -version '1.0-SNAPSHOT' -""" - createProjectSubFile "../child2/build.gradle", """ -group 'test' -version '1.0-SNAPSHOT' -""" - view.setGroupModules(false) - doTest() - } - - - @Test - void testWithExistedRootModule() { - createMainModule("project") - - createSettingsFile(""" -rootProject.name='rooot' -include ':child1' -include ':child2'""" - ) - - createProjectSubFile "build.gradle", """ -group 'test' -version '1.0-SNAPSHOT' -""" - - createProjectSubFile "../child1/build.gradle", """ -group 'test' -version '1.0-SNAPSHOT' -""" - createProjectSubFile "../child2/build.gradle", """ -group 'test' -version '1.0-SNAPSHOT' -""" - isPreview = true - importProject() - isPreview = false - - doTest() - assert ModuleManager.getInstance(myProject).getModules().length == 3 - } - - @Test - void testWithExistedRootModuleWithoutPreviewImport() { - createMainModule("project") - - createSettingsFile(""" -rootProject.name='rooot' -include ':child1' -include ':child2'""" - ) - - createProjectSubFile "build.gradle", """ -group 'test' -version '1.0-SNAPSHOT' -""" - - createProjectSubFile "../child1/build.gradle", """ -group 'test' -version '1.0-SNAPSHOT' -""" - createProjectSubFile "../child2/build.gradle", """ -group 'test' -version '1.0-SNAPSHOT' -""" - - doTest() - assert ModuleManager.getInstance(myProject).getModules().length == 3 - } - - Module createMainModule(String name) { - Module module = null - WriteAction.runAndWait { - VirtualFile f = createProjectSubFile(name + ".iml") - module = ModuleManager.getInstance(myProject).newModule(f.getPath(), JavaModuleType.getModuleType().getName()) - PsiTestUtil.addContentRoot(module, f.getParent()) - } - return module - } - - @Test - void testBasicCompositeBuild() throws Exception { - createSettingsFile(""" -rootProject.name='adhoc' -includeBuild '../my-app' -includeBuild '../my-utils'""" - ) - - createProjectSubFile("../my-app/settings.gradle", "rootProject.name = 'my-app'\n") - createProjectSubFile("../my-app/build.gradle", - """ -apply plugin: 'java' -group 'org.sample' -version '1.0' - -dependencies { - compile 'org.sample:number-utils:1.0' - compile 'org.sample:string-utils:1.0' -} -""") - - createProjectSubFile("../my-utils/settings.gradle", - """ -rootProject.name = 'my-utils' -include 'number-utils', 'string-utils' """ - ) - - createProjectSubFile("../my-utils/build.gradle", - injectRepo( - """ -subprojects { - apply plugin: 'java' - - group 'org.sample' - version '1.0' -} - -project(':string-utils') { - dependencies { - compile 'org.apache.commons:commons-lang3:3.4' - } -} """ - ) - ) - - doTest() - } - - @Test - void testDuplicatingProjectLeafNames() { - createSettingsFile(""" -rootProject.name = 'rootProject' -include 'p1', 'p2', 'p1:sub:sp1', 'p2:p2sub:sub:sp2' -include 'p1:leaf', 'p2:leaf' -""") - - doTest() - } - - @Override - protected ImportSpec createImportSpec() { - ImportSpecBuilder importSpecBuilder = new ImportSpecBuilder(super.createImportSpec()) - if (isPreview) { - importSpecBuilder.usePreviewMode() - } - return importSpecBuilder.build() - } - - def doTest() { - importProject() - checkToolWindowState() - } - - - private void checkToolWindowState() { - def data = ProjectDataManager.getInstance().getExternalProjectsData(myProject, getExternalSystemId()).collect { - it.externalProjectStructure - } - - def rootNodes = data.collect { - new ProjectNode(view, it) - } - - def tree = buildTree("View root", rootNodes, null) - def sw = new StringWriter() - def writer = new PrintWriter(sw) - tree.print(writer) - - String path = getPath() - assert new File(path).exists(), "File $path doesn't exist" - - assertSameLinesWithFile(path, sw.toString()) - } - - protected String getPath() { - def communityPath = PlatformTestUtil.getCommunityPath().replace(File.separatorChar, '/'.charAt(0)) - def testName = getTestName(true) - testName = getTestName(testName, true) - return "$communityPath/plugins/gradle/java/testData/toolWindow/${testName}.test" - } - - static Node buildTree(String name, List> nodes, Node parent) { - def node = new Node(parent, name) - nodes.each { - buildTree(it.name, it.children.toList(), node) - } - return node - } -} diff --git a/plugins/gradle/java/testSources/importing/GradleToolWindowTest.kt b/plugins/gradle/java/testSources/importing/GradleToolWindowTest.kt new file mode 100644 index 000000000000..c0b8bea94e5b --- /dev/null +++ b/plugins/gradle/java/testSources/importing/GradleToolWindowTest.kt @@ -0,0 +1,335 @@ +// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package org.jetbrains.plugins.gradle.importing + +import com.intellij.openapi.application.writeAction +import com.intellij.openapi.externalSystem.importing.ImportSpec +import com.intellij.openapi.externalSystem.importing.ImportSpecBuilder +import com.intellij.openapi.externalSystem.service.project.ProjectDataManager +import com.intellij.openapi.externalSystem.service.project.manage.ExternalProjectsManagerImpl +import com.intellij.openapi.externalSystem.view.ExternalProjectsViewImpl +import com.intellij.openapi.externalSystem.view.ExternalSystemNode +import com.intellij.openapi.externalSystem.view.ProjectNode +import com.intellij.openapi.module.JavaModuleType +import com.intellij.openapi.module.Module +import com.intellij.openapi.module.ModuleManager.Companion.getInstance +import com.intellij.testFramework.PlatformTestUtil +import com.intellij.testFramework.PsiTestUtil +import com.intellij.testFramework.runInEdtAndWait +import com.intellij.toolWindow.ToolWindowHeadlessManagerImpl +import groovy.util.Node +import kotlinx.coroutines.runBlocking +import org.junit.Test +import org.junit.runners.Parameterized +import java.io.File +import java.io.PrintWriter +import java.io.StringWriter +import java.util.concurrent.atomic.AtomicReference + +@Suppress("SpellCheckingInspection") +open class GradleToolWindowTest : GradleImportingTestCase() { + companion object { + @JvmStatic + @Parameterized.Parameters(name = "with Gradle-{0}") + fun data(): MutableCollection { + val result = ArrayList() + result.add("5.0") + return result + } + + private fun buildTree(name: String?, nodes: Array>, parent: Node?): Node { + val node = Node(parent, name) + for (n in nodes) { + buildTree(n.getName(), n.getChildren(), node) + } + return node + } + } + var toolWindow: ToolWindowHeadlessManagerImpl.MockToolWindow? = null + lateinit var view: ExternalProjectsViewImpl + var isPreview: Boolean = false + + public override fun setUp() { + super.setUp() + isPreview = false + toolWindow = ToolWindowHeadlessManagerImpl.MockToolWindow(myProject) + view = ExternalProjectsViewImpl(myProject, toolWindow!!, externalSystemId) + runInEdtAndWait { + ExternalProjectsManagerImpl.getInstance(myProject).registerView(view) + view.initStructure() + } + } + + @Test + fun testSimpleBuild() { + createSettingsFile(""" +rootProject.name='rooot' +include ':child1' +include ':child2' +""".trimIndent()) + + createProjectSubFile("build.gradle", """ +group 'test' +version '1.0-SNAPSHOT' +""".trimIndent()) + + createProjectSubFile("../child1/build.gradle", """ +group 'test' +version '1.0-SNAPSHOT' +""".trimIndent()) + + createProjectSubFile("../child2/build.gradle", """ +group 'test' +version '1.0-SNAPSHOT' +""".trimIndent()) + + doTest() + } + + @Test + fun testDotInModuleName() { + createSettingsFile(""" +rootProject.name='rooot.dot' +include ':child1' +include ':child2' +include ':child2:dot.child' +""".trimIndent()) + + createProjectSubFile("build.gradle", """ +group 'test' +version '1.0-SNAPSHOT' +""".trimIndent()) + + createProjectSubFile("../child1/build.gradle", """ +group 'test' +version '1.0-SNAPSHOT' +""".trimIndent()) + createProjectSubFile("../child2/build.gradle", """ +group 'test' +version '1.0-SNAPSHOT' +""".trimIndent()) + + createProjectSubFile("../child2/dot.child/build.gradle", """ +group 'test' +version '1.0-SNAPSHOT' +""".trimIndent()) + + doTest() + } + + @Test + fun testBuildSrc() { + createSettingsFile(""" +rootProject.name='rooot' +include ':child1' +""".trimIndent()) + + createProjectSubFile("build.gradle", """ +group 'test' +version '1.0-SNAPSHOT' +""".trimIndent()) + + createProjectSubFile("../child1/build.gradle", """ +group 'test' +version '1.0-SNAPSHOT' +def foo = new testBuildSrcClassesUsages.BuildSrcClass().sayHello() +""".trimIndent()) + + createProjectSubFile("buildSrc/src/main/groovy/testBuildSrcClassesUsages/BuildSrcClass.groovy", """ +package testBuildSrcClassesUsages; +public class BuildSrcClass { + public String sayHello() { 'Hello!' } +} +""".trimIndent()) + + doTest() + } + + + @Test + fun testSimpleBuildWithoutGrouping() { + createSettingsFile(""" +rootProject.name='rooot' +include ':child1' +include ':child2' +""".trimIndent()) + + createProjectSubFile("build.gradle", """ +group 'test' +version '1.0-SNAPSHOT' +""".trimIndent()) + + createProjectSubFile("../child1/build.gradle", """ +group 'test' +version '1.0-SNAPSHOT' +""".trimIndent()) + createProjectSubFile("../child2/build.gradle", """ +group 'test' +version '1.0-SNAPSHOT' +""".trimIndent()) + view.groupModules = false + doTest() + } + + + @Test + fun testWithExistedRootModule() { + createMainModule() + + createSettingsFile(""" +rootProject.name='rooot' +include ':child1' +include ':child2' +""".trimIndent()) + + createProjectSubFile("build.gradle", """ +group 'test' +version '1.0-SNAPSHOT' +""".trimIndent()) + + createProjectSubFile("../child1/build.gradle", """ +group 'test' +version '1.0-SNAPSHOT' +""".trimIndent()) + createProjectSubFile("../child2/build.gradle", """ +group 'test' +version '1.0-SNAPSHOT' +""".trimIndent()) + isPreview = true + importProject() + isPreview = false + + doTest() + assert(getInstance(myProject).modules.size == 3) + } + + @Test + fun testWithExistedRootModuleWithoutPreviewImport() { + createMainModule() + + createSettingsFile(""" +rootProject.name='rooot' +include ':child1' +include ':child2' +""".trimIndent()) + + createProjectSubFile("build.gradle", """ +group 'test' +version '1.0-SNAPSHOT' +""".trimIndent()) + + createProjectSubFile("../child1/build.gradle", """ +group 'test' +version '1.0-SNAPSHOT' +""".trimIndent()) + + createProjectSubFile("../child2/build.gradle", """ +group 'test' +version '1.0-SNAPSHOT' +""".trimIndent()) + + doTest() + assert(getInstance(myProject).modules.size == 3) + } + + fun createMainModule() { + val module = AtomicReference() + runBlocking { + writeAction { + val f = createProjectSubFile("project" + ".iml") + module.set(getInstance(myProject).newModule(f.getPath(), JavaModuleType.getModuleType().getName())) + PsiTestUtil.addContentRoot(module.get()!!, f.getParent()) + } + } + } + + @Test + fun testBasicCompositeBuild() { + createSettingsFile(""" +rootProject.name='adhoc' +includeBuild '../my-app' +includeBuild '../my-utils' +""".trimIndent()) + + createProjectSubFile("../my-app/settings.gradle", "rootProject.name = 'my-app'\n") + createProjectSubFile("../my-app/build.gradle", """ +apply plugin: 'java' +group 'org.sample' +version '1.0' + +dependencies { + compile 'org.sample:number-utils:1.0' + compile 'org.sample:string-utils:1.0' +} +""".trimIndent()) + + createProjectSubFile("../my-utils/settings.gradle", """ +rootProject.name = 'my-utils' +include 'number-utils', 'string-utils' +""".trimIndent()) + + createProjectSubFile("../my-utils/build.gradle", injectRepo(""" +subprojects { + apply plugin: 'java' + + group 'org.sample' + version '1.0' +} + +project(':string-utils') { + dependencies { + compile 'org.apache.commons:commons-lang3:3.4' + } +} +""".trimIndent())) + + doTest() + } + + @Test + fun testDuplicatingProjectLeafNames() { + createSettingsFile(""" +rootProject.name = 'rootProject' +include 'p1', 'p2', 'p1:sub:sp1', 'p2:p2sub:sub:sp2' +include 'p1:leaf', 'p2:leaf' +""".trimIndent()) + + doTest() + } + + override fun createImportSpec(): ImportSpec? { + val importSpecBuilder = ImportSpecBuilder(super.createImportSpec()) + if (isPreview) { + importSpecBuilder.usePreviewMode() + } + return importSpecBuilder.build() + } + + private fun doTest() { + importProject() + checkToolWindowState() + } + + private fun checkToolWindowState() { + val data = ProjectDataManager.getInstance().getExternalProjectsData(myProject, externalSystemId).map { it.externalProjectStructure } + + val rootNodes = data.map { ProjectNode(view, it) } + + val tree: Node = buildTree("View root", rootNodes.toTypedArray(), null) + val sw = StringWriter() + val writer = PrintWriter(sw) + tree.print(writer) + + val path = this.path + assert(File(path).exists()) { "File \$path doesn't exist" } + + assertSameLinesWithFile(path, sw.toString()) + } + + protected open val path: String + get() { + val communityPath = PlatformTestUtil.getCommunityPath().replace(File.separatorChar, '/') + var testName = getTestName(true) + testName = getTestName(testName, true) + return "$communityPath/plugins/gradle/java/testData/toolWindow/$testName.test" + } +}