Skip to content

Commit 389b321

Browse files
add diagnostics util tests
1 parent d55659f commit 389b321

File tree

1 file changed

+129
-0
lines changed
  • plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer

1 file changed

+129
-0
lines changed

plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererUtilTest.kt

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
package software.aws.toolkits.jetbrains.services.codewhisperer
55

6+
import com.intellij.lang.annotation.HighlightSeverity
67
import com.intellij.openapi.util.SimpleModificationTracker
78
import com.intellij.testFramework.fixtures.CodeInsightTestFixture
89
import kotlinx.coroutines.runBlocking
@@ -12,7 +13,10 @@ import org.junit.Before
1213
import org.junit.Rule
1314
import org.junit.Test
1415
import software.amazon.awssdk.regions.Region
16+
import software.amazon.awssdk.services.codewhispererruntime.model.IdeDiagnostic
1517
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
1620
import software.amazon.awssdk.services.ssooidc.SsoOidcClient
1721
import software.aws.toolkits.core.utils.test.aStringWithLineCount
1822
import software.aws.toolkits.jetbrains.core.MockClientManagerRule
@@ -27,6 +31,9 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.util.isWithin
2731
import software.aws.toolkits.jetbrains.services.codewhisperer.util.runIfIdcConnectionOrTelemetryEnabled
2832
import software.aws.toolkits.jetbrains.services.codewhisperer.util.toCodeChunk
2933
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
3037
import software.aws.toolkits.jetbrains.settings.AwsSettings
3138
import software.aws.toolkits.jetbrains.utils.rules.JavaCodeInsightTestFixtureRule
3239
import software.aws.toolkits.telemetry.CodewhispererCompletionType
@@ -263,4 +270,126 @@ class CodeWhispererUtilTest {
263270
val file = fixture.addFileToProject("workspace/projectA1/src/Sample.java", "").virtualFile
264271
assertThat(file.isWithin(projectRoot)).isFalse()
265272
}
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+
}
266395
}

0 commit comments

Comments
 (0)