From 012a7018bcb62b43de0679ccb8c3e23dbf6e7593 Mon Sep 17 00:00:00 2001 From: Jamie Lynch Date: Mon, 29 Jul 2024 17:53:29 +0100 Subject: [PATCH] build: setup test fake module --- ...e.kts => embrace-prod-defaults.gradle.kts} | 60 +--------------- .../kotlin/embrace-test-defaults.gradle.kts | 72 +++++++++++++++++++ embrace-android-api/build.gradle.kts | 2 +- embrace-android-compose/build.gradle.kts | 2 +- embrace-android-core/build.gradle.kts | 2 +- embrace-android-fcm/build.gradle.kts | 2 +- embrace-android-features/build.gradle.kts | 2 +- embrace-android-okhttp3/build.gradle.kts | 2 +- embrace-android-payload/build.gradle.kts | 2 +- embrace-android-sdk/build.gradle.kts | 3 +- embrace-test-common/build.gradle.kts | 16 +---- embrace-test-common/lint-baseline.xml | 4 ++ .../android/embracesdk/ResourceReader.kt | 6 +- embrace-test-fakes/README.md | 3 + embrace-test-fakes/build.gradle.kts | 11 +++ embrace-test-fakes/lint-baseline.xml | 4 ++ .../android/embracesdk/fakes/FakeClock.kt | 12 ++-- settings.gradle.kts | 3 +- 18 files changed, 118 insertions(+), 90 deletions(-) rename buildSrc/src/main/kotlin/{embrace-defaults.gradle.kts => embrace-prod-defaults.gradle.kts} (73%) create mode 100644 buildSrc/src/main/kotlin/embrace-test-defaults.gradle.kts create mode 100644 embrace-test-common/lint-baseline.xml create mode 100644 embrace-test-fakes/README.md create mode 100644 embrace-test-fakes/build.gradle.kts create mode 100644 embrace-test-fakes/lint-baseline.xml rename {embrace-android-sdk/src/test/java => embrace-test-fakes/src/main/kotlin}/io/embrace/android/embracesdk/fakes/FakeClock.kt (56%) diff --git a/buildSrc/src/main/kotlin/embrace-defaults.gradle.kts b/buildSrc/src/main/kotlin/embrace-prod-defaults.gradle.kts similarity index 73% rename from buildSrc/src/main/kotlin/embrace-defaults.gradle.kts rename to buildSrc/src/main/kotlin/embrace-prod-defaults.gradle.kts index ff4d5b7314..45b06cdf2e 100644 --- a/buildSrc/src/main/kotlin/embrace-defaults.gradle.kts +++ b/buildSrc/src/main/kotlin/embrace-prod-defaults.gradle.kts @@ -1,14 +1,9 @@ import io.embrace.gradle.Versions -import io.gitlab.arturbosch.detekt.Detekt -import io.gitlab.arturbosch.detekt.DetektCreateBaselineTask import org.gradle.api.tasks.testing.logging.TestExceptionFormat -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import java.net.URI plugins { - id("com.android.library") apply false - id("kotlin-android") apply false - id("io.gitlab.arturbosch.detekt") apply false + id("embrace-test-defaults") id("checkstyle") apply false id("binary-compatibility-validator") apply false id("org.jetbrains.kotlinx.kover") apply false @@ -20,10 +15,8 @@ android { useLibrary("android.test.runner") useLibrary("android.test.base") useLibrary("android.test.mock") - compileSdk = Versions.COMPILE_SDK defaultConfig { - minSdk = Versions.MIN_SDK testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" aarMetadata { @@ -31,20 +24,6 @@ android { } } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - lint { - abortOnError = true - warningsAsErrors = true - checkAllWarnings = true - checkReleaseBuilds = false // run on CI instead, speeds up release builds - baseline = project.file("lint-baseline.xml") - disable.addAll(mutableSetOf("GradleDependency", "NewerVersionAvailable")) - } - testOptions { // Calling Android logging methods will throw exceptions if this is false // see: http://tools.android.com/tech-docs/unit-testing-support#TOC-Method-...-not-mocked.- @@ -87,7 +66,6 @@ android { dependencies { implementation("androidx.startup:startup-runtime:1.1.1") implementation("org.jetbrains.kotlin:kotlin-stdlib:${Versions.KOTLIN_EXPOSED}") - add("detektPlugins", "io.gitlab.arturbosch.detekt:detekt-formatting:${Versions.DETEKT}") add("lintChecks", project.project(":embrace-lint")) testImplementation("junit:junit:${Versions.JUNIT}") @@ -116,42 +94,6 @@ project.tasks.register("checkstyle", Checkstyle::class.java).configure { maxWarnings = 0 } -detekt { - buildUponDefaultConfig = true - autoCorrect = true - config.from(project.files("${project.rootDir}/config/detekt/detekt.yml")) // overwrite default behaviour here - baseline = - project.file("${project.projectDir}/config/detekt/baseline.xml") // suppress pre-existing issues -} - -project.tasks.withType(Detekt::class.java).configureEach { - jvmTarget = "1.8" - reports { - html.required.set(true) - xml.required.set(false) - txt.required.set(true) - sarif.required.set(false) - md.required.set(false) - } -} - -project.tasks.withType(DetektCreateBaselineTask::class.java).configureEach { - jvmTarget = "1.8" -} - -project.tasks.withType(JavaCompile::class.java).configureEach { - options.compilerArgs.addAll(listOf("-Xlint:unchecked", "-Xlint:deprecation")) -} - -project.tasks.withType(KotlinCompile::class.java).configureEach { - kotlinOptions { - apiVersion = "1.8" - languageVersion = "1.8" - jvmTarget = JavaVersion.VERSION_1_8.toString() - freeCompilerArgs = freeCompilerArgs + "-Xexplicit-api=strict" - } -} - // https://developer.android.com/studio/publish-library/upload-library publishing { publications { diff --git a/buildSrc/src/main/kotlin/embrace-test-defaults.gradle.kts b/buildSrc/src/main/kotlin/embrace-test-defaults.gradle.kts new file mode 100644 index 0000000000..9ddf88f36a --- /dev/null +++ b/buildSrc/src/main/kotlin/embrace-test-defaults.gradle.kts @@ -0,0 +1,72 @@ +import io.embrace.gradle.Versions +import io.gitlab.arturbosch.detekt.Detekt +import io.gitlab.arturbosch.detekt.DetektCreateBaselineTask +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + id("com.android.library") apply false + id("kotlin-android") apply false + id("io.gitlab.arturbosch.detekt") apply false +} + +android { + compileSdk = Versions.COMPILE_SDK + + defaultConfig { + minSdk = Versions.MIN_SDK + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + lint { + abortOnError = true + warningsAsErrors = true + checkAllWarnings = true + checkReleaseBuilds = false // run on CI instead, speeds up release builds + baseline = project.file("lint-baseline.xml") + disable.addAll(mutableSetOf("GradleDependency", "NewerVersionAvailable")) + } +} + +dependencies { + add("detektPlugins", "io.gitlab.arturbosch.detekt:detekt-formatting:${Versions.DETEKT}") +} + +detekt { + buildUponDefaultConfig = true + autoCorrect = true + config.from(project.files("${project.rootDir}/config/detekt/detekt.yml")) // overwrite default behaviour here + baseline = + project.file("${project.projectDir}/config/detekt/baseline.xml") // suppress pre-existing issues +} + +project.tasks.withType(Detekt::class.java).configureEach { + jvmTarget = "1.8" + reports { + html.required.set(true) + xml.required.set(false) + txt.required.set(true) + sarif.required.set(false) + md.required.set(false) + } +} + +project.tasks.withType(DetektCreateBaselineTask::class.java).configureEach { + jvmTarget = "1.8" +} + +project.tasks.withType(JavaCompile::class.java).configureEach { + options.compilerArgs.addAll(listOf("-Xlint:unchecked", "-Xlint:deprecation")) +} + +project.tasks.withType(KotlinCompile::class.java).configureEach { + kotlinOptions { + apiVersion = "1.8" + languageVersion = "1.8" + jvmTarget = JavaVersion.VERSION_1_8.toString() + freeCompilerArgs = freeCompilerArgs + "-Xexplicit-api=strict" + } +} diff --git a/embrace-android-api/build.gradle.kts b/embrace-android-api/build.gradle.kts index 40ba2096f8..103bc48d45 100644 --- a/embrace-android-api/build.gradle.kts +++ b/embrace-android-api/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("embrace-defaults") + id("embrace-prod-defaults") } description = "Embrace Android SDK: API" diff --git a/embrace-android-compose/build.gradle.kts b/embrace-android-compose/build.gradle.kts index 694135aa1b..a23224a6bc 100644 --- a/embrace-android-compose/build.gradle.kts +++ b/embrace-android-compose/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("embrace-defaults") + id("embrace-prod-defaults") } description = "Embrace Android SDK: Jetpack Compose" diff --git a/embrace-android-core/build.gradle.kts b/embrace-android-core/build.gradle.kts index e8c29dd4eb..ecdd064c6c 100644 --- a/embrace-android-core/build.gradle.kts +++ b/embrace-android-core/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("embrace-defaults") + id("embrace-prod-defaults") } description = "Embrace Android SDK: Core" diff --git a/embrace-android-fcm/build.gradle.kts b/embrace-android-fcm/build.gradle.kts index 5eac9f36c9..34bf338704 100644 --- a/embrace-android-fcm/build.gradle.kts +++ b/embrace-android-fcm/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("embrace-defaults") + id("embrace-prod-defaults") } description = "Embrace Android SDK: Firebase Cloud Messaging" diff --git a/embrace-android-features/build.gradle.kts b/embrace-android-features/build.gradle.kts index 6357d4a459..8a21f13dac 100644 --- a/embrace-android-features/build.gradle.kts +++ b/embrace-android-features/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("embrace-defaults") + id("embrace-prod-defaults") } description = "Embrace Android SDK: Features" diff --git a/embrace-android-okhttp3/build.gradle.kts b/embrace-android-okhttp3/build.gradle.kts index b5397a3b4b..f328e61315 100644 --- a/embrace-android-okhttp3/build.gradle.kts +++ b/embrace-android-okhttp3/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("embrace-defaults") + id("embrace-prod-defaults") } description = "Embrace Android SDK: OkHttp3" diff --git a/embrace-android-payload/build.gradle.kts b/embrace-android-payload/build.gradle.kts index 731d84bee3..a73b6bfb38 100644 --- a/embrace-android-payload/build.gradle.kts +++ b/embrace-android-payload/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("embrace-defaults") + id("embrace-prod-defaults") id("com.google.devtools.ksp") } diff --git a/embrace-android-sdk/build.gradle.kts b/embrace-android-sdk/build.gradle.kts index 3292eda510..76148101c1 100644 --- a/embrace-android-sdk/build.gradle.kts +++ b/embrace-android-sdk/build.gradle.kts @@ -1,7 +1,7 @@ import io.embrace.gradle.Versions plugins { - id("embrace-defaults") + id("embrace-prod-defaults") id("com.google.devtools.ksp") } @@ -86,6 +86,7 @@ dependencies { // Please, don"t update it until we update compileSdk. implementation(libs.profileinstaller) + testImplementation(project(":embrace-test-fakes")) testImplementation(libs.protobuf.java) testImplementation(libs.protobuf.java.util) testImplementation(libs.kotlin.reflect) diff --git a/embrace-test-common/build.gradle.kts b/embrace-test-common/build.gradle.kts index 60149d9ec3..a828ef5028 100644 --- a/embrace-test-common/build.gradle.kts +++ b/embrace-test-common/build.gradle.kts @@ -1,17 +1,7 @@ -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile - plugins { - id("java-library") - id("kotlin") + id("embrace-test-defaults") } -java { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 +android { + namespace = "io.embrace.android.embracesdk.test.common" } - -project.tasks.withType(KotlinCompile::class.java).configureEach { - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8.toString() - } -} \ No newline at end of file diff --git a/embrace-test-common/lint-baseline.xml b/embrace-test-common/lint-baseline.xml new file mode 100644 index 0000000000..c584e12957 --- /dev/null +++ b/embrace-test-common/lint-baseline.xml @@ -0,0 +1,4 @@ + + + + diff --git a/embrace-test-common/src/main/kotlin/io/embrace/android/embracesdk/ResourceReader.kt b/embrace-test-common/src/main/kotlin/io/embrace/android/embracesdk/ResourceReader.kt index 96478b4259..b0495d9cb2 100644 --- a/embrace-test-common/src/main/kotlin/io/embrace/android/embracesdk/ResourceReader.kt +++ b/embrace-test-common/src/main/kotlin/io/embrace/android/embracesdk/ResourceReader.kt @@ -2,14 +2,14 @@ package io.embrace.android.embracesdk import java.io.InputStream -object ResourceReader { - fun readResource(name: String): InputStream { +public object ResourceReader { + public fun readResource(name: String): InputStream { val classLoader = checkNotNull(javaClass.classLoader) return classLoader.getResourceAsStream(name) ?: error("Could not find resource '$name'") } - fun readResourceAsText(name: String): String { + public fun readResourceAsText(name: String): String { return readResource(name).bufferedReader().readText() } } diff --git a/embrace-test-fakes/README.md b/embrace-test-fakes/README.md new file mode 100644 index 0000000000..8b7da82915 --- /dev/null +++ b/embrace-test-fakes/README.md @@ -0,0 +1,3 @@ +# embrace-test-fakes + +Fake implementations that are used for writing unit/integration tests. diff --git a/embrace-test-fakes/build.gradle.kts b/embrace-test-fakes/build.gradle.kts new file mode 100644 index 0000000000..7c00e1b59a --- /dev/null +++ b/embrace-test-fakes/build.gradle.kts @@ -0,0 +1,11 @@ +plugins { + id("embrace-test-defaults") +} + +android { + namespace = "io.embrace.android.embracesdk.test.fakes" +} + +dependencies { + compileOnly(project(":embrace-android-core")) +} diff --git a/embrace-test-fakes/lint-baseline.xml b/embrace-test-fakes/lint-baseline.xml new file mode 100644 index 0000000000..c584e12957 --- /dev/null +++ b/embrace-test-fakes/lint-baseline.xml @@ -0,0 +1,4 @@ + + + + diff --git a/embrace-android-sdk/src/test/java/io/embrace/android/embracesdk/fakes/FakeClock.kt b/embrace-test-fakes/src/main/kotlin/io/embrace/android/embracesdk/fakes/FakeClock.kt similarity index 56% rename from embrace-android-sdk/src/test/java/io/embrace/android/embracesdk/fakes/FakeClock.kt rename to embrace-test-fakes/src/main/kotlin/io/embrace/android/embracesdk/fakes/FakeClock.kt index 741e940960..6709a26e4b 100644 --- a/embrace-android-sdk/src/test/java/io/embrace/android/embracesdk/fakes/FakeClock.kt +++ b/embrace-test-fakes/src/main/kotlin/io/embrace/android/embracesdk/fakes/FakeClock.kt @@ -2,25 +2,25 @@ package io.embrace.android.embracesdk.fakes import io.embrace.android.embracesdk.internal.clock.Clock -internal class FakeClock( +public class FakeClock( @Volatile private var currentTime: Long = DEFAULT_FAKE_CURRENT_TIME ) : Clock { - fun setCurrentTime(currentTime: Long) { + public fun setCurrentTime(currentTime: Long) { this.currentTime = currentTime } - fun tick(millis: Long = 1): Long { + public fun tick(millis: Long = 1): Long { currentTime += millis return currentTime } - fun tickSecond() = tick(1000) + public fun tickSecond(): Long = tick(1000) override fun now(): Long = currentTime - companion object { - const val DEFAULT_FAKE_CURRENT_TIME = 1692201601000L + public companion object { + public const val DEFAULT_FAKE_CURRENT_TIME: Long = 1692201601000L } } diff --git a/settings.gradle.kts b/settings.gradle.kts index 88ae517cea..26dae22817 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -8,5 +8,6 @@ include( ":embrace-android-fcm", ":embrace-android-compose", ":embrace-lint", - ":embrace-test-common" + ":embrace-test-common", + ":embrace-test-fakes" )