mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
Add test on essential plugins
All dependencies of essential plugin should be added as essential plugins otherwise on disabling any of them the product can't be loaded GitOrigin-RevId: 1ce336e294b07d3672cdbb9279e3dabca947f48c
This commit is contained in:
committed by
intellij-monorepo-bot
parent
eb70cd0fea
commit
a1bc75e143
@@ -3,6 +3,7 @@ package org.jetbrains.intellij.build
|
||||
|
||||
import com.intellij.openapi.application.PathManager
|
||||
import com.intellij.platform.buildScripts.testFramework.createBuildOptionsForTest
|
||||
import com.intellij.platform.buildScripts.testFramework.runEssentialPluginsTest
|
||||
import com.intellij.platform.buildScripts.testFramework.runTestBuild
|
||||
import com.intellij.platform.buildScripts.testFramework.spanName
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
@@ -43,4 +44,12 @@ class IdeaCommunityBuildTest {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `essential plugins depend only on essential plugins`() {
|
||||
val homePath = PathManager.getHomeDirFor(javaClass)!!
|
||||
runEssentialPluginsTest(homePath = homePath,
|
||||
productProperties = IdeaCommunityProperties(COMMUNITY_ROOT.communityRoot),
|
||||
buildTools = ProprietaryBuildTools.DUMMY)
|
||||
}
|
||||
}
|
||||
@@ -31,5 +31,6 @@
|
||||
<orderEntry type="module" module-name="intellij.platform.jps.build" />
|
||||
<orderEntry type="module" module-name="intellij.platform.runtime.product" />
|
||||
<orderEntry type="library" name="devkit.runtime.module.repository.jps" level="project" />
|
||||
<orderEntry type="module" module-name="intellij.platform.util.xmlDom" />
|
||||
</component>
|
||||
</module>
|
||||
@@ -0,0 +1,61 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.platform.buildScripts.testFramework
|
||||
|
||||
import com.intellij.util.xml.dom.readXmlAsModel
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.assertj.core.api.SoftAssertions
|
||||
import org.jetbrains.intellij.build.BuildContext
|
||||
import org.jetbrains.intellij.build.ProductProperties
|
||||
import org.jetbrains.intellij.build.ProprietaryBuildTools
|
||||
import org.jetbrains.intellij.build.impl.BuildContextImpl
|
||||
import org.jetbrains.intellij.build.impl.collectPluginDescriptors
|
||||
import java.nio.file.Path
|
||||
|
||||
fun runEssentialPluginsTest(
|
||||
homePath: Path,
|
||||
productProperties: ProductProperties,
|
||||
buildTools: ProprietaryBuildTools,
|
||||
) = runBlocking {
|
||||
val buildContext = BuildContextImpl.createContext(
|
||||
projectHome = homePath,
|
||||
productProperties = productProperties,
|
||||
proprietaryBuildTools = buildTools,
|
||||
setupTracer = false,
|
||||
options = createBuildOptionsForTest(productProperties = productProperties, homeDir = homePath)
|
||||
)
|
||||
val essentialPlugins = readXmlAsModel(buildContext.appInfoXml.toByteArray()).children.filter { it.name == "essential-plugin" }.mapNotNull { it.content }
|
||||
val softly = SoftAssertions()
|
||||
println("Essential plugins: ${essentialPlugins.joinToString(", ")}")
|
||||
val pluginById = getPluginByIdMap(buildContext)
|
||||
for (essentialPlugin in essentialPlugins) {
|
||||
val essentialPluginDescription = pluginById[essentialPlugin]
|
||||
if(essentialPluginDescription == null) continue
|
||||
essentialPluginDescription.requiredDependencies.filter { it in pluginById }.forEach { requiredPlugin ->
|
||||
println("$essentialPlugin depends on $requiredPlugin")
|
||||
if (requiredPlugin !in essentialPlugins) {
|
||||
softly.fail<Unit>("$essentialPlugin depends on non-essential plugin $requiredPlugin")
|
||||
}
|
||||
}
|
||||
}
|
||||
softly.assertAll()
|
||||
}
|
||||
|
||||
private data class PluginDescription(
|
||||
val pluginId: String,
|
||||
val requiredDependencies: Set<String> = emptySet()
|
||||
)
|
||||
|
||||
private fun getPluginByIdMap(context: BuildContext): Map<String, PluginDescription> {
|
||||
val pluginMap = collectPluginDescriptors(
|
||||
skipImplementationDetailPlugins = true, //it's not possible to disable implementation detail plugin
|
||||
skipBundledPlugins = false,
|
||||
honorCompatiblePluginsToIgnore = false,
|
||||
context = context
|
||||
)
|
||||
|
||||
val plugins = ArrayList<PluginDescription>()
|
||||
for (plugin in pluginMap.values.toSet()) {
|
||||
plugins.add(PluginDescription(pluginId = plugin.id, requiredDependencies = plugin.requiredDependencies))
|
||||
}
|
||||
return plugins.associateBy { it.pluginId }
|
||||
}
|
||||
Reference in New Issue
Block a user