3
3
4
4
package software.aws.toolkits.jetbrains.services.codewhisperer
5
5
6
+ import com.intellij.lang.annotation.HighlightSeverity
6
7
import com.intellij.openapi.util.SimpleModificationTracker
7
8
import com.intellij.testFramework.fixtures.CodeInsightTestFixture
8
9
import kotlinx.coroutines.runBlocking
@@ -12,7 +13,10 @@ import org.junit.Before
12
13
import org.junit.Rule
13
14
import org.junit.Test
14
15
import software.amazon.awssdk.regions.Region
16
+ import software.amazon.awssdk.services.codewhispererruntime.model.IdeDiagnostic
15
17
import software.amazon.awssdk.services.codewhispererruntime.model.OptOutPreference
18
+ import software.amazon.awssdk.services.codewhispererruntime.model.Position
19
+ import software.amazon.awssdk.services.codewhispererruntime.model.Range
16
20
import software.amazon.awssdk.services.ssooidc.SsoOidcClient
17
21
import software.aws.toolkits.core.utils.test.aStringWithLineCount
18
22
import software.aws.toolkits.jetbrains.core.MockClientManagerRule
@@ -27,6 +31,9 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.util.isWithin
27
31
import software.aws.toolkits.jetbrains.services.codewhisperer.util.runIfIdcConnectionOrTelemetryEnabled
28
32
import software.aws.toolkits.jetbrains.services.codewhisperer.util.toCodeChunk
29
33
import software.aws.toolkits.jetbrains.services.codewhisperer.util.truncateLineByLine
34
+ import software.aws.toolkits.jetbrains.services.codewhisperer.util.convertSeverity
35
+ import software.aws.toolkits.jetbrains.services.codewhisperer.util.getDiagnosticDifferences
36
+ import software.aws.toolkits.jetbrains.services.codewhisperer.util.getDiagnosticsType
30
37
import software.aws.toolkits.jetbrains.settings.AwsSettings
31
38
import software.aws.toolkits.jetbrains.utils.rules.JavaCodeInsightTestFixtureRule
32
39
import software.aws.toolkits.telemetry.CodewhispererCompletionType
@@ -263,4 +270,126 @@ class CodeWhispererUtilTest {
263
270
val file = fixture.addFileToProject(" workspace/projectA1/src/Sample.java" , " " ).virtualFile
264
271
assertThat(file.isWithin(projectRoot)).isFalse()
265
272
}
273
+
274
+
275
+ @Test
276
+ fun `getDiagnosticsType correctly identifies syntax errors` () {
277
+ val messages = listOf (
278
+ " Expected semicolon at end of line" ,
279
+ " Incorrect indent level" ,
280
+ " Syntax error in expression"
281
+ )
282
+
283
+ messages.forEach { message ->
284
+ assertThat(getDiagnosticsType(message)).isEqualTo(" SYNTAX_ERROR" )
285
+ }
286
+ }
287
+
288
+ @Test
289
+ fun `getDiagnosticsType correctly identifies type errors` () {
290
+ val messages = listOf (
291
+ " Cannot cast String to Int" ,
292
+ " Type mismatch: expected String but got Int"
293
+ )
294
+
295
+ messages.forEach { message ->
296
+ assertThat(getDiagnosticsType(message)).isEqualTo(" TYPE_ERROR" )
297
+ }
298
+ }
299
+
300
+ @Test
301
+ fun `getDiagnosticsType returns OTHER for unrecognized patterns` () {
302
+ val message = " Some random message"
303
+ assertThat(getDiagnosticsType(message)).isEqualTo(" OTHER" )
304
+ }
305
+
306
+ @Test
307
+ fun `convertSeverity correctly maps severity levels` () {
308
+ assertThat(convertSeverity(HighlightSeverity .ERROR )).isEqualTo(" ERROR" )
309
+ assertThat(convertSeverity(HighlightSeverity .WARNING )).isEqualTo(" WARNING" )
310
+ assertThat(convertSeverity(HighlightSeverity .INFORMATION )).isEqualTo(" INFORMATION" )
311
+ assertThat(convertSeverity(HighlightSeverity .INFO )).isEqualTo(" INFORMATION" )
312
+ }
313
+
314
+ @Test
315
+ fun `getDiagnosticDifferences correctly identifies added and removed diagnostics` () {
316
+ val diagnostic1 = IdeDiagnostic .builder()
317
+ .ideDiagnosticType(" SYNTAX_ERROR" )
318
+ .severity(" ERROR" )
319
+ .source(" inspection1" )
320
+ .range(
321
+ Range .builder()
322
+ .start(Position .builder().line(0 ).character(0 ).build())
323
+ .end(Position .builder().line(0 ).character(10 ).build())
324
+ .build()
325
+ )
326
+ .build()
327
+
328
+ val diagnostic2 = IdeDiagnostic .builder()
329
+ .ideDiagnosticType(" TYPE_ERROR" )
330
+ .severity(" WARNING" )
331
+ .source(" inspection2" )
332
+ .range(
333
+ Range .builder()
334
+ .start(Position .builder().line(1 ).character(0 ).build())
335
+ .end(Position .builder().line(1 ).character(10 ).build())
336
+ .build()
337
+ )
338
+ .build()
339
+
340
+ val oldList = listOf (diagnostic1)
341
+ val newList = listOf (diagnostic2)
342
+
343
+ val differences = getDiagnosticDifferences(oldList, newList)
344
+
345
+ assertThat(differences.added).containsExactly(diagnostic2)
346
+ assertThat(differences.removed).containsExactly(diagnostic1)
347
+ }
348
+
349
+ @Test
350
+ fun `getDiagnosticDifferences handles empty lists` () {
351
+ val diagnostic = IdeDiagnostic .builder()
352
+ .ideDiagnosticType(" SYNTAX_ERROR" )
353
+ .severity(" ERROR" )
354
+ .source(" inspection1" )
355
+ .range(
356
+ Range .builder()
357
+ .start(Position .builder().line(0 ).character(0 ).build())
358
+ .end(Position .builder().line(0 ).character(10 ).build())
359
+ .build()
360
+ )
361
+ .build()
362
+
363
+ val emptyList = emptyList<IdeDiagnostic >()
364
+ val nonEmptyList = listOf (diagnostic)
365
+
366
+ val differencesWithEmptyOld = getDiagnosticDifferences(emptyList, nonEmptyList)
367
+ assertThat(differencesWithEmptyOld.added).containsExactly(diagnostic)
368
+ assertThat(differencesWithEmptyOld.removed).isEmpty()
369
+
370
+ val differencesWithEmptyNew = getDiagnosticDifferences(nonEmptyList, emptyList)
371
+ assertThat(differencesWithEmptyNew.added).isEmpty()
372
+ assertThat(differencesWithEmptyNew.removed).containsExactly(diagnostic)
373
+ }
374
+
375
+ @Test
376
+ fun `getDiagnosticDifferences handles identical lists` () {
377
+ val diagnostic = IdeDiagnostic .builder()
378
+ .ideDiagnosticType(" SYNTAX_ERROR" )
379
+ .severity(" ERROR" )
380
+ .source(" inspection1" )
381
+ .range(
382
+ Range .builder()
383
+ .start(Position .builder().line(0 ).character(0 ).build())
384
+ .end(Position .builder().line(0 ).character(10 ).build())
385
+ .build()
386
+ )
387
+ .build()
388
+
389
+ val list = listOf (diagnostic)
390
+ val differences = getDiagnosticDifferences(list, list)
391
+
392
+ assertThat(differences.added).isEmpty()
393
+ assertThat(differences.removed).isEmpty()
394
+ }
266
395
}
0 commit comments