@@ -186,6 +186,59 @@ class SarifReportTest {
186
186
assert (codeFlowPhysicalLocations[0 ].region.startColumn == 5 )
187
187
}
188
188
189
+ @Test
190
+ fun testMinimizationRemovesDuplicates () {
191
+ mockUtMethodNames()
192
+
193
+ val mockUtExecution = Mockito .mock(UtExecution ::class .java, Mockito .RETURNS_DEEP_STUBS )
194
+ Mockito .`when `(mockUtExecution.result).thenReturn(UtImplicitlyThrownException (NullPointerException (), false ))
195
+
196
+ val testCases = listOf (
197
+ UtTestCase (mockUtMethod, listOf (mockUtExecution)),
198
+ UtTestCase (mockUtMethod, listOf (mockUtExecution)) // duplicate
199
+ )
200
+
201
+ val report = SarifReport (
202
+ testCases = testCases,
203
+ generatedTestsCode = " " ,
204
+ sourceFindingEmpty
205
+ ).createReport().toSarif()
206
+
207
+ assert (report.runs.first().results.size == 1 ) // no duplicates
208
+ }
209
+
210
+ @Test
211
+ fun testMinimizationChoosesShortestCodeFlow () {
212
+ mockUtMethodNames()
213
+
214
+ val mockNPE1 = Mockito .mock(NullPointerException ::class .java)
215
+ val mockNPE2 = Mockito .mock(NullPointerException ::class .java)
216
+
217
+ val mockUtExecution1 = Mockito .mock(UtExecution ::class .java, Mockito .RETURNS_DEEP_STUBS )
218
+ val mockUtExecution2 = Mockito .mock(UtExecution ::class .java, Mockito .RETURNS_DEEP_STUBS )
219
+ Mockito .`when `(mockUtExecution1.result).thenReturn(UtImplicitlyThrownException (mockNPE1, false ))
220
+ Mockito .`when `(mockUtExecution2.result).thenReturn(UtImplicitlyThrownException (mockNPE2, false ))
221
+
222
+ val stackTraceElement1 = StackTraceElement (" Main" , " main" , " Main.java" , 3 )
223
+ val stackTraceElement2 = StackTraceElement (" Main" , " main" , " Main.java" , 7 )
224
+ Mockito .`when `(mockNPE1.stackTrace).thenReturn(arrayOf(stackTraceElement1))
225
+ Mockito .`when `(mockNPE2.stackTrace).thenReturn(arrayOf(stackTraceElement1, stackTraceElement2))
226
+
227
+ val testCases = listOf (
228
+ UtTestCase (mockUtMethod, listOf (mockUtExecution1)),
229
+ UtTestCase (mockUtMethod, listOf (mockUtExecution2)) // duplicate with longer stack trace
230
+ )
231
+
232
+ val report = SarifReport (
233
+ testCases = testCases,
234
+ generatedTestsCode = " " ,
235
+ sourceFindingEmpty
236
+ ).createReport().toSarif()
237
+
238
+ assert (report.runs.first().results.size == 1 ) // no duplicates
239
+ assert (report.runs.first().results.first().totalCodeFlowLocations() == 1 ) // with shorter stack trace
240
+ }
241
+
189
242
// internal
190
243
191
244
private val mockUtMethod = Mockito .mock(UtMethod ::class .java, Mockito .RETURNS_DEEP_STUBS )
0 commit comments