Skip to content

Commit 35cca4f

Browse files
authored
Support XML configs in Spring projects #2041 (#2075)
Add XML configs gathering for Spring projects
1 parent 8ff1930 commit 35cca4f

File tree

3 files changed

+49
-2
lines changed

3 files changed

+49
-2
lines changed

utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/GenerateTestsDialogWindow.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,11 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
190190
private val codegenLanguages = createComboBox(CodegenLanguage.values())
191191
private val testFrameworks = createComboBox(TestFramework.allItems.toTypedArray())
192192

193-
private val modelSpringConfigs = (listOf(NO_SPRING_CONFIGURATION_OPTION) + model.getSortedSpringConfigurationClasses()).toTypedArray()
193+
private val modelSpringConfigs = (
194+
listOf(NO_SPRING_CONFIGURATION_OPTION) +
195+
model.getSortedSpringConfigurationClasses() +
196+
model.getSpringXMLConfigurationFiles()
197+
).toTypedArray()
194198
private val springConfig = createComboBox(modelSpringConfigs)
195199

196200
private val mockStrategies = createComboBox(MockStrategyApi.values())

utbot-ui-commons/src/main/kotlin/org/utbot/intellij/plugin/models/BaseTestModel.kt

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,20 @@ import org.jetbrains.kotlin.idea.core.getPackage
1515
import org.jetbrains.kotlin.idea.util.projectStructure.allModules
1616
import org.jetbrains.kotlin.idea.util.rootManager
1717
import org.jetbrains.kotlin.idea.util.sourceRoot
18+
import org.jetbrains.kotlin.utils.addToStdlib.flatMapToNullable
19+
import org.utbot.common.PathUtil.fileExtension
1820
import org.utbot.framework.codegen.domain.ProjectType
1921
import org.utbot.framework.plugin.api.CodegenLanguage
2022
import org.utbot.intellij.plugin.ui.utils.ITestSourceRoot
23+
import org.utbot.intellij.plugin.ui.utils.getResourcesPaths
2124
import org.utbot.intellij.plugin.ui.utils.getSortedTestRoots
2225
import org.utbot.intellij.plugin.ui.utils.isBuildWithGradle
2326
import org.utbot.intellij.plugin.ui.utils.suitableTestSourceRoots
27+
import java.nio.file.Files
28+
import java.nio.file.Path
29+
import javax.xml.parsers.DocumentBuilderFactory
30+
import kotlin.streams.asSequence
31+
import kotlin.streams.toList
2432

2533
val PsiClass.packageName: String get() = this.containingFile.containingDirectory.getPackage()?.qualifiedName ?: ""
2634
const val HISTORY_LIMIT = 10
@@ -111,6 +119,27 @@ open class BaseTestsModel(
111119
}.mapNotNull { it.qualifiedName }
112120
}
113121

122+
fun getSpringXMLConfigurationFiles(): List<String> {
123+
val resourcesPaths = srcModule.getResourcesPaths()
124+
val xmlFilePaths = resourcesPaths.flatMapTo(mutableListOf()) { path ->
125+
Files.list(path)
126+
.asSequence()
127+
.filter { it.fileExtension == ".xml" }
128+
}
129+
130+
val builder = DocumentBuilderFactory.newInstance().newDocumentBuilder()
131+
return xmlFilePaths.mapNotNull { path ->
132+
val doc = builder.parse(path.toFile())
133+
134+
val isBeanTagName = doc.documentElement.tagName == "beans"
135+
val hasAttribute = doc.documentElement.getAttribute("xmlns") == "http://www.springframework.org/schema/beans"
136+
when {
137+
isBeanTagName && hasAttribute -> path.toString()
138+
else -> null
139+
}
140+
}
141+
}
142+
114143
fun updateSourceRootHistory(path: String) {
115144
sourceRootHistory.apply {
116145
remove(path)//Remove existing entry if any

utbot-ui-commons/src/main/kotlin/org/utbot/intellij/plugin/ui/utils/ModuleUtils.kt

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import com.intellij.openapi.vfs.newvfs.impl.FakeVirtualFile
2424
import com.intellij.util.PathUtil.getParentPath
2525
import java.nio.file.Path
2626
import mu.KotlinLogging
27+
import org.jetbrains.jps.model.java.JavaResourceRootType
2728
import org.jetbrains.jps.model.module.JpsModuleSourceRootType
2829
import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider
2930
import org.jetbrains.kotlin.config.TestResourceKotlinRootType
@@ -64,6 +65,18 @@ fun Module.kotlinTargetPlatform(): TargetPlatformVersion {
6465
?.singleOrNull() ?: error("Can't determine target platform for module $this")
6566
}
6667

68+
/**
69+
* Gets paths to project resources source roots.
70+
*
71+
* E.g. src/main/resources
72+
*/
73+
fun Module.getResourcesPaths(): List<Path> =
74+
ModuleRootManager.getInstance(this)
75+
.contentEntries
76+
.flatMap { it.sourceFolders.toList() }
77+
.filter { it.rootType is JavaResourceRootType && !it.isTestSource }
78+
.mapNotNull { it.file?.toNioPath() }
79+
6780
/**
6881
* Gets a path to test resources source root.
6982
*
@@ -230,7 +243,8 @@ private fun getOrCreateTestResourcesUrl(module: Module, testSourceRoot: VirtualF
230243
if (!rootModel.isDisposed && rootModel.isWritable) rootModel.dispose()
231244
}
232245
}
233-
fun SourceFolder.getModifiableContentEntry() : ContentEntry? {
246+
247+
private fun SourceFolder.getModifiableContentEntry() : ContentEntry? {
234248
return ModuleRootManager.getInstance(contentEntry.rootModel.module).modifiableModel.contentEntries.find { entry -> entry.url == url }
235249
}
236250

0 commit comments

Comments
 (0)