Skip to content

Commit 1fb52bb

Browse files
committed
An attempt to support UTestGlobalMock in converters
1 parent 623a94f commit 1fb52bb

File tree

2 files changed

+41
-4
lines changed

2 files changed

+41
-4
lines changed

utbot-junit-contest/src/main/kotlin/org/utbot/contest/usvm/converter/JcToUtExecutionConverter.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,18 +56,20 @@ class JcToUtExecutionConverter(
5656
private val toValueConverter = Descriptor2ValueConverter(utContext.classLoader)
5757

5858
private var jcToUtModelConverter: JcToUtModelConverter
59+
private var instrumentation: List<UtInstrumentation>
5960

6061
init {
6162
val instToModelConverter = UTestInstToUtModelConverter(idGenerator, jcClasspath, utilMethodProvider)
6263

63-
instToModelConverter.processUTest(jcExecution.uTest)
64+
instToModelConverter.processUTest(jcExecution.uTest).also {
65+
instrumentation = instToModelConverter.findInstrumentations()
66+
}
67+
6468
jcToUtModelConverter = JcToUtModelConverter(idGenerator, jcClasspath, instToModelConverter)
6569
}
6670

6771
fun convert(): UtExecution? {
6872
val coverage = convertCoverage(getTrace(jcExecution.uTestExecutionResult), jcExecution.method.enclosingType.jcClass)
69-
// TODO usvm-sbft: fill up instrumentation with data from UTest
70-
val instrumentation = emptyList<UtInstrumentation>()
7173

7274
val utUsvmExecution: UtUsvmExecution = when (val executionResult = jcExecution.uTestExecutionResult) {
7375
is UTestExecutionSuccessResult -> UtUsvmExecution(

utbot-junit-contest/src/main/kotlin/org/utbot/contest/usvm/converter/UTestInstToUtModelConverter.kt

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,21 @@ import org.usvm.instrumentation.testcase.api.UTestShortExpression
3434
import org.usvm.instrumentation.testcase.api.UTestStaticMethodCall
3535
import org.usvm.instrumentation.testcase.api.UTestStringExpression
3636
import org.utbot.framework.codegen.domain.builtin.UtilMethodProvider
37+
import org.utbot.framework.plugin.api.ConstructorId
3738
import org.utbot.framework.plugin.api.ExecutableId
3839
import org.utbot.framework.plugin.api.FieldId
40+
import org.utbot.framework.plugin.api.MethodId
3941
import org.utbot.framework.plugin.api.UtArrayModel
4042
import org.utbot.framework.plugin.api.UtAssembleModel
4143
import org.utbot.framework.plugin.api.UtClassRefModel
4244
import org.utbot.framework.plugin.api.UtCompositeModel
4345
import org.utbot.framework.plugin.api.UtExecutableCallModel
4446
import org.utbot.framework.plugin.api.UtInstrumentation
4547
import org.utbot.framework.plugin.api.UtModel
48+
import org.utbot.framework.plugin.api.UtNewInstanceInstrumentation
4649
import org.utbot.framework.plugin.api.UtNullModel
4750
import org.utbot.framework.plugin.api.UtPrimitiveModel
51+
import org.utbot.framework.plugin.api.UtStaticMethodInstrumentation
4852
import org.utbot.framework.plugin.api.util.classClassId
4953
import org.utbot.framework.plugin.api.util.objectClassId
5054
import org.utbot.fuzzer.IdGenerator
@@ -71,6 +75,8 @@ class UTestInstToUtModelConverter(
7175
return alreadyCreatedModel
7276
}
7377

78+
fun findInstrumentations(): List<UtInstrumentation> = instrumentations
79+
7480
private fun removeInstantiationCallFromThisInstanceModificationChain(model: UtModel) {
7581
if (model is UtAssembleModel) {
7682
val instantiationCall = model.instantiationCall
@@ -301,7 +307,36 @@ class UTestInstToUtModelConverter(
301307
}
302308

303309
is UTestGlobalMock -> {
304-
// TODO usvm-sbft: collect instrumentations here
310+
// Daniil said that we can miss [type] and [fields] when converting to [UtInstrumentation]
311+
val methodsToExprs = uTestExpr.methods.entries
312+
313+
methodsToExprs
314+
.filter { it.key is MethodId }
315+
.forEach { (jcMethod, uTestExprs) ->
316+
val methodId = jcMethod.toExecutableId(jcClasspath) as MethodId
317+
val valueModels = uTestExprs.map { expr -> processExpr(expr) }
318+
val methodInstrumentation = UtStaticMethodInstrumentation(
319+
methodId = methodId,
320+
values = valueModels,
321+
)
322+
323+
instrumentations += methodInstrumentation
324+
}
325+
326+
methodsToExprs
327+
.filter { it.key is ConstructorId }
328+
.forEach { (jcMethod, uTestExprs) ->
329+
val valueModels = uTestExprs.map { expr -> processExpr(expr) }
330+
val methodInstrumentation = UtNewInstanceInstrumentation(
331+
// TODO usvm-sbft looking at [Traverser] ln 1682, this classId does not seem correct
332+
classId = jcMethod.enclosingClass.classId,
333+
instances = valueModels,
334+
callSites = setOf(jcMethod.enclosingClass.classId),
335+
)
336+
337+
instrumentations += methodInstrumentation
338+
}
339+
305340
// UtClassRefModel is returned here for consistency with [Descriptor2ValueConverter]
306341
// which returns Class<*> instance for [UTestGlobalMock] descriptors.
307342
UtClassRefModel(

0 commit comments

Comments
 (0)