Skip to content

Commit ab825cc

Browse files
committed
Add usvm engine option on UI
1 parent 7f46841 commit ab825cc

File tree

4 files changed

+61
-1
lines changed

4 files changed

+61
-1
lines changed

utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/Domain.kt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -691,6 +691,30 @@ enum class ParametrizedTestSource(
691691
}
692692
}
693693

694+
enum class SymbolicEngineSource(
695+
override val id: String,
696+
override val displayName: String,
697+
override val description: String = "Use $displayName symbolic engine"
698+
) : CodeGenerationSettingItem {
699+
UnitTestBot(
700+
id = "UnitTestBot",
701+
displayName = "UnitTestBot",
702+
description = "Use UnitTestBot symbolic engine",
703+
),
704+
Usvm(
705+
id = "USVM",
706+
displayName = "USVM",
707+
description = "Use USVM symbolic engine",
708+
);
709+
710+
override fun toString(): String = id
711+
712+
companion object : CodeGenerationSettingBox {
713+
override val defaultItem: SymbolicEngineSource = SymbolicEngineSource.UnitTestBot
714+
override val allItems: List<SymbolicEngineSource> = SymbolicEngineSource.values().toList()
715+
}
716+
}
717+
694718
enum class ProjectType {
695719
/**
696720
* Standard JVM project without DI frameworks

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.psi.KtFile
2626
import org.utbot.common.PathUtil.fileExtension
2727
import org.utbot.framework.SummariesGenerationType
2828
import org.utbot.framework.UtSettings
29+
import org.utbot.framework.codegen.domain.SymbolicEngineSource
2930
import org.utbot.framework.plugin.api.ClassId
3031
import org.utbot.framework.plugin.api.MockFramework
3132
import org.utbot.framework.plugin.api.MockStrategyApi
@@ -77,6 +78,7 @@ class GenerateTestsModel(
7778
lateinit var mockFramework: MockFramework
7879
lateinit var staticsMocking: StaticsMocking
7980
lateinit var parametrizedTestSource: ParametrizedTestSource
81+
lateinit var symbolicEngineSource: SymbolicEngineSource
8082
lateinit var runtimeExceptionTestsBehaviour: RuntimeExceptionTestsBehaviour
8183
lateinit var hangingTestsTimeout: HangingTestsTimeout
8284
var useTaintAnalysis: Boolean = false

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

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ import org.utbot.framework.codegen.domain.ParametrizedTestSource
8888
import org.utbot.framework.codegen.domain.ProjectType
8989
import org.utbot.framework.codegen.domain.SpringModule.*
9090
import org.utbot.framework.codegen.domain.StaticsMocking
91+
import org.utbot.framework.codegen.domain.SymbolicEngineSource
9192
import org.utbot.framework.codegen.domain.TestFramework
9293
import org.utbot.framework.codegen.domain.TestNg
9394
import org.utbot.framework.plugin.api.MockStrategyApi
@@ -216,6 +217,8 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
216217
}
217218
private val parametrizedTestSources = JCheckBox("Parameterized tests")
218219

220+
private val useExperimentalEngine = JCheckBox("Experimental symbolic engine")
221+
219222
private lateinit var panel: DialogPanel
220223

221224
@Suppress("UNCHECKED_CAST")
@@ -408,6 +411,13 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
408411
cell(testFrameworks)
409412
}
410413

414+
row {
415+
cell(useExperimentalEngine)
416+
contextHelp("USVM symbolic engine will be used")
417+
}.enabledIf(ComboBoxPredicate(springConfig) {
418+
model.projectType == ProjectType.PureJvm
419+
})
420+
411421
if (model.projectType == ProjectType.Spring) {
412422
row("Spring configuration:") {
413423
cell(springConfig)
@@ -701,6 +711,8 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
701711
model.mockStrategy = mockStrategies.item
702712
model.parametrizedTestSource =
703713
if (parametrizedTestSources.isSelected) ParametrizedTestSource.PARAMETRIZE else ParametrizedTestSource.DO_NOT_PARAMETRIZE
714+
model.symbolicEngineSource =
715+
if (useExperimentalEngine.isSelected) SymbolicEngineSource.Usvm else SymbolicEngineSource.UnitTestBot
704716

705717
model.mockFramework = MOCKITO
706718
model.staticsMocking = if (staticsMocking.isSelected) MockitoStaticMocking else NoStaticMocking
@@ -895,6 +907,9 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
895907
parametrizedTestSources.isSelected = (settings.parametrizedTestSource == ParametrizedTestSource.PARAMETRIZE
896908
&& model.projectType == ProjectType.PureJvm)
897909

910+
useExperimentalEngine.isSelected = (settings.symbolicEngineSource == SymbolicEngineSource.Usvm
911+
&& model.projectType == ProjectType.PureJvm)
912+
898913
mockStrategies.isEnabled = true
899914
staticsMocking.isEnabled = mockStrategies.item != MockStrategyApi.NO_MOCKS
900915

@@ -1175,6 +1190,7 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
11751190
updateControlsEnabledStatus()
11761191
}
11771192

1193+
11781194
springConfig.addActionListener { _ ->
11791195
if (isSpringConfigSelected()) {
11801196
if (isXmlSpringConfigUsed()) {
@@ -1203,6 +1219,18 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
12031219
updateControlsEnabledStatus()
12041220
}
12051221

1222+
useExperimentalEngine.addActionListener {_ ->
1223+
if (useExperimentalEngine.isSelected) {
1224+
mockStrategies.isEnabled = false
1225+
mockStrategies.item = MockStrategyApi.NO_MOCKS
1226+
1227+
staticsMocking.isEnabled = false
1228+
staticsMocking.isSelected = false
1229+
} else {
1230+
updateControlsEnabledStatus()
1231+
}
1232+
}
1233+
12061234
springTestType.addActionListener { event ->
12071235
val comboBox = event.source as ComboBox<*>
12081236
val item = comboBox.item as SpringTestType
@@ -1368,7 +1396,7 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
13681396
}
13691397

13701398
private fun updateControlsEnabledStatus() {
1371-
mockStrategies.isEnabled = true
1399+
mockStrategies.isEnabled = !useExperimentalEngine.isSelected
13721400

13731401
updateParametrizationEnabled()
13741402
updateStaticMockEnabled()

utbot-ui-commons/src/main/kotlin/org/utbot/intellij/plugin/settings/CommonSettings.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import java.util.concurrent.CompletableFuture
3737
import kotlin.reflect.KClass
3838
import org.utbot.common.isWindows
3939
import org.utbot.framework.SummariesGenerationType
40+
import org.utbot.framework.codegen.domain.SymbolicEngineSource
4041
import org.utbot.framework.codegen.domain.UnknownTestFramework
4142
import org.utbot.framework.plugin.api.SpringTestType
4243
import org.utbot.framework.plugin.api.isSummarizationCompatible
@@ -64,6 +65,7 @@ class Settings(val project: Project) : PersistentStateComponent<Settings.State>
6465
var forceStaticMocking: ForceStaticMocking = ForceStaticMocking.defaultItem,
6566
var treatOverflowAsError: TreatOverflowAsError = TreatOverflowAsError.defaultItem,
6667
var parametrizedTestSource: ParametrizedTestSource = ParametrizedTestSource.defaultItem,
68+
var symbolicEngineSource: SymbolicEngineSource = SymbolicEngineSource.defaultItem,
6769
var classesToMockAlways: Array<String> = Mocker.defaultSuperClassesToMockAlwaysNames.toTypedArray(),
6870
var springTestType: SpringTestType = SpringTestType.defaultItem,
6971
var fuzzingValue: Double = 0.05,
@@ -94,6 +96,7 @@ class Settings(val project: Project) : PersistentStateComponent<Settings.State>
9496
if (forceStaticMocking != other.forceStaticMocking) return false
9597
if (treatOverflowAsError != other.treatOverflowAsError) return false
9698
if (parametrizedTestSource != other.parametrizedTestSource) return false
99+
if (symbolicEngineSource != other.symbolicEngineSource) return false
97100
if (!classesToMockAlways.contentEquals(other.classesToMockAlways)) return false
98101
if (springTestType != other.springTestType) return false
99102
if (fuzzingValue != other.fuzzingValue) return false
@@ -118,6 +121,7 @@ class Settings(val project: Project) : PersistentStateComponent<Settings.State>
118121
result = 31 * result + forceStaticMocking.hashCode()
119122
result = 31 * result + treatOverflowAsError.hashCode()
120123
result = 31 * result + parametrizedTestSource.hashCode()
124+
result = 31 * result + symbolicEngineSource.hashCode()
121125
result = 31 * result + classesToMockAlways.contentHashCode()
122126
result = 31 * result + springTestType.hashCode()
123127
result = 31 * result + fuzzingValue.hashCode()
@@ -166,6 +170,8 @@ class Settings(val project: Project) : PersistentStateComponent<Settings.State>
166170

167171
val parametrizedTestSource: ParametrizedTestSource get() = state.parametrizedTestSource
168172

173+
val symbolicEngineSource: SymbolicEngineSource get() = state.symbolicEngineSource
174+
169175
val classesToMockAlways: Set<String> get() = state.classesToMockAlways.toSet()
170176

171177
val springTestType: SpringTestType get() = state.springTestType

0 commit comments

Comments
 (0)