Skip to content

Commit

Permalink
assertArrayEquals overload is not found, tests doesn't compile #135 (#…
Browse files Browse the repository at this point in the history
…464)

resolving merge conflict with main branch, use the very last (just added to the list) library with matching name
  • Loading branch information
Vassiliy-Kudryashov authored Jul 11, 2022
1 parent 8b70aa1 commit 4fd423b
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,10 @@ fun MockFramework.patterns(): Patterns {
return Patterns(moduleLibraryPatterns, libraryPatterns)
}

val JUNIT_4_JAR_PATTERN = Regex("junit-4(\\.[0-9]+){1,2}")
val JUNIT_4_MVN_PATTERN = Regex("junit:junit:4(\\.[0-9]+){1,2}")
val JUNIT_4_BASIC_PATTERN = Regex("JUnit4")
val junit4Patterns = listOf(JUNIT_4_JAR_PATTERN, JUNIT_4_MVN_PATTERN, JUNIT_4_BASIC_PATTERN)

val JUNIT4_BASIC_MODULE_PATTERN = Regex("junit$")
val junit4ModulePatterns = listOf(JUNIT4_BASIC_MODULE_PATTERN)
val JUNIT_4_JAR_PATTERN = Regex("junit-4(\\.1[2-9])(\\.[0-9]+)?")
val JUNIT_4_MVN_PATTERN = Regex("junit:junit:4(\\.1[2-9])(\\.[0-9]+)?")
val junit4Patterns = listOf(JUNIT_4_JAR_PATTERN, JUNIT_4_MVN_PATTERN)
val junit4ModulePatterns = listOf(JUNIT_4_JAR_PATTERN, JUNIT_4_MVN_PATTERN)

val JUNIT_5_JAR_PATTERN = Regex("junit-jupiter-5(\\.[0-9]+){1,2}")
val JUNIT_5_MVN_PATTERN = Regex("org\\.junit\\.jupiter:junit-jupiter-api:5(\\.[0-9]+){1,2}")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import com.intellij.openapi.roots.ExternalLibraryDescriptor

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

fun jUnit5LibraryDescriptor(versionInProject: String?) =
ExternalLibraryDescriptor("org.junit.jupiter", "junit-jupiter", "5.8.1", null, versionInProject ?: "5.8.1")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,18 @@ import com.intellij.openapi.application.runWriteAction
import com.intellij.openapi.command.WriteCommandAction
import com.intellij.openapi.components.service
import com.intellij.openapi.editor.colors.EditorColorsManager
import com.intellij.openapi.module.Module
import com.intellij.openapi.options.ShowSettingsUtil
import com.intellij.openapi.projectRoots.JavaSdkVersion
import com.intellij.openapi.roots.ContentEntry
import com.intellij.openapi.roots.DependencyScope
import com.intellij.openapi.roots.ExternalLibraryDescriptor
import com.intellij.openapi.roots.JavaProjectModelModificationService
import com.intellij.openapi.roots.LibraryOrderEntry
import com.intellij.openapi.roots.ModifiableRootModel
import com.intellij.openapi.roots.ModuleRootManager
import com.intellij.openapi.roots.ModuleRootModificationUtil
import com.intellij.openapi.roots.ModuleSourceOrderEntry
import com.intellij.openapi.roots.ui.configuration.ClasspathEditor
import com.intellij.openapi.roots.ui.configuration.ProjectStructureConfigurable
import com.intellij.openapi.ui.ComboBox
Expand Down Expand Up @@ -111,6 +116,8 @@ import javax.swing.JComponent
import javax.swing.JList
import javax.swing.JPanel
import kotlin.streams.toList
import org.jetbrains.concurrency.thenRun
import org.utbot.intellij.plugin.ui.utils.allLibraries

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

Expand Down Expand Up @@ -642,7 +649,7 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
}

selectedTestFramework.isInstalled = true
addDependency(libraryDescriptor)
addDependency(model.testModule, libraryDescriptor)
.onError { selectedTestFramework.isInstalled = false }
}

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

selectedMockFramework.isInstalled = true
addDependency(mockitoCoreLibraryDescriptor(versionInProject))
addDependency(model.testModule, mockitoCoreLibraryDescriptor(versionInProject))
.onError { selectedMockFramework.isInstalled = false }
}

Expand Down Expand Up @@ -701,11 +708,34 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
* Note that version restrictions will be applied only if they are present on target machine
* Otherwise latest release version will be installed.
*/
private fun addDependency(libraryDescriptor: ExternalLibraryDescriptor): Promise<Void> {
return JavaProjectModelModificationService
private fun addDependency(module: Module, libraryDescriptor: ExternalLibraryDescriptor): Promise<Void> {
val promise = JavaProjectModelModificationService
.getInstance(model.project)
//this method returns JetBrains internal Promise that is difficult to deal with, but it is our way
.addDependency(model.testModule, libraryDescriptor, DependencyScope.TEST)
promise.thenRun {
module.allLibraries()
.lastOrNull { library -> library.libraryName == libraryDescriptor.presentableName }?.let {
ModuleRootModificationUtil.updateModel(module) { model -> placeEntryToCorrectPlace(model, it) }
}
}
return promise
}

/**
* Reorders library list to unsure that just added library with proper version is listed prior to old-versioned one
*/
private fun placeEntryToCorrectPlace(model: ModifiableRootModel, addedEntry: LibraryOrderEntry) {
val order = model.orderEntries
val lastEntry = order.last()
if (lastEntry is LibraryOrderEntry && lastEntry.library == addedEntry.library) {
val insertionPoint = order.indexOfFirst { it is ModuleSourceOrderEntry } + 1
if (insertionPoint > 0) {
System.arraycopy(order, insertionPoint, order, insertionPoint + 1, order.size - 1 - insertionPoint)
order[insertionPoint] = lastEntry
model.rearrangeOrderEntries(order)
}
}
}

private fun createMockFrameworkNotificationDialog() = Messages.showYesNoDialog(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.intellij.openapi.project.Project
import com.intellij.openapi.roots.LibraryOrderEntry
import com.intellij.openapi.roots.ModuleRootManager
import com.intellij.openapi.roots.OrderEnumerator
import com.intellij.openapi.roots.OrderRootType
import com.intellij.openapi.roots.ProjectRootManager

/**
Expand Down Expand Up @@ -41,7 +42,12 @@ fun String.parseVersion(): String? {
fun List<LibraryOrderEntry>.matchesAnyOf(patterns: List<Regex>): LibraryOrderEntry? =
firstOrNull { entry ->
patterns.any { pattern ->
entry.libraryName?.let { pattern.containsMatchIn(it) } ?: false
entry.libraryName?.let {
if (pattern.containsMatchIn(it)) return@any true
}
//Fallback to filenames in case library has no name at all, or the name is too generic (e.g. 'JUnit' or 'JUnit4')
return@any entry.library?.getFiles(OrderRootType.CLASSES)
?.any { virtualFile -> pattern.containsMatchIn(virtualFile.name) } ?: false
}
}

Expand Down

0 comments on commit 4fd423b

Please sign in to comment.