Skip to content

Commit 2ddd138

Browse files
committed
test
1 parent bf77c91 commit 2ddd138

File tree

2 files changed

+53
-2
lines changed

2 files changed

+53
-2
lines changed

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/service/CodeWhispererService.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ class CodeWhispererService(private val cs: CoroutineScope) : Disposable {
213213
return
214214
}
215215

216-
handleInlineCompletion(editor, triggerTypeInfo)
216+
handleLspInlineCompletion(editor, triggerTypeInfo)
217217
invokeCodeWhispererInBackground(requestContext)
218218
}
219219

@@ -536,7 +536,7 @@ class CodeWhispererService(private val cs: CoroutineScope) : Disposable {
536536
return nextStates
537537
}
538538

539-
private fun handleInlineCompletion(editor: Editor, triggerType: TriggerTypeInfo) {
539+
fun handleLspInlineCompletion(editor: Editor, triggerType: TriggerTypeInfo) {
540540
editor.project?.let { project ->
541541
AmazonQLspService.executeIfRunning(project) { server ->
542542
val params = createInlineCompletionParams(editor, triggerType)

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

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,22 @@
44
package software.aws.toolkits.jetbrains.services.codewhisperer
55

66
import com.intellij.openapi.application.ApplicationManager
7+
import com.intellij.openapi.application.runReadAction
78
import com.intellij.openapi.ui.popup.JBPopup
89
import com.intellij.psi.PsiFile
910
import com.intellij.testFramework.DisposableRule
1011
import com.intellij.testFramework.replaceService
1112
import com.intellij.testFramework.runInEdtAndWait
1213
import kotlinx.coroutines.async
14+
import kotlinx.coroutines.runBlocking
1315
import kotlinx.coroutines.test.runTest
1416
import org.assertj.core.api.Assertions.assertThat
17+
import org.eclipse.lsp4j.jsonrpc.messages.ResponseMessage
1518
import org.junit.Before
1619
import org.junit.Ignore
1720
import org.junit.Rule
1821
import org.junit.Test
22+
import org.mockito.Mockito.mock
1923
import org.mockito.kotlin.any
2024
import org.mockito.kotlin.argumentCaptor
2125
import org.mockito.kotlin.doReturn
@@ -31,6 +35,12 @@ import software.amazon.awssdk.services.codewhispererruntime.model.ProgrammingLan
3135
import software.amazon.awssdk.services.codewhispererruntime.model.SupplementalContext
3236
import software.aws.toolkits.jetbrains.core.credentials.AwsConnectionManager
3337
import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManager
38+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLanguageServer
39+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService
40+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.textDocument.InlineCompletionListWithReferences
41+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.textDocument.InlineCompletionTriggerKind
42+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.textDocument.InlineCompletionWithReferencesParams
43+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.util.FileUriUtil.toUriString
3444
import software.aws.toolkits.jetbrains.services.codewhisperer.credentials.CodeWhispererClientAdaptor
3545
import software.aws.toolkits.jetbrains.services.codewhisperer.customization.CodeWhispererCustomization
3646
import software.aws.toolkits.jetbrains.services.codewhisperer.customization.CodeWhispererModelConfigurator
@@ -51,6 +61,7 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.telemetry.CodeWhis
5161
import software.aws.toolkits.jetbrains.services.codewhisperer.util.FileContextProvider
5262
import software.aws.toolkits.jetbrains.utils.rules.JavaCodeInsightTestFixtureRule
5363
import software.aws.toolkits.telemetry.CodewhispererTriggerType
64+
import java.util.concurrent.CompletableFuture
5465

5566
class CodeWhispererServiceTest {
5667
@Rule
@@ -229,6 +240,46 @@ class CodeWhispererServiceTest {
229240
assertThat(firstValue.supplementalContexts()).isEqualTo(mockSupContext.toSdkModel())
230241
}
231242
}
243+
244+
@Test
245+
fun `test handleInlineCompletion creates correct params and sends to server`() = runTest {
246+
val mockLspServer = mock(AmazonQLanguageServer::class.java)
247+
val mockLspService = mock(AmazonQLspService::class.java)
248+
val project = projectRule.project
249+
250+
project.replaceService(
251+
AmazonQLspService::class.java,
252+
mockLspService,
253+
disposableRule.disposable
254+
)
255+
whenever(mockLspService.executeSync<CompletableFuture<ResponseMessage>>(any())).thenAnswer { invocation ->
256+
val func = invocation.getArgument<suspend AmazonQLspService.(AmazonQLanguageServer) -> CompletableFuture<ResponseMessage>>(0)
257+
runBlocking {
258+
func.invoke(mockLspService, mockLspServer)
259+
}
260+
}
261+
262+
val mockEditor = projectRule.fixture.editor
263+
val mockCompletableFuture = CompletableFuture<InlineCompletionListWithReferences>()
264+
265+
whenever(mockLspServer.inlineCompletionWithReferences(any())).thenReturn(mockCompletableFuture)
266+
val paramsCaptor = argumentCaptor<InlineCompletionWithReferencesParams>()
267+
268+
sut.handleLspInlineCompletion(
269+
mockEditor,
270+
TriggerTypeInfo(CodewhispererTriggerType.OnDemand, CodeWhispererAutomatedTriggerType.Unknown())
271+
)
272+
273+
verify(mockLspServer).inlineCompletionWithReferences(paramsCaptor.capture())
274+
275+
runReadAction {
276+
val capturedParams = paramsCaptor.firstValue
277+
assertThat(capturedParams.textDocument.uri).isEqualTo(toUriString(file.virtualFile))
278+
assertThat(capturedParams.position.line).isEqualTo(mockEditor.caretModel.primaryCaret.visualPosition.line)
279+
assertThat(capturedParams.position.character).isEqualTo(mockEditor.caretModel.primaryCaret.offset)
280+
assertThat(capturedParams.context.triggerKind).isEqualTo(InlineCompletionTriggerKind.Invoke)
281+
}
282+
}
232283
}
233284

234285
private fun CodeWhispererProgrammingLanguage.toSdkModel(): ProgrammingLanguage = ProgrammingLanguage.builder()

0 commit comments

Comments
 (0)