Skip to content

Commit 4fd423b

Browse files
assertArrayEquals overload is not found, tests doesn't compile #135 (#464)
resolving merge conflict with main branch, use the very last (just added to the list) library with matching name
1 parent 8b70aa1 commit 4fd423b

File tree

4 files changed

+46
-13
lines changed

4 files changed

+46
-13
lines changed

utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/DependencyPatterns.kt

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,10 @@ fun MockFramework.patterns(): Patterns {
3737
return Patterns(moduleLibraryPatterns, libraryPatterns)
3838
}
3939

40-
val JUNIT_4_JAR_PATTERN = Regex("junit-4(\\.[0-9]+){1,2}")
41-
val JUNIT_4_MVN_PATTERN = Regex("junit:junit:4(\\.[0-9]+){1,2}")
42-
val JUNIT_4_BASIC_PATTERN = Regex("JUnit4")
43-
val junit4Patterns = listOf(JUNIT_4_JAR_PATTERN, JUNIT_4_MVN_PATTERN, JUNIT_4_BASIC_PATTERN)
44-
45-
val JUNIT4_BASIC_MODULE_PATTERN = Regex("junit$")
46-
val junit4ModulePatterns = listOf(JUNIT4_BASIC_MODULE_PATTERN)
40+
val JUNIT_4_JAR_PATTERN = Regex("junit-4(\\.1[2-9])(\\.[0-9]+)?")
41+
val JUNIT_4_MVN_PATTERN = Regex("junit:junit:4(\\.1[2-9])(\\.[0-9]+)?")
42+
val junit4Patterns = listOf(JUNIT_4_JAR_PATTERN, JUNIT_4_MVN_PATTERN)
43+
val junit4ModulePatterns = listOf(JUNIT_4_JAR_PATTERN, JUNIT_4_MVN_PATTERN)
4744

4845
val JUNIT_5_JAR_PATTERN = Regex("junit-jupiter-5(\\.[0-9]+){1,2}")
4946
val JUNIT_5_MVN_PATTERN = Regex("org\\.junit\\.jupiter:junit-jupiter-api:5(\\.[0-9]+){1,2}")

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import com.intellij.openapi.roots.ExternalLibraryDescriptor
44

55
//TODO: think about using JUnitExternalLibraryDescriptor from intellij-community sources (difficult to install)
66
fun jUnit4LibraryDescriptor(versionInProject: String?) =
7-
ExternalLibraryDescriptor("junit", "junit", "4.0", null, versionInProject ?: "4.13.2")
7+
ExternalLibraryDescriptor("junit", "junit", "4.12", null, versionInProject ?: "4.13.2")
88

99
fun jUnit5LibraryDescriptor(versionInProject: String?) =
1010
ExternalLibraryDescriptor("org.junit.jupiter", "junit-jupiter", "5.8.1", null, versionInProject ?: "5.8.1")

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

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,18 @@ import com.intellij.openapi.application.runWriteAction
3838
import com.intellij.openapi.command.WriteCommandAction
3939
import com.intellij.openapi.components.service
4040
import com.intellij.openapi.editor.colors.EditorColorsManager
41+
import com.intellij.openapi.module.Module
4142
import com.intellij.openapi.options.ShowSettingsUtil
4243
import com.intellij.openapi.projectRoots.JavaSdkVersion
4344
import com.intellij.openapi.roots.ContentEntry
4445
import com.intellij.openapi.roots.DependencyScope
4546
import com.intellij.openapi.roots.ExternalLibraryDescriptor
4647
import com.intellij.openapi.roots.JavaProjectModelModificationService
48+
import com.intellij.openapi.roots.LibraryOrderEntry
49+
import com.intellij.openapi.roots.ModifiableRootModel
4750
import com.intellij.openapi.roots.ModuleRootManager
51+
import com.intellij.openapi.roots.ModuleRootModificationUtil
52+
import com.intellij.openapi.roots.ModuleSourceOrderEntry
4853
import com.intellij.openapi.roots.ui.configuration.ClasspathEditor
4954
import com.intellij.openapi.roots.ui.configuration.ProjectStructureConfigurable
5055
import com.intellij.openapi.ui.ComboBox
@@ -111,6 +116,8 @@ import javax.swing.JComponent
111116
import javax.swing.JList
112117
import javax.swing.JPanel
113118
import kotlin.streams.toList
119+
import org.jetbrains.concurrency.thenRun
120+
import org.utbot.intellij.plugin.ui.utils.allLibraries
114121

115122
private const val RECENTS_KEY = "org.utbot.recents"
116123

@@ -642,7 +649,7 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
642649
}
643650

644651
selectedTestFramework.isInstalled = true
645-
addDependency(libraryDescriptor)
652+
addDependency(model.testModule, libraryDescriptor)
646653
.onError { selectedTestFramework.isInstalled = false }
647654
}
648655

@@ -663,7 +670,7 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
663670
val versionInProject = libraryInProject?.libraryName?.parseVersion()
664671

665672
selectedMockFramework.isInstalled = true
666-
addDependency(mockitoCoreLibraryDescriptor(versionInProject))
673+
addDependency(model.testModule, mockitoCoreLibraryDescriptor(versionInProject))
667674
.onError { selectedMockFramework.isInstalled = false }
668675
}
669676

@@ -701,11 +708,34 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
701708
* Note that version restrictions will be applied only if they are present on target machine
702709
* Otherwise latest release version will be installed.
703710
*/
704-
private fun addDependency(libraryDescriptor: ExternalLibraryDescriptor): Promise<Void> {
705-
return JavaProjectModelModificationService
711+
private fun addDependency(module: Module, libraryDescriptor: ExternalLibraryDescriptor): Promise<Void> {
712+
val promise = JavaProjectModelModificationService
706713
.getInstance(model.project)
707714
//this method returns JetBrains internal Promise that is difficult to deal with, but it is our way
708715
.addDependency(model.testModule, libraryDescriptor, DependencyScope.TEST)
716+
promise.thenRun {
717+
module.allLibraries()
718+
.lastOrNull { library -> library.libraryName == libraryDescriptor.presentableName }?.let {
719+
ModuleRootModificationUtil.updateModel(module) { model -> placeEntryToCorrectPlace(model, it) }
720+
}
721+
}
722+
return promise
723+
}
724+
725+
/**
726+
* Reorders library list to unsure that just added library with proper version is listed prior to old-versioned one
727+
*/
728+
private fun placeEntryToCorrectPlace(model: ModifiableRootModel, addedEntry: LibraryOrderEntry) {
729+
val order = model.orderEntries
730+
val lastEntry = order.last()
731+
if (lastEntry is LibraryOrderEntry && lastEntry.library == addedEntry.library) {
732+
val insertionPoint = order.indexOfFirst { it is ModuleSourceOrderEntry } + 1
733+
if (insertionPoint > 0) {
734+
System.arraycopy(order, insertionPoint, order, insertionPoint + 1, order.size - 1 - insertionPoint)
735+
order[insertionPoint] = lastEntry
736+
model.rearrangeOrderEntries(order)
737+
}
738+
}
709739
}
710740

711741
private fun createMockFrameworkNotificationDialog() = Messages.showYesNoDialog(

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.intellij.openapi.project.Project
55
import com.intellij.openapi.roots.LibraryOrderEntry
66
import com.intellij.openapi.roots.ModuleRootManager
77
import com.intellij.openapi.roots.OrderEnumerator
8+
import com.intellij.openapi.roots.OrderRootType
89
import com.intellij.openapi.roots.ProjectRootManager
910

1011
/**
@@ -41,7 +42,12 @@ fun String.parseVersion(): String? {
4142
fun List<LibraryOrderEntry>.matchesAnyOf(patterns: List<Regex>): LibraryOrderEntry? =
4243
firstOrNull { entry ->
4344
patterns.any { pattern ->
44-
entry.libraryName?.let { pattern.containsMatchIn(it) } ?: false
45+
entry.libraryName?.let {
46+
if (pattern.containsMatchIn(it)) return@any true
47+
}
48+
//Fallback to filenames in case library has no name at all, or the name is too generic (e.g. 'JUnit' or 'JUnit4')
49+
return@any entry.library?.getFiles(OrderRootType.CLASSES)
50+
?.any { virtualFile -> pattern.containsMatchIn(virtualFile.name) } ?: false
4551
}
4652
}
4753

0 commit comments

Comments
 (0)