From 7a5f32cbdf19b5ee60212e262cf1e60d9b80b3e0 Mon Sep 17 00:00:00 2001 From: Yamada_Ika <73375669+Yamada-Ika@users.noreply.github.com> Date: Sun, 25 Aug 2024 20:08:20 +0900 Subject: [PATCH 1/8] introduce sourceSets --- core/testing/build.gradle.kts | 73 +++++++++++++++++++---------------- 1 file changed, 40 insertions(+), 33 deletions(-) diff --git a/core/testing/build.gradle.kts b/core/testing/build.gradle.kts index a1a851932..9129cc00f 100644 --- a/core/testing/build.gradle.kts +++ b/core/testing/build.gradle.kts @@ -1,40 +1,47 @@ plugins { - id("droidkaigi.primitive.android") - id("droidkaigi.primitive.android.kotlin") - id("droidkaigi.primitive.android.compose") - id("droidkaigi.primitive.android.hilt") + id("droidkaigi.primitive.kmp") + id("droidkaigi.primitive.kmp.android") + id("droidkaigi.primitive.kmp.android.hilt") + id("droidkaigi.primitive.kmp.compose") id("droidkaigi.primitive.detekt") } android.namespace = "io.github.droidkaigi.confsched.core.testing" -dependencies { - implementation(projects.core.model) - implementation(projects.core.designsystem) - implementation(projects.core.data) - implementation(projects.core.droidkaigiui) - implementation(projects.feature.main) - implementation(projects.feature.sessions) - implementation(projects.feature.profilecard) - implementation(projects.feature.about) - implementation(projects.feature.staff) - implementation(projects.feature.sponsors) - implementation(projects.feature.settings) - implementation(projects.feature.favorites) - implementation(projects.feature.eventmap) - implementation(projects.feature.contributors) - implementation(libs.daggerHiltAndroidTesting) - implementation(libs.roborazzi) - implementation(libs.kermit) - implementation(libs.coilTest) - api(projects.core.testingManifest) - api(libs.composeNavigation) - api(libs.roborazziRule) - api(libs.roborazziCompose) - api(libs.robolectric) - api(libs.composeUiTestJunit4) - implementation(libs.composeMaterialWindowSize) - implementation(libs.composablePreviewScanner) - implementation(libs.composablePreviewScannerJvm) - implementation(libs.roborazziPreviewScannerSupport) +kotlin { + sourceSets { + androidMain { + dependencies { + implementation(projects.core.model) + implementation(projects.core.designsystem) + implementation(projects.core.data) + implementation(projects.core.droidkaigiui) + implementation(projects.feature.main) + implementation(projects.feature.sessions) + implementation(projects.feature.profilecard) + implementation(projects.feature.about) + implementation(projects.feature.staff) + implementation(projects.feature.sponsors) + implementation(projects.feature.settings) + implementation(projects.feature.favorites) + implementation(projects.feature.eventmap) + implementation(projects.feature.contributors) + implementation(libs.daggerHiltAndroidTesting) + implementation(libs.roborazzi) + implementation(libs.kermit) + implementation(libs.coilTest) + api(projects.core.testingManifest) + api(libs.composeNavigation) + api(libs.roborazziRule) + api(libs.roborazziCompose) + api(libs.robolectric) + api(libs.composeUiTestJunit4) + implementation(libs.composeMaterialWindowSize) + implementation(libs.composablePreviewScanner) + implementation(libs.composablePreviewScannerJvm) + implementation(libs.roborazziPreviewScannerSupport) + } + + } + } } From 808eb1f23d334bc881323a9dc28534eabfbdff4a Mon Sep 17 00:00:00 2001 From: Yamada_Ika <73375669+Yamada-Ika@users.noreply.github.com> Date: Sun, 25 Aug 2024 20:52:39 +0900 Subject: [PATCH 2/8] add test utility function for reading resource file --- core/testing/build.gradle.kts | 13 +++++++++++++ .../confsched/testing/utils/ReadResourceFile.kt | 3 +++ .../testing/utils/ReadResourceFile.ios.kt | 16 ++++++++++++++++ .../testing/utils/ReadResourceFile.android.kt | 12 ++++++++++++ 4 files changed, 44 insertions(+) create mode 100644 core/testing/src/commonMain/kotlin/io/github/droidkaigi/confsched/testing/utils/ReadResourceFile.kt create mode 100644 core/testing/src/iosMain/kotlin/io/github/droidkaigi/confsched/testing/utils/ReadResourceFile.ios.kt create mode 100644 core/testing/src/main/java/io/github/droidkaigi/confsched/testing/utils/ReadResourceFile.android.kt diff --git a/core/testing/build.gradle.kts b/core/testing/build.gradle.kts index 9129cc00f..a304e0588 100644 --- a/core/testing/build.gradle.kts +++ b/core/testing/build.gradle.kts @@ -3,6 +3,7 @@ plugins { id("droidkaigi.primitive.kmp.android") id("droidkaigi.primitive.kmp.android.hilt") id("droidkaigi.primitive.kmp.compose") + id("droidkaigi.primitive.kmp.ios") id("droidkaigi.primitive.detekt") } @@ -41,7 +42,19 @@ kotlin { implementation(libs.composablePreviewScannerJvm) implementation(libs.roborazziPreviewScannerSupport) } + } + + commonMain { + dependencies { + implementation(libs.okIo) + } + } + iosMain { + dependencies { + implementation(libs.okIo) + } } + } } diff --git a/core/testing/src/commonMain/kotlin/io/github/droidkaigi/confsched/testing/utils/ReadResourceFile.kt b/core/testing/src/commonMain/kotlin/io/github/droidkaigi/confsched/testing/utils/ReadResourceFile.kt new file mode 100644 index 000000000..ecf23cdcb --- /dev/null +++ b/core/testing/src/commonMain/kotlin/io/github/droidkaigi/confsched/testing/utils/ReadResourceFile.kt @@ -0,0 +1,3 @@ +package io.github.droidkaigi.confsched.testing.utils + +expect inline fun readResourceFile(filePath: okio.Path, block: okio.BufferedSource.() -> T): T diff --git a/core/testing/src/iosMain/kotlin/io/github/droidkaigi/confsched/testing/utils/ReadResourceFile.ios.kt b/core/testing/src/iosMain/kotlin/io/github/droidkaigi/confsched/testing/utils/ReadResourceFile.ios.kt new file mode 100644 index 000000000..84f83c7d8 --- /dev/null +++ b/core/testing/src/iosMain/kotlin/io/github/droidkaigi/confsched/testing/utils/ReadResourceFile.ios.kt @@ -0,0 +1,16 @@ +package io.github.droidkaigi.confsched.testing.utils + +import okio.BufferedSource +import okio.FileSystem +import okio.Path +import okio.Path.Companion.toPath +import platform.Foundation.NSBundle + +actual inline fun readResourceFile(filePath: Path, block: BufferedSource.() -> T): T { + return FileSystem.SYSTEM.read( + NSBundle.mainBundle.bundlePath.toPath().parent!!.parent!!.parent!!.parent!! + .div("src").div("commonTest").div("resources").div(filePath) + ) { + block() + } +} diff --git a/core/testing/src/main/java/io/github/droidkaigi/confsched/testing/utils/ReadResourceFile.android.kt b/core/testing/src/main/java/io/github/droidkaigi/confsched/testing/utils/ReadResourceFile.android.kt new file mode 100644 index 000000000..00eef5cc6 --- /dev/null +++ b/core/testing/src/main/java/io/github/droidkaigi/confsched/testing/utils/ReadResourceFile.android.kt @@ -0,0 +1,12 @@ +package io.github.droidkaigi.confsched.testing.utils + +import okio.FileSystem +import okio.Path.Companion.toPath + +actual inline fun readResourceFile(filePath: okio.Path, block: okio.BufferedSource.() -> T): T { + return FileSystem.SYSTEM.read( + "src".toPath().div("commonTest").div("resources").div(filePath) + ) { + block() + } +} From c829f31ca8cff5d354e266aefccea100d1639284 Mon Sep 17 00:00:00 2001 From: Yamada_Ika <73375669+Yamada-Ika@users.noreply.github.com> Date: Sun, 25 Aug 2024 20:54:50 +0900 Subject: [PATCH 3/8] enable passing tests when targeting iOS --- core/data/build.gradle.kts | 1 + .../data/profilecard/ProfileCardJsonTest.kt | 20 +++++++++---------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/core/data/build.gradle.kts b/core/data/build.gradle.kts index 214907121..a033c6269 100644 --- a/core/data/build.gradle.kts +++ b/core/data/build.gradle.kts @@ -53,6 +53,7 @@ kotlin { commonTest { dependencies { implementation(projects.core.model) + implementation(projects.core.testing) implementation(libs.kotlinTest) implementation(libs.okIo) implementation(libs.ktorKotlinxSerialization) diff --git a/core/data/src/commonTest/kotlin/io/github/droidkaigi/confsched/data/profilecard/ProfileCardJsonTest.kt b/core/data/src/commonTest/kotlin/io/github/droidkaigi/confsched/data/profilecard/ProfileCardJsonTest.kt index acde3bee6..3d69df9f9 100644 --- a/core/data/src/commonTest/kotlin/io/github/droidkaigi/confsched/data/profilecard/ProfileCardJsonTest.kt +++ b/core/data/src/commonTest/kotlin/io/github/droidkaigi/confsched/data/profilecard/ProfileCardJsonTest.kt @@ -2,12 +2,11 @@ package io.github.droidkaigi.confsched.data.profilecard import io.github.droidkaigi.confsched.model.ProfileCard import io.github.droidkaigi.confsched.model.ProfileCardType +import io.github.droidkaigi.confsched.testing.utils.readResourceFile import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json -import okio.FileSystem import okio.Path.Companion.toPath -import okio.SYSTEM import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertFails @@ -77,10 +76,9 @@ class ProfileCardJsonTest { @Test fun `throw exception when both theme and card_type are not exist`() { - val jsonString = - FileSystem.SYSTEM.read("src/commonTest/resources/profilecard/invalid.json".toPath()) { - readUtf8() - } + val jsonString = readResourceFile("profilecard/invalid.json".toPath()) { + readUtf8() + } assertFails { Json.decodeFromString(jsonString).toModel() @@ -88,7 +86,7 @@ class ProfileCardJsonTest { } private fun readJsonString(version: Int): String { - return FileSystem.SYSTEM.read("src/commonTest/resources/profilecard/v$version.json".toPath()) { + return readResourceFile("profilecard/v$version.json".toPath()) { readUtf8() } } @@ -102,10 +100,10 @@ class ProfileCardJsonTest { } private fun assertSerializedJson(actual: String) { - val expected = - FileSystem.SYSTEM.read("src/commonTest/resources/profilecard/v2.json".toPath()) { - readUtf8() - } + val expected = readResourceFile("profilecard/v2.json".toPath()) { + readUtf8() + } + assertEquals(expected.trim(), actual.trim()) } From 7f6a43ce42a80a2383169abbd4a3b10a3730dea5 Mon Sep 17 00:00:00 2001 From: Yamada_Ika <73375669+Yamada-Ika@users.noreply.github.com> Date: Mon, 26 Aug 2024 22:24:18 +0900 Subject: [PATCH 4/8] format --- .../confsched/data/profilecard/ProfileCardJsonTest.kt | 1 - core/testing/build.gradle.kts | 5 ++--- .../confsched/testing/utils/ReadResourceFile.ios.kt | 2 +- .../confsched/testing/utils/ReadResourceFile.android.kt | 2 +- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/core/data/src/commonTest/kotlin/io/github/droidkaigi/confsched/data/profilecard/ProfileCardJsonTest.kt b/core/data/src/commonTest/kotlin/io/github/droidkaigi/confsched/data/profilecard/ProfileCardJsonTest.kt index 3d69df9f9..8dd654670 100644 --- a/core/data/src/commonTest/kotlin/io/github/droidkaigi/confsched/data/profilecard/ProfileCardJsonTest.kt +++ b/core/data/src/commonTest/kotlin/io/github/droidkaigi/confsched/data/profilecard/ProfileCardJsonTest.kt @@ -104,7 +104,6 @@ class ProfileCardJsonTest { readUtf8() } - assertEquals(expected.trim(), actual.trim()) } } diff --git a/core/testing/build.gradle.kts b/core/testing/build.gradle.kts index a304e0588..b343d5670 100644 --- a/core/testing/build.gradle.kts +++ b/core/testing/build.gradle.kts @@ -44,17 +44,16 @@ kotlin { } } - commonMain { + commonMain { dependencies { implementation(libs.okIo) } } - iosMain { + iosMain { dependencies { implementation(libs.okIo) } } - } } diff --git a/core/testing/src/iosMain/kotlin/io/github/droidkaigi/confsched/testing/utils/ReadResourceFile.ios.kt b/core/testing/src/iosMain/kotlin/io/github/droidkaigi/confsched/testing/utils/ReadResourceFile.ios.kt index 84f83c7d8..5a88909d4 100644 --- a/core/testing/src/iosMain/kotlin/io/github/droidkaigi/confsched/testing/utils/ReadResourceFile.ios.kt +++ b/core/testing/src/iosMain/kotlin/io/github/droidkaigi/confsched/testing/utils/ReadResourceFile.ios.kt @@ -9,7 +9,7 @@ import platform.Foundation.NSBundle actual inline fun readResourceFile(filePath: Path, block: BufferedSource.() -> T): T { return FileSystem.SYSTEM.read( NSBundle.mainBundle.bundlePath.toPath().parent!!.parent!!.parent!!.parent!! - .div("src").div("commonTest").div("resources").div(filePath) + .div("src").div("commonTest").div("resources").div(filePath), ) { block() } diff --git a/core/testing/src/main/java/io/github/droidkaigi/confsched/testing/utils/ReadResourceFile.android.kt b/core/testing/src/main/java/io/github/droidkaigi/confsched/testing/utils/ReadResourceFile.android.kt index 00eef5cc6..d97f22ff3 100644 --- a/core/testing/src/main/java/io/github/droidkaigi/confsched/testing/utils/ReadResourceFile.android.kt +++ b/core/testing/src/main/java/io/github/droidkaigi/confsched/testing/utils/ReadResourceFile.android.kt @@ -5,7 +5,7 @@ import okio.Path.Companion.toPath actual inline fun readResourceFile(filePath: okio.Path, block: okio.BufferedSource.() -> T): T { return FileSystem.SYSTEM.read( - "src".toPath().div("commonTest").div("resources").div(filePath) + "src".toPath().div("commonTest").div("resources").div(filePath), ) { block() } From 4aad875d12a1cc12b6c1baaf6ece1615a8a17ec5 Mon Sep 17 00:00:00 2001 From: Yamada_Ika <73375669+Yamada-Ika@users.noreply.github.com> Date: Sun, 1 Sep 2024 17:44:52 +0900 Subject: [PATCH 5/8] run test for iOS on CI --- .github/workflows/unit-test.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 96d0cf513..8b585e502 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -35,6 +35,12 @@ jobs: - run: ./gradlew testDevDebugUnitTest testDebugUnitTest --stacktrace + - run: | + ./gradlew \ + :core:data:iosSimulatorArm64Test \ + :core:model:iosSimulatorArm64Test \ + --stacktrace + # Saving cost # - run: ./gradlew koverHtmlReportDevDebug --stacktrace From 42e30e690451b01e36b7811e7c5ea98973b1579f Mon Sep 17 00:00:00 2001 From: Yamada_Ika <73375669+Yamada-Ika@users.noreply.github.com> Date: Sun, 1 Sep 2024 19:49:17 +0900 Subject: [PATCH 6/8] change machine type --- .github/workflows/screenshot-comparison.yml | 2 +- .github/workflows/unit-test.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/screenshot-comparison.yml b/.github/workflows/screenshot-comparison.yml index ba7a21d60..9c930c233 100644 --- a/.github/workflows/screenshot-comparison.yml +++ b/.github/workflows/screenshot-comparison.yml @@ -13,7 +13,7 @@ permissions: { } jobs: screenshot-comparison: - runs-on: ubuntu-latest + runs-on: macos-latest timeout-minutes: 60 permissions: diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 8b585e502..390ffbfe1 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -14,7 +14,7 @@ permissions: { } jobs: unit-test: - runs-on: ubuntu-latest + runs-on: macos-latest timeout-minutes: 60 permissions: From 1b0e1aedfa7114ef281054b7271ea1416f51459b Mon Sep 17 00:00:00 2001 From: Yamada_Ika <73375669+Yamada-Ika@users.noreply.github.com> Date: Sun, 1 Sep 2024 19:50:10 +0900 Subject: [PATCH 7/8] merge test command --- .github/workflows/unit-test.yml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 390ffbfe1..12002e099 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -33,13 +33,12 @@ jobs: name: event-payload path: ${{ github.event_path }} - - run: ./gradlew testDevDebugUnitTest testDebugUnitTest --stacktrace - - - run: | - ./gradlew \ - :core:data:iosSimulatorArm64Test \ - :core:model:iosSimulatorArm64Test \ - --stacktrace + - run: ./gradlew \ + testDevDebugUnitTest \ + testDebugUnitTest \ + :core:data:iosSimulatorArm64Test \ + :core:model:iosSimulatorArm64Test \ + --stacktrace # Saving cost # - run: ./gradlew koverHtmlReportDevDebug --stacktrace From b431cc04f8c6a1bb1338b0b308db38eff0882670 Mon Sep 17 00:00:00 2001 From: Yamada_Ika <73375669+Yamada-Ika@users.noreply.github.com> Date: Sun, 1 Sep 2024 20:03:48 +0900 Subject: [PATCH 8/8] fix indent --- .github/workflows/unit-test.yml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 12002e099..a4b3d4cba 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -33,12 +33,13 @@ jobs: name: event-payload path: ${{ github.event_path }} - - run: ./gradlew \ - testDevDebugUnitTest \ - testDebugUnitTest \ - :core:data:iosSimulatorArm64Test \ - :core:model:iosSimulatorArm64Test \ - --stacktrace + - run: | + ./gradlew \ + testDevDebugUnitTest \ + testDebugUnitTest \ + :core:data:iosSimulatorArm64Test \ + :core:model:iosSimulatorArm64Test \ + --stacktrace # Saving cost # - run: ./gradlew koverHtmlReportDevDebug --stacktrace