Skip to content

Commit 77d8181

Browse files
committed
✅ Add tests for mimeTypes
1 parent 1c9ab24 commit 77d8181

File tree

7 files changed

+119
-4
lines changed

7 files changed

+119
-4
lines changed

filekit-core/build.gradle.kts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,12 @@ kotlin {
8787
implementation(libs.androidx.exifinterface)
8888
}
8989
}
90-
androidUnitTest.get().dependsOn(nonWebTest)
90+
androidUnitTest {
91+
dependsOn(nonWebTest)
92+
dependencies {
93+
implementation(libs.test.android.robolectric)
94+
}
95+
}
9196
jvmMain.get().dependsOn(jvmAndNativeMain)
9297
jvmTest.get().dependsOn(nonWebTest)
9398
nativeMain.get().dependsOn(jvmAndNativeMain)
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package io.github.vinceglb.filekit
2+
3+
import android.net.Uri
4+
import kotlinx.serialization.json.Json
5+
import org.junit.runner.RunWith
6+
import org.robolectric.RobolectricTestRunner
7+
import org.robolectric.annotation.Config
8+
import kotlin.test.Test
9+
import kotlin.test.assertEquals
10+
import kotlin.test.assertIs
11+
12+
@RunWith(RobolectricTestRunner::class)
13+
@Config(sdk = [36])
14+
class PlatformFileAndroidSerializationTest {
15+
private val json = Json { encodeDefaults = true }
16+
17+
@Test
18+
fun serializeAndDeserializeUriBackedPlatformFile() {
19+
val uri = Uri.parse("content://example.provider/document/12345")
20+
val platformFile = PlatformFile(uri)
21+
22+
val encoded = json.encodeToString(platformFile)
23+
val decoded = json.decodeFromString<PlatformFile>(encoded)
24+
25+
assertEquals(platformFile.path, decoded.path)
26+
assertEquals(uri.toString(), decoded.toString())
27+
assertIs<AndroidFile.UriWrapper>(value = decoded.androidFile)
28+
}
29+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package io.github.vinceglb.filekit
2+
3+
import io.github.vinceglb.filekit.mimeType.MimeType
4+
import org.junit.runner.RunWith
5+
import org.robolectric.RobolectricTestRunner
6+
import org.robolectric.annotation.Config
7+
import kotlin.test.Test
8+
import kotlin.test.assertEquals
9+
10+
@RunWith(RobolectricTestRunner::class)
11+
@Config(sdk = [36])
12+
class PlatformFileAndroidTest {
13+
private val resourceDirectory = FileKit.projectDir / "src/nonWebTest/resources"
14+
private val textFile = resourceDirectory / "hello.txt"
15+
private val imageFile = resourceDirectory / "compose-logo.png"
16+
private val emptyFile = resourceDirectory / "empty-file"
17+
private val notExistingFile = resourceDirectory / "not-existing-file.pdf"
18+
19+
@Test
20+
fun testPlatformMimeType() {
21+
assertEquals(
22+
expected = MimeType.parse("text/plain"),
23+
actual = textFile.mimeType()
24+
)
25+
assertEquals(
26+
expected = MimeType.parse("image/png"),
27+
actual = imageFile.mimeType()
28+
)
29+
assertEquals(
30+
expected = null,
31+
actual = emptyFile.mimeType()
32+
)
33+
assertEquals(
34+
expected = MimeType.parse("application/pdf"),
35+
actual = notExistingFile.mimeType()
36+
)
37+
assertEquals(
38+
expected = null,
39+
actual = resourceDirectory.mimeType()
40+
)
41+
}
42+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package io.github.vinceglb.filekit
2+
3+
import io.github.vinceglb.filekit.mimeType.MimeType
4+
import kotlinx.io.files.Path
5+
import kotlin.test.Test
6+
import kotlin.test.assertEquals
7+
8+
class PlatformFileJvmTest {
9+
private val resourceDirectory = PlatformFile(Path("src/nonWebTest/resources"))
10+
private val textFile = PlatformFile(resourceDirectory, "hello.txt")
11+
private val imageFile = PlatformFile(resourceDirectory, "compose-logo.png")
12+
private val emptyFile = PlatformFile(resourceDirectory, "empty-file")
13+
private val notExistingFile = PlatformFile(resourceDirectory, "not-existing-file.pdf")
14+
15+
@Test
16+
fun testPlatformMimeType() {
17+
assertEquals(
18+
expected = MimeType.parse("text/plain"),
19+
actual = textFile.mimeType()
20+
)
21+
assertEquals(
22+
expected = MimeType.parse("image/png"),
23+
actual = imageFile.mimeType()
24+
)
25+
assertEquals(
26+
expected = null,
27+
actual = emptyFile.mimeType()
28+
)
29+
assertEquals(
30+
expected = MimeType.parse("application/pdf"),
31+
actual = notExistingFile.mimeType()
32+
)
33+
assertEquals(
34+
expected = null,
35+
actual = resourceDirectory.mimeType()
36+
)
37+
}
38+
}

filekit-core/src/wasmJsMain/kotlin/io/github/vinceglb/filekit/FileKit.wasmJs.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import org.w3c.files.File
1010

1111
public actual object FileKit
1212

13+
@OptIn(ExperimentalWasmJsInterop::class)
1314
public actual suspend fun FileKit.download(
1415
bytes: ByteArray,
1516
fileName: String,

filekit-core/src/wasmJsMain/kotlin/io/github/vinceglb/filekit/utils/ByteArrayExt.wasm.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
package io.github.vinceglb.filekit.utils
22

33
import org.khronos.webgl.toInt8Array
4-
import kotlin.js.JsAny
5-
import kotlin.js.JsArray
6-
import kotlin.js.set
74

5+
@OptIn(ExperimentalWasmJsInterop::class)
86
public fun ByteArray.toJsArray(): JsArray<JsAny?> {
97
// Create a JS array
108
val jsArray = JsArray<JsAny?>()

gradle/libs.versions.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ kotlinx-coroutines = "1.10.2"
2222
kotlinx-datetime = "0.7.1"
2323
kotlinx-io = "0.8.0"
2424
material-icons-core = "1.7.3"
25+
test-android-robolectric = "4.16"
2526
vanniktech-mavenPublish = "0.34.0"
2627

2728
[libraries]
@@ -50,6 +51,7 @@ kotlinx-io = { module = "org.jetbrains.kotlinx:kotlinx-io-core", version.ref = "
5051
kotlinx-serialization-core = { module = "org.jetbrains.kotlinx:kotlinx-serialization-core", version.ref = "kotlinx-serialization" }
5152
kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinx-serialization" }
5253
material-icons-core = { module = "org.jetbrains.compose.material:material-icons-core", version.ref = "material-icons-core" }
54+
test-android-robolectric = { module = "org.robolectric:robolectric", version.ref = "test-android-robolectric" }
5355

5456
[plugins]
5557
androidApplication = { id = "com.android.application", version.ref = "agp" }

0 commit comments

Comments
 (0)