From dd29e9e7062adf2089400914a07fbc68fa2bb83a Mon Sep 17 00:00:00 2001 From: lihenggui Date: Fri, 15 Nov 2024 13:19:59 -0800 Subject: [PATCH] Migrate sync-test to multiplatform library and remove Android conventions --- README.md | 4 +- build-logic/convention/build.gradle.kts | 4 -- ...droidApplicationFlavorsConventionPlugin.kt | 31 --------- .../AndroidLibraryComposeConventionPlugin.kt | 35 ----------- .../kotlin/AndroidLibraryConventionPlugin.kt | 63 ------------------- core/screenshot-testing/build.gradle.kts | 5 -- gradle/libs.versions.toml | 3 - sync/sync-test/build.gradle.kts | 7 +-- .../core/sync/test/NeverSyncingSyncManager.kt | 3 +- .../core/sync/test/TestSyncModule.kt | 24 ++----- sync/sync-test/src/main/AndroidManifest.xml | 17 ----- 11 files changed, 9 insertions(+), 187 deletions(-) delete mode 100644 build-logic/convention/src/main/kotlin/AndroidApplicationFlavorsConventionPlugin.kt delete mode 100644 build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt delete mode 100644 build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt rename sync/sync-test/src/{main => commonMain}/kotlin/com/google/samples/apps/nowinandroid/core/sync/test/NeverSyncingSyncManager.kt (89%) rename sync/sync-test/src/{main => commonMain}/kotlin/com/google/samples/apps/nowinandroid/core/sync/test/TestSyncModule.kt (61%) delete mode 100644 sync/sync-test/src/main/AndroidManifest.xml diff --git a/README.md b/README.md index ba766324f..02143a043 100644 --- a/README.md +++ b/README.md @@ -66,9 +66,9 @@ As Firebase Analytics does not yet support Kotlin Multiplatform, the implementat | :feature:settings | Done | ✅ | ✅️ | ✅ | ❌ | | :feature:topic | Done | ✅ | ✅️ | ✅ | ❌ | | lint | Not started | ❌ | ❌ | ❌ | ❌ | -| :sync:sync-test | Not started | ❌ | ❌ | ❌ | ❌ | +| :sync:sync-test | Done | ✅ | ✅ | ✅ | ❌ | | :sync:work | Not started | No implmentaion | ✅️ | No implmentaion| ❌ | -| ui-test-manifest | Not started | ❌ | ❌ | ❌ | ❌ | +| ui-test-manifest | Removed | ❌ | ❌ | ❌ | ❌ | diff --git a/build-logic/convention/build.gradle.kts b/build-logic/convention/build.gradle.kts index 36556d3da..214abaab4 100644 --- a/build-logic/convention/build.gradle.kts +++ b/build-logic/convention/build.gradle.kts @@ -78,10 +78,6 @@ gradlePlugin { id = "nowinandroid.android.test" implementationClass = "AndroidTestConventionPlugin" } - register("androidFlavors") { - id = "nowinandroid.android.application.flavors" - implementationClass = "AndroidApplicationFlavorsConventionPlugin" - } register("androidLint") { id = "nowinandroid.android.lint" implementationClass = "AndroidLintConventionPlugin" diff --git a/build-logic/convention/src/main/kotlin/AndroidApplicationFlavorsConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidApplicationFlavorsConventionPlugin.kt deleted file mode 100644 index 46b019d7a..000000000 --- a/build-logic/convention/src/main/kotlin/AndroidApplicationFlavorsConventionPlugin.kt +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import com.android.build.api.dsl.ApplicationExtension -import com.google.samples.apps.nowinandroid.configureFlavors -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.kotlin.dsl.configure - -class AndroidApplicationFlavorsConventionPlugin : Plugin { - override fun apply(target: Project) { - with(target) { - extensions.configure { - configureFlavors(this) - } - } - } -} \ No newline at end of file diff --git a/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt deleted file mode 100644 index 19fabf549..000000000 --- a/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import com.android.build.gradle.LibraryExtension -import com.google.samples.apps.nowinandroid.configureAndroidCompose -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.kotlin.dsl.apply -import org.gradle.kotlin.dsl.getByType - -class AndroidLibraryComposeConventionPlugin : Plugin { - override fun apply(target: Project) { - with(target) { - apply(plugin = "com.android.library") - apply(plugin = "org.jetbrains.kotlin.plugin.compose") - - val extension = extensions.getByType() - configureAndroidCompose(extension) - } - } - -} diff --git a/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt deleted file mode 100644 index 71d818c0c..000000000 --- a/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import com.android.build.api.variant.LibraryAndroidComponentsExtension -import com.android.build.gradle.LibraryExtension -import com.google.samples.apps.nowinandroid.configureFlavors -import com.google.samples.apps.nowinandroid.configureGradleManagedDevices -import com.google.samples.apps.nowinandroid.configureKotlinAndroid -import com.google.samples.apps.nowinandroid.configurePrintApksTask -import com.google.samples.apps.nowinandroid.disableUnnecessaryAndroidTests -import com.google.samples.apps.nowinandroid.libs -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.kotlin.dsl.configure -import org.gradle.kotlin.dsl.dependencies -import org.gradle.kotlin.dsl.kotlin - -class AndroidLibraryConventionPlugin : Plugin { - override fun apply(target: Project) { - with(target) { - with(pluginManager) { - apply("com.android.library") - apply("org.jetbrains.kotlin.android") - apply("nowinandroid.android.lint") - } - - extensions.configure { - configureKotlinAndroid(this) - defaultConfig.targetSdk = 34 - defaultConfig.testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - testOptions.animationsDisabled = true - configureFlavors(this) - configureGradleManagedDevices(this) - // The resource prefix is derived from the module name, - // so resources inside ":core:module1" must be prefixed with "core_module1_" - resourcePrefix = path.split("""\W""".toRegex()).drop(1).distinct().joinToString(separator = "_").lowercase() + "_" - } - extensions.configure { - configurePrintApksTask(this) - disableUnnecessaryAndroidTests(target) - } - dependencies { - add("androidTestImplementation", kotlin("test")) - add("testImplementation", kotlin("test")) - - add("implementation", libs.findLibrary("androidx.tracing.ktx").get()) - } - } - } -} diff --git a/core/screenshot-testing/build.gradle.kts b/core/screenshot-testing/build.gradle.kts index ae3995fb6..051902665 100644 --- a/core/screenshot-testing/build.gradle.kts +++ b/core/screenshot-testing/build.gradle.kts @@ -15,11 +15,6 @@ */ plugins { alias(libs.plugins.nowinandroid.kmp.library) - alias(libs.plugins.nowinandroid.android.library.compose) -} - -android { - namespace = "com.google.samples.apps.nowinandroid.core.screenshottesting" } kotlin { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e76ec79f7..5e7a3f914 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -213,10 +213,7 @@ ktrofit = { id = "de.jensklingenberg.ktorfit", version.ref = "ktrofit" } buildkonfig = { id = "com.codingfeline.buildkonfig", version.ref = "buildKonfig" } # Plugins defined by this project -nowinandroid-android-application-flavors = { id = "nowinandroid.android.application.flavors" } nowinandroid-android-application-jacoco = { id = "nowinandroid.android.application.jacoco" } -nowinandroid-android-library = { id = "nowinandroid.android.library" } -nowinandroid-android-library-compose = { id = "nowinandroid.android.library.compose" } nowinandroid-android-library-jacoco = { id = "nowinandroid.android.library.jacoco" } nowinandroid-android-lint = { id = "nowinandroid.android.lint" } nowinandroid-android-test = { id = "nowinandroid.android.test" } diff --git a/sync/sync-test/build.gradle.kts b/sync/sync-test/build.gradle.kts index 299f8bdfb..f9ae4df21 100644 --- a/sync/sync-test/build.gradle.kts +++ b/sync/sync-test/build.gradle.kts @@ -14,11 +14,8 @@ * limitations under the License. */ plugins { - alias(libs.plugins.nowinandroid.android.library) -} - -android { - namespace = "com.google.samples.apps.nowinandroid.core.sync.test" + alias(libs.plugins.nowinandroid.kmp.library) + alias(libs.plugins.nowinandroid.di.koin) } dependencies { diff --git a/sync/sync-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/sync/test/NeverSyncingSyncManager.kt b/sync/sync-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/sync/test/NeverSyncingSyncManager.kt similarity index 89% rename from sync/sync-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/sync/test/NeverSyncingSyncManager.kt rename to sync/sync-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/sync/test/NeverSyncingSyncManager.kt index c13b409e6..790bb74c4 100644 --- a/sync/sync-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/sync/test/NeverSyncingSyncManager.kt +++ b/sync/sync-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/sync/test/NeverSyncingSyncManager.kt @@ -19,9 +19,8 @@ package com.google.samples.apps.nowinandroid.core.sync.test import com.google.samples.apps.nowinandroid.core.data.util.SyncManager import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf -import javax.inject.Inject -internal class NeverSyncingSyncManager @Inject constructor() : SyncManager { +internal class NeverSyncingSyncManager: SyncManager { override val isSyncing: Flow = flowOf(false) override fun requestSync() = Unit } diff --git a/sync/sync-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/sync/test/TestSyncModule.kt b/sync/sync-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/sync/test/TestSyncModule.kt similarity index 61% rename from sync/sync-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/sync/test/TestSyncModule.kt rename to sync/sync-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/sync/test/TestSyncModule.kt index ceca1cb5c..b308094d0 100644 --- a/sync/sync-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/sync/test/TestSyncModule.kt +++ b/sync/sync-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/sync/test/TestSyncModule.kt @@ -17,27 +17,11 @@ package com.google.samples.apps.nowinandroid.core.sync.test import com.google.samples.apps.nowinandroid.core.data.util.SyncManager -import com.google.samples.apps.nowinandroid.sync.di.SyncModule import com.google.samples.apps.nowinandroid.sync.status.StubSyncSubscriber import com.google.samples.apps.nowinandroid.sync.status.SyncSubscriber -import dagger.Binds -import dagger.Module -import dagger.hilt.components.SingletonComponent -import dagger.hilt.testing.TestInstallIn +import org.koin.dsl.module -@Module -@TestInstallIn( - components = [SingletonComponent::class], - replaces = [SyncModule::class], -) -internal interface TestSyncModule { - @Binds - fun bindsSyncStatusMonitor( - syncStatusMonitor: NeverSyncingSyncManager, - ): SyncManager - - @Binds - fun bindsSyncSubscriber( - syncSubscriber: StubSyncSubscriber, - ): SyncSubscriber +val testSyncModule = module { + single { NeverSyncingSyncManager() } + single { StubSyncSubscriber() } } diff --git a/sync/sync-test/src/main/AndroidManifest.xml b/sync/sync-test/src/main/AndroidManifest.xml deleted file mode 100644 index 27a3ea8b0..000000000 --- a/sync/sync-test/src/main/AndroidManifest.xml +++ /dev/null @@ -1,17 +0,0 @@ - - -