From 8fbf89b8d6b5ed89c05aa221ac1e5091fe613f15 Mon Sep 17 00:00:00 2001 From: Egor Kulikov Date: Fri, 21 Oct 2022 15:28:01 +0300 Subject: [PATCH] Different versions of TestNg can be installed into project --- .../models/ExternalLibraryDescriptors.kt | 19 ++++++++---- .../plugin/models/GenerateTestsModel.kt | 8 ----- .../plugin/ui/GenerateTestsDialogWindow.kt | 29 ++++++++----------- .../plugin/ui/actions/GenerateTestsAction.kt | 7 +++++ .../utbot/intellij/plugin/util/SdkUtils.kt | 15 ++++++++++ 5 files changed, 48 insertions(+), 30 deletions(-) create mode 100644 utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/util/SdkUtils.kt diff --git a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/models/ExternalLibraryDescriptors.kt b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/models/ExternalLibraryDescriptors.kt index c8e77720ad..22a6befa87 100644 --- a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/models/ExternalLibraryDescriptors.kt +++ b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/models/ExternalLibraryDescriptors.kt @@ -7,7 +7,7 @@ val ExternalLibraryDescriptor.mavenCoordinates: String get() = "$libraryGroupId:$libraryArtifactId:${preferredVersion ?: RepositoryLibraryDescription.ReleaseVersionId}" val ExternalLibraryDescriptor.id: String - get() = "$libraryGroupId:$libraryArtifactId" + get() = "$libraryGroupId:$libraryArtifactId" //TODO: think about using JUnitExternalLibraryDescriptor from intellij-community sources (difficult to install) fun jUnit4LibraryDescriptor(versionInProject: String?) = @@ -16,11 +16,20 @@ fun jUnit4LibraryDescriptor(versionInProject: String?) = fun jUnit5LibraryDescriptor(versionInProject: String?) = ExternalLibraryDescriptor("org.junit.jupiter", "junit-jupiter", "5.8.1", null, versionInProject ?: "5.8.1") -fun testNgLibraryDescriptor(versionInProject: String?) = - ExternalLibraryDescriptor("org.testng", "testng", "7.6.0", null, versionInProject ?: "7.6.0") - fun jUnit5ParametrizedTestsLibraryDescriptor(versionInProject: String?) = ExternalLibraryDescriptor("org.junit.jupiter", "junit-jupiter-params", "5.8.1", null, versionInProject ?: "5.8.1") fun mockitoCoreLibraryDescriptor(versionInProject: String?) = - ExternalLibraryDescriptor("org.mockito", "mockito-core", "3.5.0", "4.2.0", versionInProject ?: "4.2.0") \ No newline at end of file + ExternalLibraryDescriptor("org.mockito", "mockito-core", "3.5.0", "4.2.0", versionInProject ?: "4.2.0") + +/** + * TestNg requires JDK 11 since version 7.6.0 + * For projects with JDK 8 version 7.5.0 should be installed. + * See https://groups.google.com/g/testng-users/c/BAFB1vk-kok?pli=1 for more details. + */ + +fun testNgNewLibraryDescriptor(versionInProject: String?) = + ExternalLibraryDescriptor("org.testng", "testng", "7.6.0", null, versionInProject ?: "7.6.0") + +fun testNgOldLibraryDescriptor() = + ExternalLibraryDescriptor("org.testng", "testng", "7.5.0", "7.5.0", "7.5.0") \ No newline at end of file diff --git a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/models/GenerateTestsModel.kt b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/models/GenerateTestsModel.kt index 4eca9b1693..952eccb8bb 100644 --- a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/models/GenerateTestsModel.kt +++ b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/models/GenerateTestsModel.kt @@ -79,14 +79,6 @@ data class GenerateTestsModel( } var runGeneratedTestsWithCoverage : Boolean = false var enableSummariesGeneration : Boolean = true - - val jdkVersion: JavaSdkVersion? - get() = try { - testModule.jdkVersion() - } catch (e: IllegalStateException) { - // Just ignore it here, notification will be shown in org.utbot.intellij.plugin.ui.utils.ModuleUtilsKt.jdkVersionBy - null - } } val PsiClass.packageName: String diff --git a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/GenerateTestsDialogWindow.kt b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/GenerateTestsDialogWindow.kt index 109b37a706..046ab0f273 100644 --- a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/GenerateTestsDialogWindow.kt +++ b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/GenerateTestsDialogWindow.kt @@ -123,7 +123,8 @@ import org.utbot.intellij.plugin.models.jUnit5LibraryDescriptor import org.utbot.intellij.plugin.models.jUnit5ParametrizedTestsLibraryDescriptor import org.utbot.intellij.plugin.models.mockitoCoreLibraryDescriptor import org.utbot.intellij.plugin.models.packageName -import org.utbot.intellij.plugin.models.testNgLibraryDescriptor +import org.utbot.intellij.plugin.models.testNgNewLibraryDescriptor +import org.utbot.intellij.plugin.models.testNgOldLibraryDescriptor import org.utbot.intellij.plugin.settings.Settings import org.utbot.intellij.plugin.ui.components.CodeGenerationSettingItemRenderer import org.utbot.intellij.plugin.ui.components.TestFolderComboWithBrowseButton @@ -140,6 +141,7 @@ import org.utbot.intellij.plugin.ui.utils.testResourceRootTypes import org.utbot.intellij.plugin.ui.utils.testRootType import org.utbot.intellij.plugin.util.IntelliJApiHelper import org.utbot.intellij.plugin.util.extractFirstLevelMembers +import org.utbot.intellij.plugin.util.findSdkVersion private const val RECENTS_KEY = "org.utbot.recents" @@ -314,15 +316,10 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m label?.let { add(it, BorderLayout.LINE_END) } }) - private fun findSdkVersion(): JavaVersion? { - val projectSdk = ModuleRootManager.getInstance(model.srcModule).sdk - return JavaVersion.tryParse(projectSdk?.versionString) - } - override fun createTitlePane(): JComponent? { - val sdkVersion = findSdkVersion() + val sdkVersion = findSdkVersion(model.srcModule) //TODO:SAT-1571 investigate Android Studio specific sdk issues - if (sdkVersion?.feature in minSupportedSdkVersion..maxSupportedSdkVersion || IntelliJApiHelper.isAndroidStudio()) return null + if (sdkVersion.feature in minSupportedSdkVersion..maxSupportedSdkVersion || IntelliJApiHelper.isAndroidStudio()) return null isOKActionEnabled = false return SdkNotificationPanel(model, sdkVersion) } @@ -372,8 +369,8 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m val isEdited = ShowSettingsUtil.getInstance().editConfigurable(model.project, projectStructure) { projectStructure.select(model.srcModule.name, ClasspathEditor.getName(), true) } - val sdkVersion = findSdkVersion() - val sdkFixed = isEdited && sdkVersion?.feature in minSupportedSdkVersion..maxSupportedSdkVersion + val sdkVersion = findSdkVersion(model.srcModule) + val sdkFixed = isEdited && sdkVersion.feature in minSupportedSdkVersion..maxSupportedSdkVersion if (sdkFixed) { this@SdkNotificationPanel.isVisible = false isOKActionEnabled = true @@ -721,11 +718,15 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m val libraryInProject = findFrameworkLibrary(model.project, model.testModule, selectedTestFramework, LibrarySearchScope.Project) val versionInProject = libraryInProject?.libraryName?.parseVersion() + val sdkVersion = findSdkVersion(model.srcModule).feature val libraryDescriptor = when (selectedTestFramework) { Junit4 -> jUnit4LibraryDescriptor(versionInProject) Junit5 -> jUnit5LibraryDescriptor(versionInProject) - TestNg -> testNgLibraryDescriptor(versionInProject) + TestNg -> when (sdkVersion) { + minSupportedSdkVersion -> testNgOldLibraryDescriptor() + else -> testNgNewLibraryDescriptor(versionInProject) + } } selectedTestFramework.isInstalled = true @@ -956,12 +957,6 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m ParametrizedTestSource.PARAMETRIZE -> TestFramework.allItems.filterNot { it == Junit4 } } - //Will be removed after gradle-intelij-plugin version update upper than 2020.2 - //TestNg will be reverted after https://github.com/UnitTestBot/UTBotJava/issues/309 - if (findSdkVersion()?.let { it.feature < 11 } == true) { - enabledTestFrameworks = enabledTestFrameworks.filterNot { it == TestNg } - } - var defaultItem = when (parametrizedTestSource) { ParametrizedTestSource.DO_NOT_PARAMETRIZE -> TestFramework.defaultItem ParametrizedTestSource.PARAMETRIZE -> TestFramework.parametrizedDefaultItem diff --git a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/actions/GenerateTestsAction.kt b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/actions/GenerateTestsAction.kt index 75950f489e..3060565e87 100644 --- a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/actions/GenerateTestsAction.kt +++ b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/actions/GenerateTestsAction.kt @@ -21,6 +21,7 @@ import com.intellij.refactoring.util.classMembers.MemberInfo import org.jetbrains.kotlin.idea.core.getPackage import org.jetbrains.kotlin.idea.core.util.toPsiDirectory import org.jetbrains.kotlin.idea.core.util.toPsiFile +import org.jetbrains.kotlin.idea.util.module import org.utbot.intellij.plugin.util.extractFirstLevelMembers import org.utbot.intellij.plugin.util.isVisible import java.util.* @@ -29,6 +30,7 @@ import org.jetbrains.kotlin.utils.addIfNotNull import org.utbot.framework.plugin.api.util.LockFile import org.utbot.intellij.plugin.models.packageName import org.utbot.intellij.plugin.ui.InvalidClassNotifier +import org.utbot.intellij.plugin.util.findSdkVersionOrNull import org.utbot.intellij.plugin.util.isAbstract class GenerateTestsAction : AnAction(), UpdateInBackground { @@ -164,6 +166,11 @@ class GenerateTestsAction : AnAction(), UpdateInBackground { } private fun PsiClass.isInvalid(withWarnings: Boolean): Boolean { + if (this.module?.let { findSdkVersionOrNull(it) } == null) { + if (withWarnings) InvalidClassNotifier.notify("class out of module or with undefined SDK") + return true + } + val isAbstractOrInterface = this.isInterface || this.isAbstract if (isAbstractOrInterface) { if (withWarnings) InvalidClassNotifier.notify("abstract class or interface ${this.name}") diff --git a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/util/SdkUtils.kt b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/util/SdkUtils.kt new file mode 100644 index 0000000000..21061688bc --- /dev/null +++ b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/util/SdkUtils.kt @@ -0,0 +1,15 @@ +package org.utbot.intellij.plugin.util + +import com.intellij.openapi.module.Module +import com.intellij.openapi.roots.ModuleRootManager +import com.intellij.util.lang.JavaVersion + +fun findSdkVersion(module:Module): JavaVersion = + findSdkVersionOrNull(module) ?: error("Cannot define sdk version in module $module") + +fun findSdkVersionOrNull(module: Module): JavaVersion? { + val moduleSdk = ModuleRootManager.getInstance(module).sdk + return JavaVersion.tryParse(moduleSdk?.versionString) +} + +