1
1
package org.usvm.samples.checkers
2
2
3
+ import org.jacodb.ets.base.EtsAssignStmt
4
+ import org.jacodb.ets.base.EtsIfStmt
3
5
import org.jacodb.ets.model.EtsScene
4
6
import org.jacodb.ets.utils.loadEtsFileAutoConvert
5
7
import org.jacodb.ets.utils.loadEtsProjectFromIR
@@ -20,11 +22,11 @@ class UnreachableCodeDetectorTest {
20
22
)
21
23
EtsScene (listOf (file))
22
24
}
25
+ val options = UMachineOptions ()
26
+ val tsOptions = TsOptions (interproceduralAnalysis = false )
23
27
24
28
@Test
25
29
fun testUnreachableCode () {
26
- val options = UMachineOptions ()
27
- val tsOptions = TsOptions (interproceduralAnalysis = false )
28
30
val observer = UnreachableCodeDetector ()
29
31
val machine = TsMachine (scene, options, tsOptions, observer, observer)
30
32
val methods = scene.projectClasses
@@ -38,4 +40,39 @@ class UnreachableCodeDetectorTest {
38
40
39
41
check(uncoveredStatements != null ) { " Uncovered statements are incorrect, results are $uncoveredStatements " }
40
42
}
43
+
44
+ @Test
45
+ fun testUnreachableCodeWithMockedCallsInside () {
46
+ val observer = UnreachableCodeDetector ()
47
+ val tsOptions = TsOptions (interproceduralAnalysis = false )
48
+ val machine = TsMachine (scene, options, tsOptions, observer, observer)
49
+ val methods = scene.projectClasses
50
+ .flatMap { it.methods }
51
+ .filter { it.name == " unreachableCodeWithCallsInside" }
52
+ machine.analyze(methods)
53
+
54
+ val results = observer.result.values.singleOrNull() ? : error(" No results found" )
55
+ check(results.single().second.single() is EtsAssignStmt )
56
+ }
57
+
58
+ @Test
59
+ fun testUnreachableCodeCallsInside () {
60
+ val observer = UnreachableCodeDetector ()
61
+ val tsOptions = TsOptions (interproceduralAnalysis = true )
62
+ val machine = TsMachine (scene, options, tsOptions, observer, observer)
63
+ val methodName = " unreachableCodeWithCallsInside"
64
+ val methods = scene.projectClasses
65
+ .flatMap { it.methods }
66
+ .filter { it.name == methodName }
67
+
68
+ machine.analyze(methods)
69
+
70
+ val results = observer.result.entries
71
+
72
+ check(results.size == 2 )
73
+
74
+ val relatedBranch = results.single { it.key.name == methodName }
75
+ val stmts = relatedBranch.value.single()
76
+ check(stmts.second.single() is EtsIfStmt )
77
+ }
41
78
}
0 commit comments