Skip to content

Added plugin setting for experimental languages: Python, JavaScript, Go #1545

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,8 @@ class Settings(val project: Project) : PersistentStateComponent<Settings.State>
var fuzzingValue: Double = 0.05,
var runGeneratedTestsWithCoverage: Boolean = false,
var commentStyle: JavaDocCommentStyle = JavaDocCommentStyle.defaultItem,
var enableSummariesGeneration: Boolean = UtSettings.enableSummariesGeneration
var enableSummariesGeneration: Boolean = UtSettings.enableSummariesGeneration,
var enableExperimentalLanguagesSupport: Boolean = false,
) {
constructor(model: GenerateTestsModel) : this(
sourceRootHistory = model.sourceRootHistory,
Expand Down Expand Up @@ -155,6 +156,8 @@ class Settings(val project: Project) : PersistentStateComponent<Settings.State>

val forceStaticMocking: ForceStaticMocking get() = state.forceStaticMocking

val experimentalLanguagesSupport: Boolean get () = state.enableExperimentalLanguagesSupport

val treatOverflowAsError: TreatOverflowAsError get() = state.treatOverflowAsError

val parametrizedTestSource: ParametrizedTestSource get() = state.parametrizedTestSource
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,6 @@ import com.intellij.ui.layout.withValueBinding
import com.intellij.util.castSafelyTo
import com.intellij.util.ui.UIUtil
import com.intellij.util.ui.components.BorderLayoutPanel
import javax.swing.DefaultComboBoxModel
import javax.swing.JCheckBox
import javax.swing.JPanel
import javax.swing.JSlider
import kotlin.reflect.KClass
import org.utbot.framework.UtSettings
import org.utbot.framework.codegen.domain.ForceStaticMocking
import org.utbot.framework.codegen.domain.HangingTestsTimeout
Expand All @@ -34,6 +29,11 @@ import org.utbot.framework.plugin.api.TreatOverflowAsError
import org.utbot.framework.plugin.api.isSummarizationCompatible
import org.utbot.intellij.plugin.ui.components.CodeGenerationSettingItemRenderer
import org.utbot.intellij.plugin.util.showSettingsEditor
import javax.swing.DefaultComboBoxModel
import javax.swing.JCheckBox
import javax.swing.JPanel
import javax.swing.JSlider
import kotlin.reflect.KClass

class SettingsWindow(val project: Project) {
private val settings = project.service<Settings>()
Expand All @@ -44,6 +44,7 @@ class SettingsWindow(val project: Project) {
private lateinit var runInspectionAfterTestGenerationCheckBox: JCheckBox
private lateinit var forceMockCheckBox: JCheckBox
private lateinit var enableSummarizationGenerationCheckBox: JCheckBox
private lateinit var enableExperimentalLanguagesCheckBox: JCheckBox

val panel: JPanel = panel {
row("Generated test language:") {
Expand Down Expand Up @@ -164,6 +165,23 @@ class SettingsWindow(val project: Project) {
}
}

row {
cell {
enableExperimentalLanguagesCheckBox = checkBox("Experimental languages support")
.onApply {
settings.state.enableExperimentalLanguagesSupport =
enableExperimentalLanguagesCheckBox.isSelected
}
.onReset {
enableExperimentalLanguagesCheckBox.isSelected =
settings.experimentalLanguagesSupport == true
}
.onIsModified { enableExperimentalLanguagesCheckBox.isSelected xor settings.experimentalLanguagesSupport }
.apply { ContextHelpLabel.create("Enable JavaScript and Python if IDE supports them")() }
.component
}
}

row("Classes to be forcedly mocked:") {}
row {
val excludeTableCellBuilder = excludeTable.component(CCFlags.grow)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ package org.utbot.intellij.plugin.ui.actions

import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.components.service
import org.utbot.intellij.plugin.language.agnostic.LanguageAssistant
import org.utbot.intellij.plugin.settings.Settings

class GenerateTestsAction : AnAction() {
override fun actionPerformed(e: AnActionEvent) {
Expand All @@ -11,10 +13,16 @@ class GenerateTestsAction : AnAction() {

override fun update(e: AnActionEvent) {
val languageAssistant = LanguageAssistant.get(e)
if (languageAssistant == null) {
if (languageAssistant == null || !accessByProjectSettings(e)) {
e.presentation.isEnabled = false
} else {
languageAssistant.update(e)
}
}
}

private fun accessByProjectSettings(e: AnActionEvent): Boolean {
val experimentalLanguageSetting = e.project?.service<Settings>()?.experimentalLanguagesSupport
val languagePackageName = LanguageAssistant.get(e)?.toString()
return experimentalLanguageSetting == true || languagePackageName?.contains("JvmLanguageAssistant") == true
}
}
13 changes: 6 additions & 7 deletions utbot-js/src/main/kotlin/api/JsUtModelConstructor.kt
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
package api

import fuzzer.providers.JsObjectModelProvider
import org.utbot.framework.concrete.contructors.UtModelConstructorInterface
import org.utbot.framework.plugin.api.ClassId
import org.utbot.framework.plugin.api.UtAssembleModel
import org.utbot.framework.plugin.api.UtExecutableCallModel
import org.utbot.framework.plugin.api.UtModel
import org.utbot.framework.plugin.api.UtStatementModel
import framework.api.js.JsClassId
import framework.api.js.JsEmptyClassId
import framework.api.js.JsNullModel
import framework.api.js.JsPrimitiveModel
import framework.api.js.JsUndefinedModel
import framework.api.js.util.jsErrorClassId
import framework.api.js.util.jsUndefinedClassId
import fuzzer.providers.JsObjectModelProvider
import org.utbot.framework.concrete.constructors.UtModelConstructorInterface
import org.utbot.framework.plugin.api.ClassId
import org.utbot.framework.plugin.api.UtAssembleModel
import org.utbot.framework.plugin.api.UtExecutableCallModel
import org.utbot.framework.plugin.api.UtModel

class JsUtModelConstructor : UtModelConstructorInterface {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ import org.utbot.fuzzer.FuzzedParameter
import org.utbot.fuzzer.FuzzedValue
import org.utbot.fuzzer.ModelProvider
import org.utbot.fuzzer.ModelProvider.Companion.yieldValue
import org.utbot.fuzzer.TooManyCombinationsException
import org.utbot.fuzzer.fuzz
import org.utbot.fuzzing.utils.TooManyCombinationsException
import java.util.concurrent.atomic.AtomicInteger
import java.util.function.IntSupplier

Expand Down Expand Up @@ -87,4 +87,4 @@ object JsObjectModelProvider : ModelProvider {
}


}
}