Skip to content

Commit 01363ff

Browse files
committed
Fix tests on anonymous classes
1 parent fc1d1df commit 01363ff

3 files changed

Lines changed: 115 additions & 12 deletions

File tree

utbot-framework/src/test/kotlin/org/utbot/examples/UtValueTestCaseChecker.kt

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1144,6 +1144,102 @@ abstract class UtValueTestCaseChecker(
11441144
summaryDisplayNameChecks = summaryDisplayNameChecks
11451145
)
11461146

1147+
// check arguments, statics and Result<R> for exceptions check
1148+
protected inline fun <reified R> checkStaticsAndException(
1149+
method: KFunction1<*, R>,
1150+
branches: ExecutionsNumberMatcher,
1151+
vararg matchers: (StaticsType, Result<R>) -> Boolean,
1152+
coverage: CoverageMatcher = Full,
1153+
mockStrategy: MockStrategyApi = NO_MOCKS,
1154+
additionalDependencies: Array<KClass<*>> = emptyArray(),
1155+
summaryTextChecks: List<(List<DocStatement>?) -> Boolean> = listOf(),
1156+
summaryNameChecks: List<(String?) -> Boolean> = listOf(),
1157+
summaryDisplayNameChecks: List<(String?) -> Boolean> = listOf()
1158+
) = internalCheck(
1159+
method, mockStrategy, branches, matchers, coverage,
1160+
arguments = ::withStaticsBeforeAndExceptions,
1161+
additionalDependencies = additionalDependencies,
1162+
summaryTextChecks = summaryTextChecks,
1163+
summaryNameChecks = summaryNameChecks,
1164+
summaryDisplayNameChecks = summaryDisplayNameChecks
1165+
)
1166+
1167+
protected inline fun <reified T, reified R> checkStaticsAndException(
1168+
method: KFunction2<*, T, R>,
1169+
branches: ExecutionsNumberMatcher,
1170+
vararg matchers: (T, StaticsType, Result<R>) -> Boolean,
1171+
coverage: CoverageMatcher = Full,
1172+
mockStrategy: MockStrategyApi = NO_MOCKS,
1173+
additionalDependencies: Array<KClass<*>> = emptyArray(),
1174+
summaryTextChecks: List<(List<DocStatement>?) -> Boolean> = listOf(),
1175+
summaryNameChecks: List<(String?) -> Boolean> = listOf(),
1176+
summaryDisplayNameChecks: List<(String?) -> Boolean> = listOf()
1177+
) = internalCheck(
1178+
method, mockStrategy, branches, matchers, coverage, T::class,
1179+
arguments = ::withStaticsBeforeAndExceptions,
1180+
additionalDependencies = additionalDependencies,
1181+
summaryTextChecks = summaryTextChecks,
1182+
summaryNameChecks = summaryNameChecks,
1183+
summaryDisplayNameChecks = summaryDisplayNameChecks
1184+
)
1185+
1186+
protected inline fun <reified T1, reified T2, reified R> checkStaticsAndException(
1187+
method: KFunction3<*, T1, T2, R>,
1188+
branches: ExecutionsNumberMatcher,
1189+
vararg matchers: (T1, T2, StaticsType, Result<R>) -> Boolean,
1190+
coverage: CoverageMatcher = Full,
1191+
mockStrategy: MockStrategyApi = NO_MOCKS,
1192+
additionalDependencies: Array<KClass<*>> = emptyArray(),
1193+
summaryTextChecks: List<(List<DocStatement>?) -> Boolean> = listOf(),
1194+
summaryNameChecks: List<(String?) -> Boolean> = listOf(),
1195+
summaryDisplayNameChecks: List<(String?) -> Boolean> = listOf()
1196+
) = internalCheck(
1197+
method, mockStrategy, branches, matchers, coverage, T1::class, T2::class,
1198+
arguments = ::withStaticsBeforeAndExceptions,
1199+
additionalDependencies = additionalDependencies,
1200+
summaryTextChecks = summaryTextChecks,
1201+
summaryNameChecks = summaryNameChecks,
1202+
summaryDisplayNameChecks = summaryDisplayNameChecks
1203+
)
1204+
1205+
protected inline fun <reified T1, reified T2, reified T3, reified R> checkStaticsAndException(
1206+
method: KFunction4<*, T1, T2, T3, R>,
1207+
branches: ExecutionsNumberMatcher,
1208+
vararg matchers: (T1, T2, T3, StaticsType, Result<R>) -> Boolean,
1209+
coverage: CoverageMatcher = Full,
1210+
mockStrategy: MockStrategyApi = NO_MOCKS,
1211+
additionalDependencies: Array<KClass<*>> = emptyArray(),
1212+
summaryTextChecks: List<(List<DocStatement>?) -> Boolean> = listOf(),
1213+
summaryNameChecks: List<(String?) -> Boolean> = listOf(),
1214+
summaryDisplayNameChecks: List<(String?) -> Boolean> = listOf()
1215+
) = internalCheck(
1216+
method, mockStrategy, branches, matchers, coverage, T1::class, T2::class, T3::class,
1217+
arguments = ::withStaticsBeforeAndExceptions,
1218+
additionalDependencies = additionalDependencies,
1219+
summaryTextChecks = summaryTextChecks,
1220+
summaryNameChecks = summaryNameChecks,
1221+
summaryDisplayNameChecks = summaryDisplayNameChecks
1222+
)
1223+
1224+
protected inline fun <reified T1, reified T2, reified T3, reified T4, reified R> checkStaticsAndException(
1225+
method: KFunction5<*, T1, T2, T3, T4, R>,
1226+
branches: ExecutionsNumberMatcher,
1227+
vararg matchers: (T1, T2, T3, T4, StaticsType, Result<R>) -> Boolean,
1228+
coverage: CoverageMatcher = Full,
1229+
mockStrategy: MockStrategyApi = NO_MOCKS,
1230+
additionalDependencies: Array<KClass<*>> = emptyArray(),
1231+
summaryTextChecks: List<(List<DocStatement>?) -> Boolean> = listOf(),
1232+
summaryNameChecks: List<(String?) -> Boolean> = listOf(),
1233+
summaryDisplayNameChecks: List<(String?) -> Boolean> = listOf()
1234+
) = internalCheck(
1235+
method, mockStrategy, branches, matchers, coverage, T1::class, T2::class, T3::class, T4::class,
1236+
arguments = ::withStaticsBeforeAndExceptions,
1237+
additionalDependencies = additionalDependencies,
1238+
summaryTextChecks = summaryTextChecks,
1239+
summaryNameChecks = summaryNameChecks,
1240+
summaryDisplayNameChecks = summaryDisplayNameChecks
1241+
)
1242+
11471243
protected inline fun <reified R> checkStaticsAfter(
11481244
method: KFunction1<*, R>,
11491245
branches: ExecutionsNumberMatcher,
@@ -2683,6 +2779,7 @@ class FullWithAssumptions(assumeCallsNumber: Int) : CoverageMatcher(
26832779
fun withResult(ex: UtValueExecution<*>) = ex.paramsBefore + ex.evaluatedResult
26842780
fun withException(ex: UtValueExecution<*>) = ex.paramsBefore + ex.returnValue
26852781
fun withStaticsBefore(ex: UtValueExecution<*>) = ex.paramsBefore + ex.staticsBefore + ex.evaluatedResult
2782+
fun withStaticsBeforeAndExceptions(ex: UtValueExecution<*>) = ex.paramsBefore + ex.staticsBefore + ex.returnValue
26862783
fun withStaticsAfter(ex: UtValueExecution<*>) = ex.paramsBefore + ex.staticsAfter + ex.evaluatedResult
26872784
fun withThisAndStaticsAfter(ex: UtValueExecution<*>) = listOf(ex.callerBefore) + ex.paramsBefore + ex.staticsAfter + ex.evaluatedResult
26882785
fun withThisAndResult(ex: UtValueExecution<*>) = listOf(ex.callerBefore) + ex.paramsBefore + ex.evaluatedResult
Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,53 @@
11
package org.utbot.examples.objects
22

33
import org.utbot.examples.UtValueTestCaseChecker
4-
import org.utbot.examples.DoNotCalculate
54
import org.utbot.examples.eq
65
import org.utbot.examples.isException
76
import org.junit.jupiter.api.Test
7+
import org.utbot.examples.Full
88

99
class AnonymousClassesExampleTest : UtValueTestCaseChecker(testClass = AnonymousClassesExample::class) {
1010
@Test
1111
fun testAnonymousClassAsParam() {
1212
checkWithException(
1313
AnonymousClassesExample::anonymousClassAsParam,
14-
eq(2),
14+
eq(3),
1515
{ abstractAnonymousClass, r -> abstractAnonymousClass == null && r.isException<NullPointerException>() },
1616
{ abstractAnonymousClass, r -> abstractAnonymousClass != null && r.getOrNull() == 0 },
17-
coverage = DoNotCalculate
17+
{ abstractAnonymousClass, r -> abstractAnonymousClass != null && abstractAnonymousClass::class.java.isAnonymousClass && r.getOrNull() == 42 },
18+
coverage = Full
1819
)
1920
}
2021

2122
@Test
2223
fun testNonFinalAnonymousStatic() {
23-
check(
24+
checkStaticsAndException(
2425
AnonymousClassesExample::nonFinalAnonymousStatic,
25-
eq(0), // we remove all anonymous classes in statics
26-
coverage = DoNotCalculate
26+
eq(3),
27+
{ statics, r -> statics.values.single().value == null && r.isException<NullPointerException>() },
28+
{ _, r -> r.getOrNull() == 0 },
29+
{ _, r -> r.getOrNull() == 42 },
30+
coverage = Full
2731
)
2832
}
2933

3034
@Test
3135
fun testAnonymousClassAsStatic() {
3236
check(
3337
AnonymousClassesExample::anonymousClassAsStatic,
34-
eq(0), // we remove all anonymous classes in statics
35-
coverage = DoNotCalculate
38+
eq(1),
39+
{ r -> r == 42 },
40+
coverage = Full
3641
)
3742
}
3843

3944
@Test
4045
fun testAnonymousClassAsResult() {
4146
check(
4247
AnonymousClassesExample::anonymousClassAsResult,
43-
eq(0), // we remove anonymous classes from the params and the result
44-
coverage = DoNotCalculate
48+
eq(1),
49+
{ abstractAnonymousClass -> abstractAnonymousClass != null && abstractAnonymousClass::class.java.isAnonymousClass },
50+
coverage = Full
4551
)
4652
}
4753
}

utbot-sample/src/main/java/org/utbot/examples/objects/AnonymousClassesExample.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package org.utbot.examples.objects;
22

33
public class AnonymousClassesExample {
4-
private static final AbstractAnonymousClass staticAnonymousClass = AbstractAnonymousClass.getInstance(1);
4+
static final AbstractAnonymousClass staticAnonymousClass = AbstractAnonymousClass.getInstance(1);
55
@SuppressWarnings("FieldMayBeFinal")
6-
private static AbstractAnonymousClass nonFinalAnonymousStatic = AbstractAnonymousClass.getInstance(1);
6+
static AbstractAnonymousClass nonFinalAnonymousStatic = AbstractAnonymousClass.getInstance(1);
77

88
public int anonymousClassAsParam(AbstractAnonymousClass abstractAnonymousClass) {
99
return abstractAnonymousClass.constValue();

0 commit comments

Comments
 (0)