From dbecb316534be9e2d902e71f431e96e4973bbb2e Mon Sep 17 00:00:00 2001 From: Sargun Vohra Date: Thu, 5 Jun 2025 21:52:37 -0700 Subject: [PATCH] use multiplatform filesystem api --- build.gradle.kts | 1 + gradle/libs.versions.toml | 4 +++- .../kotlin/dev/sargunv/pokekotlin/test/LiveTest.kt | 2 +- .../dev/sargunv/pokekotlin/test/MockServer.kt | 14 ++++++-------- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index c787923a..56640e4b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -43,6 +43,7 @@ kotlin { implementation(kotlin("test")) implementation(kotlin("reflect")) implementation(libs.kotlinx.coroutines.test) + implementation(libs.kotlinx.io) implementation(libs.ktor.client.mock) } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 371bdb51..b0092092 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,8 @@ [versions] # Regular libraries: keep as up to date as possible. -kotlinx-serialization = "1.8.1" kotlinx-coroutines-test = "1.10.2" +kotlinx-io = "0.7.0" +kotlinx-serialization = "1.8.1" ktor = "3.1.3" # Regular tools: keep as up to date as possible @@ -17,6 +18,7 @@ tool-prettier = "3.5.3" [libraries] kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlinx-coroutines-test" } +kotlinx-io = { module = "org.jetbrains.kotlinx:kotlinx-io-core", version.ref = "kotlinx-io" } kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinx-serialization" } ktorfit = { module = "de.jensklingenberg.ktorfit:ktorfit-lib", version.ref = "gradle-ktorfit" } ktor-client-mock = { module = "io.ktor:ktor-client-mock", version.ref = "ktor" } diff --git a/src/jvmTest/kotlin/dev/sargunv/pokekotlin/test/LiveTest.kt b/src/jvmTest/kotlin/dev/sargunv/pokekotlin/test/LiveTest.kt index 3a78a89f..10584f74 100644 --- a/src/jvmTest/kotlin/dev/sargunv/pokekotlin/test/LiveTest.kt +++ b/src/jvmTest/kotlin/dev/sargunv/pokekotlin/test/LiveTest.kt @@ -1,9 +1,9 @@ package dev.sargunv.pokekotlin.test import dev.sargunv.pokekotlin.client.PokeApiClient +import kotlin.test.Test import kotlin.test.assertEquals import kotlinx.coroutines.test.runTest -import org.junit.Test class LiveTest { diff --git a/src/jvmTest/kotlin/dev/sargunv/pokekotlin/test/MockServer.kt b/src/jvmTest/kotlin/dev/sargunv/pokekotlin/test/MockServer.kt index e2ca52a0..4bcb5cc8 100644 --- a/src/jvmTest/kotlin/dev/sargunv/pokekotlin/test/MockServer.kt +++ b/src/jvmTest/kotlin/dev/sargunv/pokekotlin/test/MockServer.kt @@ -10,9 +10,9 @@ import io.ktor.client.request.HttpRequestData import io.ktor.client.request.HttpResponseData import io.ktor.http.HttpStatusCode import io.ktor.http.headersOf -import java.io.File -import java.io.FileReader -import java.nio.file.Paths +import kotlin.io.path.Path +import kotlin.io.path.exists +import kotlin.io.path.readText import kotlinx.serialization.json.JsonObject import kotlinx.serialization.json.JsonPrimitive import kotlinx.serialization.json.buildJsonArray @@ -23,8 +23,6 @@ object MockServer { val mockEngine = MockEngine { request -> dispatch(request) } val client = PokeApiClient(engine = mockEngine) - private val sampleArchivePath = Paths.get(MockServer::class.java.getResource("/data")!!.toURI()) - private fun limit(text: String, limit: Int): String { val fullObj = PokeApiJson.decodeFromString(text) val fullResults = fullObj["results"]!!.jsonArray @@ -38,11 +36,11 @@ object MockServer { } private fun MockRequestHandleScope.dispatch(request: HttpRequestData): HttpResponseData { - val basePath = request.url.encodedPath.dropLastWhile { it != '/' } + val basePath = request.url.encodedPath val limit = request.url.parameters["limit"]?.toInt() - val file = File(sampleArchivePath.toString() + basePath + "index.json") + val file = Path("src/jvmTest/resources/data" + basePath + "index.json") return if (file.exists()) { - val text = FileReader(file).use { it.readText() } + val text = file.readText() val content = if (limit != null) limit(text, limit) else text respond(content = content, headers = headersOf("content-type", "application/json")) } else respondError(HttpStatusCode.NotFound)