Skip to content

Commit 177859a

Browse files
Enabling action and TestNg version depends on the project SDK (#1209)
Different versions of TestNg can be installed into project
1 parent c91f383 commit 177859a

File tree

5 files changed

+48
-30
lines changed

5 files changed

+48
-30
lines changed

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

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ val ExternalLibraryDescriptor.mavenCoordinates: String
77
get() = "$libraryGroupId:$libraryArtifactId:${preferredVersion ?: RepositoryLibraryDescription.ReleaseVersionId}"
88

99
val ExternalLibraryDescriptor.id: String
10-
get() = "$libraryGroupId:$libraryArtifactId"
10+
get() = "$libraryGroupId:$libraryArtifactId"
1111

1212
//TODO: think about using JUnitExternalLibraryDescriptor from intellij-community sources (difficult to install)
1313
fun jUnit4LibraryDescriptor(versionInProject: String?) =
@@ -16,11 +16,20 @@ fun jUnit4LibraryDescriptor(versionInProject: String?) =
1616
fun jUnit5LibraryDescriptor(versionInProject: String?) =
1717
ExternalLibraryDescriptor("org.junit.jupiter", "junit-jupiter", "5.8.1", null, versionInProject ?: "5.8.1")
1818

19-
fun testNgLibraryDescriptor(versionInProject: String?) =
20-
ExternalLibraryDescriptor("org.testng", "testng", "7.6.0", null, versionInProject ?: "7.6.0")
21-
2219
fun jUnit5ParametrizedTestsLibraryDescriptor(versionInProject: String?) =
2320
ExternalLibraryDescriptor("org.junit.jupiter", "junit-jupiter-params", "5.8.1", null, versionInProject ?: "5.8.1")
2421

2522
fun mockitoCoreLibraryDescriptor(versionInProject: String?) =
26-
ExternalLibraryDescriptor("org.mockito", "mockito-core", "3.5.0", "4.2.0", versionInProject ?: "4.2.0")
23+
ExternalLibraryDescriptor("org.mockito", "mockito-core", "3.5.0", "4.2.0", versionInProject ?: "4.2.0")
24+
25+
/**
26+
* TestNg requires JDK 11 since version 7.6.0
27+
* For projects with JDK 8 version 7.5.0 should be installed.
28+
* See https://groups.google.com/g/testng-users/c/BAFB1vk-kok?pli=1 for more details.
29+
*/
30+
31+
fun testNgNewLibraryDescriptor(versionInProject: String?) =
32+
ExternalLibraryDescriptor("org.testng", "testng", "7.6.0", null, versionInProject ?: "7.6.0")
33+
34+
fun testNgOldLibraryDescriptor() =
35+
ExternalLibraryDescriptor("org.testng", "testng", "7.5.0", "7.5.0", "7.5.0")

utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/models/GenerateTestsModel.kt

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -79,14 +79,6 @@ data class GenerateTestsModel(
7979
}
8080
var runGeneratedTestsWithCoverage : Boolean = false
8181
var enableSummariesGeneration : Boolean = true
82-
83-
val jdkVersion: JavaSdkVersion?
84-
get() = try {
85-
testModule.jdkVersion()
86-
} catch (e: IllegalStateException) {
87-
// Just ignore it here, notification will be shown in org.utbot.intellij.plugin.ui.utils.ModuleUtilsKt.jdkVersionBy
88-
null
89-
}
9082
}
9183

9284
val PsiClass.packageName: String

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

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,8 @@ import org.utbot.intellij.plugin.models.jUnit5LibraryDescriptor
123123
import org.utbot.intellij.plugin.models.jUnit5ParametrizedTestsLibraryDescriptor
124124
import org.utbot.intellij.plugin.models.mockitoCoreLibraryDescriptor
125125
import org.utbot.intellij.plugin.models.packageName
126-
import org.utbot.intellij.plugin.models.testNgLibraryDescriptor
126+
import org.utbot.intellij.plugin.models.testNgNewLibraryDescriptor
127+
import org.utbot.intellij.plugin.models.testNgOldLibraryDescriptor
127128
import org.utbot.intellij.plugin.settings.Settings
128129
import org.utbot.intellij.plugin.ui.components.CodeGenerationSettingItemRenderer
129130
import org.utbot.intellij.plugin.ui.components.TestFolderComboWithBrowseButton
@@ -140,6 +141,7 @@ import org.utbot.intellij.plugin.ui.utils.testResourceRootTypes
140141
import org.utbot.intellij.plugin.ui.utils.testRootType
141142
import org.utbot.intellij.plugin.util.IntelliJApiHelper
142143
import org.utbot.intellij.plugin.util.extractFirstLevelMembers
144+
import org.utbot.intellij.plugin.util.findSdkVersion
143145

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

@@ -314,15 +316,10 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
314316
label?.let { add(it, BorderLayout.LINE_END) }
315317
})
316318

317-
private fun findSdkVersion(): JavaVersion? {
318-
val projectSdk = ModuleRootManager.getInstance(model.srcModule).sdk
319-
return JavaVersion.tryParse(projectSdk?.versionString)
320-
}
321-
322319
override fun createTitlePane(): JComponent? {
323-
val sdkVersion = findSdkVersion()
320+
val sdkVersion = findSdkVersion(model.srcModule)
324321
//TODO:SAT-1571 investigate Android Studio specific sdk issues
325-
if (sdkVersion?.feature in minSupportedSdkVersion..maxSupportedSdkVersion || IntelliJApiHelper.isAndroidStudio()) return null
322+
if (sdkVersion.feature in minSupportedSdkVersion..maxSupportedSdkVersion || IntelliJApiHelper.isAndroidStudio()) return null
326323
isOKActionEnabled = false
327324
return SdkNotificationPanel(model, sdkVersion)
328325
}
@@ -372,8 +369,8 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
372369
val isEdited = ShowSettingsUtil.getInstance().editConfigurable(model.project, projectStructure)
373370
{ projectStructure.select(model.srcModule.name, ClasspathEditor.getName(), true) }
374371

375-
val sdkVersion = findSdkVersion()
376-
val sdkFixed = isEdited && sdkVersion?.feature in minSupportedSdkVersion..maxSupportedSdkVersion
372+
val sdkVersion = findSdkVersion(model.srcModule)
373+
val sdkFixed = isEdited && sdkVersion.feature in minSupportedSdkVersion..maxSupportedSdkVersion
377374
if (sdkFixed) {
378375
this@SdkNotificationPanel.isVisible = false
379376
isOKActionEnabled = true
@@ -721,11 +718,15 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
721718
val libraryInProject =
722719
findFrameworkLibrary(model.project, model.testModule, selectedTestFramework, LibrarySearchScope.Project)
723720
val versionInProject = libraryInProject?.libraryName?.parseVersion()
721+
val sdkVersion = findSdkVersion(model.srcModule).feature
724722

725723
val libraryDescriptor = when (selectedTestFramework) {
726724
Junit4 -> jUnit4LibraryDescriptor(versionInProject)
727725
Junit5 -> jUnit5LibraryDescriptor(versionInProject)
728-
TestNg -> testNgLibraryDescriptor(versionInProject)
726+
TestNg -> when (sdkVersion) {
727+
minSupportedSdkVersion -> testNgOldLibraryDescriptor()
728+
else -> testNgNewLibraryDescriptor(versionInProject)
729+
}
729730
}
730731

731732
selectedTestFramework.isInstalled = true
@@ -956,12 +957,6 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
956957
ParametrizedTestSource.PARAMETRIZE -> TestFramework.allItems.filterNot { it == Junit4 }
957958
}
958959

959-
//Will be removed after gradle-intelij-plugin version update upper than 2020.2
960-
//TestNg will be reverted after https://github.com/UnitTestBot/UTBotJava/issues/309
961-
if (findSdkVersion()?.let { it.feature < 11 } == true) {
962-
enabledTestFrameworks = enabledTestFrameworks.filterNot { it == TestNg }
963-
}
964-
965960
var defaultItem = when (parametrizedTestSource) {
966961
ParametrizedTestSource.DO_NOT_PARAMETRIZE -> TestFramework.defaultItem
967962
ParametrizedTestSource.PARAMETRIZE -> TestFramework.parametrizedDefaultItem

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import com.intellij.refactoring.util.classMembers.MemberInfo
2121
import org.jetbrains.kotlin.idea.core.getPackage
2222
import org.jetbrains.kotlin.idea.core.util.toPsiDirectory
2323
import org.jetbrains.kotlin.idea.core.util.toPsiFile
24+
import org.jetbrains.kotlin.idea.util.module
2425
import org.utbot.intellij.plugin.util.extractFirstLevelMembers
2526
import org.utbot.intellij.plugin.util.isVisible
2627
import java.util.*
@@ -29,6 +30,7 @@ import org.jetbrains.kotlin.utils.addIfNotNull
2930
import org.utbot.framework.plugin.api.util.LockFile
3031
import org.utbot.intellij.plugin.models.packageName
3132
import org.utbot.intellij.plugin.ui.InvalidClassNotifier
33+
import org.utbot.intellij.plugin.util.findSdkVersionOrNull
3234
import org.utbot.intellij.plugin.util.isAbstract
3335

3436
class GenerateTestsAction : AnAction(), UpdateInBackground {
@@ -164,6 +166,11 @@ class GenerateTestsAction : AnAction(), UpdateInBackground {
164166
}
165167

166168
private fun PsiClass.isInvalid(withWarnings: Boolean): Boolean {
169+
if (this.module?.let { findSdkVersionOrNull(it) } == null) {
170+
if (withWarnings) InvalidClassNotifier.notify("class out of module or with undefined SDK")
171+
return true
172+
}
173+
167174
val isAbstractOrInterface = this.isInterface || this.isAbstract
168175
if (isAbstractOrInterface) {
169176
if (withWarnings) InvalidClassNotifier.notify("abstract class or interface ${this.name}")
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package org.utbot.intellij.plugin.util
2+
3+
import com.intellij.openapi.module.Module
4+
import com.intellij.openapi.roots.ModuleRootManager
5+
import com.intellij.util.lang.JavaVersion
6+
7+
fun findSdkVersion(module:Module): JavaVersion =
8+
findSdkVersionOrNull(module) ?: error("Cannot define sdk version in module $module")
9+
10+
fun findSdkVersionOrNull(module: Module): JavaVersion? {
11+
val moduleSdk = ModuleRootManager.getInstance(module).sdk
12+
return JavaVersion.tryParse(moduleSdk?.versionString)
13+
}
14+
15+

0 commit comments

Comments
 (0)