Skip to content

Commit 918bc1a

Browse files
committed
unit test
1 parent 1e42f78 commit 918bc1a

File tree

1 file changed

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

1 file changed

+119
-0
lines changed

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

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,16 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.util.isWithin
2828
import software.aws.toolkits.jetbrains.services.codewhisperer.util.runIfIdcConnectionOrTelemetryEnabled
2929
import software.aws.toolkits.jetbrains.services.codewhisperer.util.toCodeChunk
3030
import software.aws.toolkits.jetbrains.services.codewhisperer.util.truncateLineByLine
31+
import software.aws.toolkits.jetbrains.services.codewhisperer.util.getDiagnosticDifferences
32+
import software.aws.toolkits.jetbrains.services.codewhisperer.util.getDiagnosticsType
33+
import software.aws.toolkits.jetbrains.services.codewhisperer.util.convertSeverity
34+
import com.intellij.lang.annotation.HighlightSeverity
3135
import software.aws.toolkits.jetbrains.settings.AwsSettings
3236
import software.aws.toolkits.jetbrains.utils.rules.JavaCodeInsightTestFixtureRule
3337
import software.aws.toolkits.telemetry.CodewhispererCompletionType
38+
import software.amazon.awssdk.services.codewhispererruntime.model.IdeDiagnostic
39+
import software.amazon.awssdk.services.codewhispererruntime.model.Position
40+
import software.amazon.awssdk.services.codewhispererruntime.model.Range
3441

3542
class CodeWhispererUtilTest {
3643
@JvmField
@@ -308,4 +315,116 @@ class CodeWhispererUtilTest {
308315
val file = fixture.addFileToProject("workspace/projectA1/src/Sample.java", "").virtualFile
309316
assertThat(file.isWithin(projectRoot)).isFalse()
310317
}
318+
@Test
319+
fun `getDiagnosticsType correctly identifies syntax errors`() {
320+
val messages = listOf(
321+
"Expected semicolon at end of line",
322+
"Incorrect indent level",
323+
"Syntax error in expression"
324+
)
325+
326+
messages.forEach { message ->
327+
assertThat(getDiagnosticsType(message)).isEqualTo("SYNTAX_ERROR")
328+
}
329+
}
330+
331+
@Test
332+
fun `getDiagnosticsType correctly identifies type errors`() {
333+
val messages = listOf(
334+
"Cannot cast String to Int",
335+
"Type mismatch: expected String but got Int"
336+
)
337+
338+
messages.forEach { message ->
339+
assertThat(getDiagnosticsType(message)).isEqualTo("TYPE_ERROR")
340+
}
341+
}
342+
343+
@Test
344+
fun `getDiagnosticsType returns OTHER for unrecognized patterns`() {
345+
val message = "Some random message"
346+
assertThat(getDiagnosticsType(message)).isEqualTo("OTHER")
347+
}
348+
349+
@Test
350+
fun `convertSeverity correctly maps severity levels`() {
351+
assertThat(convertSeverity(HighlightSeverity.ERROR)).isEqualTo("ERROR")
352+
assertThat(convertSeverity(HighlightSeverity.WARNING)).isEqualTo("WARNING")
353+
assertThat(convertSeverity(HighlightSeverity.INFORMATION)).isEqualTo("INFORMATION")
354+
assertThat(convertSeverity(HighlightSeverity.INFO)).isEqualTo("INFORMATION")
355+
}
356+
357+
@Test
358+
fun `getDiagnosticDifferences correctly identifies added and removed diagnostics`() {
359+
val diagnostic1 = IdeDiagnostic.builder()
360+
.ideDiagnosticType("SYNTAX_ERROR")
361+
.severity("ERROR")
362+
.source("inspection1")
363+
.range(Range.builder()
364+
.start(Position.builder().line(0).character(0).build())
365+
.end(Position.builder().line(0).character(10).build())
366+
.build())
367+
.build()
368+
369+
val diagnostic2 = IdeDiagnostic.builder()
370+
.ideDiagnosticType("TYPE_ERROR")
371+
.severity("WARNING")
372+
.source("inspection2")
373+
.range(Range.builder()
374+
.start(Position.builder().line(1).character(0).build())
375+
.end(Position.builder().line(1).character(10).build())
376+
.build())
377+
.build()
378+
379+
val oldList = listOf(diagnostic1)
380+
val newList = listOf(diagnostic2)
381+
382+
val differences = getDiagnosticDifferences(oldList, newList)
383+
384+
assertThat(differences.added).containsExactly(diagnostic2)
385+
assertThat(differences.removed).containsExactly(diagnostic1)
386+
}
387+
388+
@Test
389+
fun `getDiagnosticDifferences handles empty lists`() {
390+
val diagnostic = IdeDiagnostic.builder()
391+
.ideDiagnosticType("SYNTAX_ERROR")
392+
.severity("ERROR")
393+
.source("inspection1")
394+
.range(Range.builder()
395+
.start(Position.builder().line(0).character(0).build())
396+
.end(Position.builder().line(0).character(10).build())
397+
.build())
398+
.build()
399+
400+
val emptyList = emptyList<IdeDiagnostic>()
401+
val nonEmptyList = listOf(diagnostic)
402+
403+
val differencesWithEmptyOld = getDiagnosticDifferences(emptyList, nonEmptyList)
404+
assertThat(differencesWithEmptyOld.added).containsExactly(diagnostic)
405+
assertThat(differencesWithEmptyOld.removed).isEmpty()
406+
407+
val differencesWithEmptyNew = getDiagnosticDifferences(nonEmptyList, emptyList)
408+
assertThat(differencesWithEmptyNew.added).isEmpty()
409+
assertThat(differencesWithEmptyNew.removed).containsExactly(diagnostic)
410+
}
411+
412+
@Test
413+
fun `getDiagnosticDifferences handles identical lists`() {
414+
val diagnostic = IdeDiagnostic.builder()
415+
.ideDiagnosticType("SYNTAX_ERROR")
416+
.severity("ERROR")
417+
.source("inspection1")
418+
.range(Range.builder()
419+
.start(Position.builder().line(0).character(0).build())
420+
.end(Position.builder().line(0).character(10).build())
421+
.build())
422+
.build()
423+
424+
val list = listOf(diagnostic)
425+
val differences = getDiagnosticDifferences(list, list)
426+
427+
assertThat(differences.added).isEmpty()
428+
assertThat(differences.removed).isEmpty()
429+
}
311430
}

0 commit comments

Comments
 (0)