Skip to content

Commit b8f69b4

Browse files
authored
Revert "FEAT: Support all Tier 1, 2 and 3 targets by Kotlin & remove dependency on Kotest Json due to not supporting all targets (#151)" (#154)
This reverts commit 21aec46.
1 parent 21aec46 commit b8f69b4

File tree

5 files changed

+56
-93
lines changed

5 files changed

+56
-93
lines changed

build.gradle.kts

Lines changed: 5 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,10 @@ kotlin {
220220
}
221221
}
222222

223+
iosArm64()
224+
iosX64()
225+
iosSimulatorArm64()
226+
223227
js(IR) {
224228
nodejs {
225229
testTask {
@@ -234,31 +238,6 @@ kotlin {
234238
nodejs()
235239
}
236240

237-
// Tier 1
238-
macosX64()
239-
macosArm64()
240-
iosArm64()
241-
iosX64()
242-
iosSimulatorArm64()
243-
244-
// Tier 2
245-
linuxX64()
246-
linuxArm64()
247-
watchosSimulatorArm64()
248-
watchosX64()
249-
// watchosArm32() not supported by libs.kotlin.logging
250-
watchosArm64()
251-
tvosSimulatorArm64()
252-
tvosX64()
253-
tvosArm64()
254-
255-
// Tier 3
256-
androidNativeArm32()
257-
androidNativeArm64()
258-
androidNativeX86()
259-
androidNativeX64()
260-
mingwX64()
261-
262241
explicitApi = ExplicitApiMode.Strict
263242

264243
jvmToolchain(21)
@@ -283,6 +262,7 @@ kotlin {
283262
implementation(libs.kotlin.test)
284263
implementation(libs.ktor.server.test.host)
285264
implementation(libs.kotlinx.coroutines.test)
265+
implementation(libs.kotest.assertions.json)
286266
}
287267
}
288268

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
package io.modelcontextprotocol.kotlin.sdk
22

3+
import io.kotest.assertions.json.shouldEqualJson
34
import io.modelcontextprotocol.kotlin.sdk.shared.McpJson
4-
import kotlinx.serialization.json.buildJsonObject
5-
import kotlinx.serialization.json.decodeFromJsonElement
6-
import kotlinx.serialization.json.encodeToJsonElement
7-
import kotlinx.serialization.json.put
5+
import kotlinx.serialization.encodeToString
86
import kotlin.test.Test
97
import kotlin.test.assertEquals
108

119
class AudioContentSerializationTest {
1210

13-
private val audioContentJson = buildJsonObject {
14-
put("data", "base64-encoded-audio-data")
15-
put("mimeType", "audio/wav")
16-
put("type", "audio")
17-
}
11+
private val audioContentJson = """
12+
{
13+
"data": "base64-encoded-audio-data",
14+
"mimeType": "audio/wav",
15+
"type": "audio"
16+
}
17+
""".trimIndent()
1818

1919
private val audioContent = AudioContent(
2020
data = "base64-encoded-audio-data",
@@ -23,17 +23,12 @@ class AudioContentSerializationTest {
2323

2424
@Test
2525
fun `should serialize audio content`() {
26-
val actual = McpJson.encodeToJsonElement(audioContent)
27-
assertEquals(
28-
audioContentJson,
29-
actual,
30-
"Expected $actual to be equal to $audioContentJson"
31-
)
26+
McpJson.encodeToString(audioContent) shouldEqualJson audioContentJson
3227
}
3328

3429
@Test
3530
fun `should deserialize audio content`() {
36-
val content = McpJson.decodeFromJsonElement<AudioContent>(audioContentJson)
31+
val content = McpJson.decodeFromString<AudioContent>(audioContentJson)
3732
assertEquals(expected = audioContent, actual = content)
3833
}
3934
}
Lines changed: 39 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,51 @@
11
package io.modelcontextprotocol.kotlin.sdk
22

3+
import io.kotest.assertions.json.shouldEqualJson
34
import io.modelcontextprotocol.kotlin.sdk.shared.McpJson
45
import kotlinx.serialization.json.Json
5-
import kotlinx.serialization.json.JsonArray
66
import kotlinx.serialization.json.JsonPrimitive
77
import kotlinx.serialization.json.buildJsonObject
8-
import kotlinx.serialization.json.decodeFromJsonElement
9-
import kotlinx.serialization.json.encodeToJsonElement
108
import kotlin.test.Test
119
import kotlin.test.assertEquals
1210

1311
class ToolSerializationTest {
1412

1513
// see https://docs.anthropic.com/en/docs/build-with-claude/tool-use
16-
private val getWeatherToolJson = buildJsonObject {
17-
put("name", JsonPrimitive("get_weather"))
18-
put("description", JsonPrimitive("Get the current weather in a given location"))
19-
put("inputSchema", buildJsonObject {
20-
put("properties", buildJsonObject {
21-
put("location", buildJsonObject {
22-
put("type", JsonPrimitive("string"))
23-
put("description", JsonPrimitive("The city and state, e.g. San Francisco, CA"))
24-
})
25-
})
26-
put("required", JsonArray(listOf(JsonPrimitive("location"))))
27-
put("type", JsonPrimitive("object"))
28-
})
29-
put("outputSchema", buildJsonObject {
30-
put("type", JsonPrimitive("object"))
31-
put("properties", buildJsonObject {
32-
put("temperature", buildJsonObject {
33-
put("type", JsonPrimitive("number"))
34-
put("description", JsonPrimitive("Temperature in celsius"))
35-
})
36-
put("conditions", buildJsonObject {
37-
put("type", JsonPrimitive("string"))
38-
put("description", JsonPrimitive("Weather conditions description"))
39-
})
40-
put("humidity", buildJsonObject {
41-
put("type", JsonPrimitive("number"))
42-
put("description", JsonPrimitive("Humidity percentage"))
43-
})
44-
})
45-
put(
46-
"required",
47-
JsonArray(listOf(JsonPrimitive("temperature"), JsonPrimitive("conditions"), JsonPrimitive("humidity")))
48-
)
49-
})
50-
}
14+
/* language=json */
15+
private val getWeatherToolJson = """
16+
{
17+
"name": "get_weather",
18+
"description": "Get the current weather in a given location",
19+
"inputSchema": {
20+
"type": "object",
21+
"properties": {
22+
"location": {
23+
"type": "string",
24+
"description": "The city and state, e.g. San Francisco, CA"
25+
}
26+
},
27+
"required": ["location"]
28+
},
29+
"outputSchema": {
30+
"type": "object",
31+
"properties": {
32+
"temperature": {
33+
"type": "number",
34+
"description": "Temperature in celsius"
35+
},
36+
"conditions": {
37+
"type": "string",
38+
"description": "Weather conditions description"
39+
},
40+
"humidity": {
41+
"type": "number",
42+
"description": "Humidity percentage"
43+
}
44+
},
45+
"required": ["temperature", "conditions", "humidity"]
46+
}
47+
}
48+
""".trimIndent()
5149

5250
val getWeatherTool = Tool(
5351
name = "get_weather",
@@ -83,18 +81,12 @@ class ToolSerializationTest {
8381

8482
@Test
8583
fun `should serialize get_weather tool`() {
86-
val actual = McpJson.encodeToJsonElement(getWeatherTool)
87-
88-
assertEquals(
89-
getWeatherToolJson,
90-
actual,
91-
"Expected $actual to be equal to $getWeatherToolJson"
92-
)
84+
McpJson.encodeToString(getWeatherTool) shouldEqualJson getWeatherToolJson
9385
}
9486

9587
@Test
9688
fun `should deserialize get_weather tool`() {
97-
val tool = McpJson.decodeFromJsonElement<Tool>(getWeatherToolJson)
89+
val tool = McpJson.decodeFromString<Tool>(getWeatherToolJson)
9890
assertEquals(expected = getWeatherTool, actual = tool)
9991
}
10092

@@ -103,11 +95,6 @@ class ToolSerializationTest {
10395
val json = Json(from = McpJson) {
10496
encodeDefaults = false
10597
}
106-
val actual = json.encodeToJsonElement(getWeatherTool)
107-
assertEquals(
108-
getWeatherToolJson,
109-
actual,
110-
"Expected $actual to be equal to $getWeatherToolJson"
111-
)
98+
json.encodeToString(getWeatherTool) shouldEqualJson getWeatherToolJson
11299
}
113100
}

src/commonTest/kotlin/io/modelcontextprotocol/kotlin/sdk/shared/ReadBufferTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import io.ktor.utils.io.charsets.Charsets
44
import io.ktor.utils.io.core.toByteArray
55
import io.modelcontextprotocol.kotlin.sdk.JSONRPCMessage
66
import io.modelcontextprotocol.kotlin.sdk.JSONRPCNotification
7+
import kotlinx.serialization.encodeToString
78
import kotlinx.serialization.json.Json
89
import kotlin.test.Test
910
import kotlin.test.assertEquals

0 commit comments

Comments
 (0)