1
1
package io.modelcontextprotocol.kotlin.sdk.integration.kotlin
2
2
3
+ import io.modelcontextprotocol.kotlin.sdk.GetPromptRequest
4
+ import io.modelcontextprotocol.kotlin.sdk.GetPromptResult
5
+ import io.modelcontextprotocol.kotlin.sdk.PromptArgument
6
+ import io.modelcontextprotocol.kotlin.sdk.PromptMessage
7
+ import io.modelcontextprotocol.kotlin.sdk.Role
8
+ import io.modelcontextprotocol.kotlin.sdk.ServerCapabilities
9
+ import io.modelcontextprotocol.kotlin.sdk.TextContent
3
10
import io.modelcontextprotocol.kotlin.sdk.integration.utils.TestUtils.runTest
4
- import io.modelcontextprotocol.kotlin.sdk.*
5
11
import kotlinx.coroutines.launch
6
12
import kotlinx.coroutines.runBlocking
7
13
import org.junit.jupiter.api.Test
@@ -28,13 +34,11 @@ class PromptEdgeCasesTest : KotlinTestBase() {
28
34
private val specialCharsPromptDescription = " A prompt with special characters"
29
35
private val specialCharsContent = " !@#$%^&*()_+{}|:\" <>?~`-=[]\\ ;',./\n\t "
30
36
31
- override fun configureServerCapabilities (): ServerCapabilities {
32
- return ServerCapabilities (
33
- prompts = ServerCapabilities .Prompts (
34
- listChanged = true
35
- )
36
- )
37
- }
37
+ override fun configureServerCapabilities (): ServerCapabilities = ServerCapabilities (
38
+ prompts = ServerCapabilities .Prompts (
39
+ listChanged = true ,
40
+ ),
41
+ )
38
42
39
43
override fun configureServer () {
40
44
server.addPrompt(
@@ -44,9 +48,9 @@ class PromptEdgeCasesTest : KotlinTestBase() {
44
48
PromptArgument (
45
49
name = " name" ,
46
50
description = " The name to greet" ,
47
- required = true
48
- )
49
- )
51
+ required = true ,
52
+ ),
53
+ ),
50
54
) { request ->
51
55
val name = request.arguments?.get(" name" ) ? : " World"
52
56
@@ -55,13 +59,13 @@ class PromptEdgeCasesTest : KotlinTestBase() {
55
59
messages = listOf (
56
60
PromptMessage (
57
61
role = Role .user,
58
- content = TextContent (text = " Hello, $name !" )
62
+ content = TextContent (text = " Hello, $name !" ),
59
63
),
60
64
PromptMessage (
61
65
role = Role .assistant,
62
- content = TextContent (text = " Greetings, $name ! How can I assist you today?" )
63
- )
64
- )
66
+ content = TextContent (text = " Greetings, $name ! How can I assist you today?" ),
67
+ ),
68
+ ),
65
69
)
66
70
}
67
71
@@ -78,8 +82,8 @@ class PromptEdgeCasesTest : KotlinTestBase() {
78
82
PromptArgument (name = " arg7" , description = " Argument 7" , required = false ),
79
83
PromptArgument (name = " arg8" , description = " Argument 8" , required = false ),
80
84
PromptArgument (name = " arg9" , description = " Argument 9" , required = false ),
81
- PromptArgument (name = " arg10" , description = " Argument 10" , required = false )
82
- )
85
+ PromptArgument (name = " arg10" , description = " Argument 10" , required = false ),
86
+ ),
83
87
) { request ->
84
88
// validate required arguments
85
89
val requiredArgs = listOf (" arg1" , " arg2" , " arg3" )
@@ -103,13 +107,19 @@ class PromptEdgeCasesTest : KotlinTestBase() {
103
107
messages = listOf (
104
108
PromptMessage (
105
109
role = Role .user,
106
- content = TextContent (text = " Arguments: ${args.entries.joinToString { " ${it.key} =${it.value} " }} " )
110
+ content = TextContent (
111
+ text = " Arguments: ${
112
+ args.entries.joinToString {
113
+ " ${it.key} =${it.value} "
114
+ }
115
+ } " ,
116
+ ),
107
117
),
108
118
PromptMessage (
109
119
role = Role .assistant,
110
- content = TextContent (text = " Received ${args.size} arguments" )
111
- )
112
- )
120
+ content = TextContent (text = " Received ${args.size} arguments" ),
121
+ ),
122
+ ),
113
123
)
114
124
}
115
125
@@ -121,9 +131,9 @@ class PromptEdgeCasesTest : KotlinTestBase() {
121
131
PromptArgument (
122
132
name = " size" ,
123
133
description = " Size multiplier" ,
124
- required = false
125
- )
126
- )
134
+ required = false ,
135
+ ),
136
+ ),
127
137
) { request ->
128
138
val size = request.arguments?.get(" size" )?.toIntOrNull() ? : 1
129
139
val content = largePromptContent.repeat(size)
@@ -133,13 +143,13 @@ class PromptEdgeCasesTest : KotlinTestBase() {
133
143
messages = listOf (
134
144
PromptMessage (
135
145
role = Role .user,
136
- content = TextContent (text = " Generate a large response" )
146
+ content = TextContent (text = " Generate a large response" ),
137
147
),
138
148
PromptMessage (
139
149
role = Role .assistant,
140
- content = TextContent (text = content)
141
- )
142
- )
150
+ content = TextContent (text = content),
151
+ ),
152
+ ),
143
153
)
144
154
}
145
155
@@ -150,9 +160,9 @@ class PromptEdgeCasesTest : KotlinTestBase() {
150
160
PromptArgument (
151
161
name = " special" ,
152
162
description = " Special characters to include" ,
153
- required = false
154
- )
155
- )
163
+ required = false ,
164
+ ),
165
+ ),
156
166
) { request ->
157
167
val special = request.arguments?.get(" special" ) ? : specialCharsContent
158
168
@@ -161,13 +171,13 @@ class PromptEdgeCasesTest : KotlinTestBase() {
161
171
messages = listOf (
162
172
PromptMessage (
163
173
role = Role .user,
164
- content = TextContent (text = " Special characters: $special " )
174
+ content = TextContent (text = " Special characters: $special " ),
165
175
),
166
176
PromptMessage (
167
177
role = Role .assistant,
168
- content = TextContent (text = " Received special characters: $special " )
169
- )
170
- )
178
+ content = TextContent (text = " Received special characters: $special " ),
179
+ ),
180
+ ),
171
181
)
172
182
}
173
183
}
@@ -179,8 +189,8 @@ class PromptEdgeCasesTest : KotlinTestBase() {
179
189
val result = client.getPrompt(
180
190
GetPromptRequest (
181
191
name = basicPromptName,
182
- arguments = mapOf (" name" to testName)
183
- )
192
+ arguments = mapOf (" name" to testName),
193
+ ),
184
194
)
185
195
186
196
assertNotNull(result, " Get prompt result should not be null" )
@@ -201,7 +211,7 @@ class PromptEdgeCasesTest : KotlinTestBase() {
201
211
assertEquals(
202
212
" Greetings, $testName ! How can I assist you today?" ,
203
213
assistantContent.text,
204
- " Assistant message content should match"
214
+ " Assistant message content should match" ,
205
215
)
206
216
}
207
217
}
@@ -214,8 +224,8 @@ class PromptEdgeCasesTest : KotlinTestBase() {
214
224
val result = client.getPrompt(
215
225
GetPromptRequest (
216
226
name = complexPromptName,
217
- arguments = arguments
218
- )
227
+ arguments = arguments,
228
+ ),
219
229
)
220
230
221
231
assertNotNull(result, " Get prompt result should not be null" )
@@ -241,7 +251,7 @@ class PromptEdgeCasesTest : KotlinTestBase() {
241
251
assertEquals(
242
252
" Received 10 arguments" ,
243
253
assistantContent.text,
244
- " Assistant message should indicate 10 arguments"
254
+ " Assistant message should indicate 10 arguments" ,
245
255
)
246
256
}
247
257
}
@@ -252,8 +262,8 @@ class PromptEdgeCasesTest : KotlinTestBase() {
252
262
val result = client.getPrompt(
253
263
GetPromptRequest (
254
264
name = largePromptName,
255
- arguments = mapOf (" size" to " 1" )
256
- )
265
+ arguments = mapOf (" size" to " 1" ),
266
+ ),
257
267
)
258
268
259
269
assertNotNull(result, " Get prompt result should not be null" )
@@ -276,8 +286,8 @@ class PromptEdgeCasesTest : KotlinTestBase() {
276
286
val result = client.getPrompt(
277
287
GetPromptRequest (
278
288
name = specialCharsPromptName,
279
- arguments = mapOf (" special" to specialCharsContent)
280
- )
289
+ arguments = mapOf (" special" to specialCharsContent),
290
+ ),
281
291
)
282
292
283
293
assertNotNull(result, " Get prompt result should not be null" )
@@ -299,7 +309,7 @@ class PromptEdgeCasesTest : KotlinTestBase() {
299
309
val assistantText = assistantContent.text ? : " "
300
310
assertTrue(
301
311
assistantText.contains(specialCharsContent),
302
- " Assistant message should contain special characters"
312
+ " Assistant message should contain special characters" ,
303
313
)
304
314
}
305
315
}
@@ -312,18 +322,18 @@ class PromptEdgeCasesTest : KotlinTestBase() {
312
322
client.getPrompt(
313
323
GetPromptRequest (
314
324
name = complexPromptName,
315
- arguments = mapOf (" arg4" to " value4" , " arg5" to " value5" )
316
- )
325
+ arguments = mapOf (" arg4" to " value4" , " arg5" to " value5" ),
326
+ ),
317
327
)
318
328
}
319
329
}
320
330
321
331
assertTrue(
322
332
exception.message?.contains(" arg1" ) == true ||
323
- exception.message?.contains(" arg2" ) == true ||
324
- exception.message?.contains(" arg3" ) == true ||
325
- exception.message?.contains(" required" ) == true ,
326
- " Exception should mention missing required arguments"
333
+ exception.message?.contains(" arg2" ) == true ||
334
+ exception.message?.contains(" arg3" ) == true ||
335
+ exception.message?.contains(" required" ) == true ,
336
+ " Exception should mention missing required arguments" ,
327
337
)
328
338
}
329
339
}
@@ -354,8 +364,8 @@ class PromptEdgeCasesTest : KotlinTestBase() {
354
364
val result = client.getPrompt(
355
365
GetPromptRequest (
356
366
name = promptName,
357
- arguments = arguments
358
- )
367
+ arguments = arguments,
368
+ ),
359
369
)
360
370
361
371
synchronized(results) {
@@ -384,19 +394,19 @@ class PromptEdgeCasesTest : KotlinTestBase() {
384
394
client.getPrompt(
385
395
GetPromptRequest (
386
396
name = nonExistentPromptName,
387
- arguments = mapOf (" name" to " Test" )
388
- )
397
+ arguments = mapOf (" name" to " Test" ),
398
+ ),
389
399
)
390
400
}
391
401
}
392
402
393
403
assertTrue(
394
404
exception.message?.contains(" not found" ) == true ||
395
- exception.message?.contains(" does not exist" ) == true ||
396
- exception.message?.contains(" unknown" ) == true ||
397
- exception.message?.contains(" error" ) == true ,
398
- " Exception should indicate prompt not found"
405
+ exception.message?.contains(" does not exist" ) == true ||
406
+ exception.message?.contains(" unknown" ) == true ||
407
+ exception.message?.contains(" error" ) == true ,
408
+ " Exception should indicate prompt not found" ,
399
409
)
400
410
}
401
411
}
402
- }
412
+ }
0 commit comments