@@ -41,6 +41,7 @@ import org.utbot.framework.codegen.model.tree.CgExecutableCall
41
41
import org.utbot.framework.codegen.model.tree.CgExpression
42
42
import org.utbot.framework.codegen.model.tree.CgFieldAccess
43
43
import org.utbot.framework.codegen.model.tree.CgGetJavaClass
44
+ import org.utbot.framework.codegen.model.tree.CgIsInstance
44
45
import org.utbot.framework.codegen.model.tree.CgLiteral
45
46
import org.utbot.framework.codegen.model.tree.CgMethod
46
47
import org.utbot.framework.codegen.model.tree.CgMethodCall
@@ -1195,20 +1196,6 @@ internal class CgMethodConstructor(val context: CgContext) : CgContextOwner by c
1195
1196
val testName = nameGenerator.parameterizedTestMethodName(dataProviderMethodName)
1196
1197
withNameScope {
1197
1198
val testParameterDeclarations = createParameterDeclarations(testSet, genericExecution)
1198
- val mainBody = {
1199
- substituteStaticFields(statics, isParametrized = true )
1200
- // build this instance
1201
- thisInstance = genericExecution.stateBefore.thisInstance?.let { currentMethodParameters[CgParameterKind .ThisInstance ] }
1202
-
1203
- // build arguments for method under test and parameterized test
1204
- for (index in genericExecution.stateBefore.parameters.indices) {
1205
- methodArguments + = currentMethodParameters[CgParameterKind .Argument (index)]!!
1206
- }
1207
-
1208
- // record result and generate result assertions
1209
- recordActualResult()
1210
- generateAssertionsForParameterizedTest()
1211
- }
1212
1199
1213
1200
methodType = PARAMETRIZED
1214
1201
testMethod(
@@ -1219,20 +1206,36 @@ internal class CgMethodConstructor(val context: CgContext) : CgContextOwner by c
1219
1206
dataProviderMethodName
1220
1207
) {
1221
1208
rememberInitialStaticFields(statics)
1209
+ substituteStaticFields(statics, isParametrized = true )
1210
+
1211
+ // build this instance
1212
+ thisInstance = genericExecution.stateBefore.thisInstance?.let { currentMethodParameters[CgParameterKind .ThisInstance ] }
1213
+
1214
+ // build arguments for method under test and parameterized test
1215
+ for (index in genericExecution.stateBefore.parameters.indices) {
1216
+ methodArguments + = currentMethodParameters[CgParameterKind .Argument (index)]!!
1217
+ }
1222
1218
1223
1219
if (containsFailureExecution(testSet) || statics.isNotEmpty()) {
1224
1220
var currentTryBlock = tryBlock {
1225
- mainBody()
1221
+ recordActualResult()
1222
+ generateAssertionsForParameterizedTest()
1226
1223
}
1227
1224
1228
1225
if (containsFailureExecution(testSet)) {
1229
- currentTryBlock = currentTryBlock.catch (Throwable ::class .java.id) { e ->
1230
- val pseudoExceptionVarName = when (codegenLanguage) {
1231
- CodegenLanguage .JAVA -> " ${expectedErrorVarName} .isInstance(${e.name.decapitalize()} )"
1232
- CodegenLanguage .KOTLIN -> " ${expectedErrorVarName} !!.isInstance(${e.name.decapitalize()} )"
1226
+ currentTryBlock =
1227
+ if (containsReflectiveCall) {
1228
+ currentTryBlock.catch (InvocationTargetException ::class .java.id) { exception ->
1229
+ testFrameworkManager.assertBoolean(
1230
+ CgIsInstance (expectedErrorVariable, exception[getTargetException]())
1231
+ )
1232
+ }
1233
+ } else {
1234
+ currentTryBlock.catch (Throwable ::class .java.id) { throwable ->
1235
+ testFrameworkManager.assertBoolean(
1236
+ CgIsInstance (expectedErrorVariable, throwable)
1237
+ )
1233
1238
}
1234
-
1235
- testFrameworkManager.assertBoolean(CgVariable (pseudoExceptionVarName, booleanClassId))
1236
1239
}
1237
1240
}
1238
1241
@@ -1243,7 +1246,8 @@ internal class CgMethodConstructor(val context: CgContext) : CgContextOwner by c
1243
1246
}
1244
1247
+ currentTryBlock
1245
1248
} else {
1246
- mainBody()
1249
+ recordActualResult()
1250
+ generateAssertionsForParameterizedTest()
1247
1251
}
1248
1252
}
1249
1253
}
@@ -1329,20 +1333,19 @@ internal class CgMethodConstructor(val context: CgContext) : CgContextOwner by c
1329
1333
val containsFailureExecution = containsFailureExecution(testSet)
1330
1334
if (containsFailureExecution) {
1331
1335
val classClassId = Class ::class .id
1332
- val expectedException = CgParameterDeclaration (
1333
- parameter = declareParameter(
1334
- type = BuiltinClassId (
1335
- name = classClassId.name,
1336
- simpleName = classClassId.simpleName,
1337
- canonicalName = classClassId.canonicalName,
1338
- packageName = classClassId.packageName,
1339
- typeParameters = TypeParameters (listOf (Throwable ::class .java.id))
1340
- ),
1341
- name = nameGenerator.variableName(expectedErrorVarName)
1336
+ expectedErrorVariable = declareParameter(
1337
+ type = BuiltinClassId (
1338
+ name = classClassId.name,
1339
+ simpleName = classClassId.simpleName,
1340
+ canonicalName = classClassId.canonicalName,
1341
+ packageName = classClassId.packageName,
1342
+ typeParameters = TypeParameters (listOf (Throwable ::class .java.id))
1342
1343
),
1343
- // exceptions are always reference type
1344
- isReferenceType = true
1344
+ name = nameGenerator.variableName(expectedErrorVarName)
1345
1345
)
1346
+
1347
+ // exceptions are always reference type
1348
+ val expectedException = CgParameterDeclaration (parameter = expectedErrorVariable, isReferenceType = true )
1346
1349
this + = expectedException
1347
1350
currentMethodParameters[CgParameterKind .ExpectedException ] = expectedException.parameter
1348
1351
}
@@ -1466,6 +1469,7 @@ internal class CgMethodConstructor(val context: CgContext) : CgContextOwner by c
1466
1469
thisInstance = null
1467
1470
methodArguments.clear()
1468
1471
currentExecution = null
1472
+ containsReflectiveCall = false
1469
1473
mockFrameworkManager.clearExecutionResources()
1470
1474
currentMethodParameters.clear()
1471
1475
}
0 commit comments