From 0e994d6222db0429b1cf6b106123649a1abbbf56 Mon Sep 17 00:00:00 2001 From: Matt Kranzler Date: Wed, 13 Dec 2023 16:02:40 -0800 Subject: [PATCH 01/18] Upgrade to AGP 8 & Kotlin 1.9.20 --- build.gradle.kts | 67 ++++++++++++++++++- formula-android-compose/build.gradle.kts | 27 ++------ formula-android-tests/build.gradle.kts | 15 +---- formula-android/build.gradle.kts | 26 ++----- formula-coroutines/build.gradle.kts | 11 --- formula-lint/build.gradle.kts | 5 -- formula-rxjava3/build.gradle.kts | 15 ----- formula-test/build.gradle.kts | 15 ----- formula/build.gradle.kts | 16 ----- gradle/libs.versions.toml | 13 ++-- gradle/merge-reports.gradle | 4 +- gradle/wrapper/gradle-wrapper.properties | 3 +- samples/composition/build.gradle.kts | 15 +---- samples/counter/build.gradle.kts | 15 +---- .../build.gradle.kts | 15 +---- samples/stopwatch-compose/build.gradle.kts | 10 +-- samples/stopwatch-coroutines/build.gradle.kts | 15 +---- samples/stopwatch/build.gradle.kts | 15 +---- samples/todoapp/build.gradle.kts | 15 +---- settings.gradle.kts | 2 - 20 files changed, 95 insertions(+), 224 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index aaa8d002b..60ba0c4fe 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,3 +1,8 @@ +import com.android.build.api.dsl.ApplicationExtension +import com.android.build.api.dsl.CommonExtension +import com.android.build.api.dsl.LibraryExtension +import com.android.build.api.dsl.TestExtension + buildscript { repositories { @@ -20,22 +25,79 @@ buildscript { apply(plugin = "com.github.ben-manes.versions") apply(plugin = "org.jetbrains.dokka") apply(from = "gradle/jacoco.gradle") -apply(from = "gradle/merge-reports.gradle") allprojects { repositories { google() mavenCentral() } +} + +subprojects { + val javaVersion = JavaVersion.VERSION_11 tasks.withType().configureEach { dokkaSourceSets.named("main") { - jdkVersion.set(8) + jdkVersion.set(11) skipDeprecated.set(true) skipEmptyPackages.set(true) reportUndocumented.set(false) } } + + // Common android config + val commonAndroidConfig: CommonExtension<*, *, *, *, *>.() -> Unit = { + compileSdk = 30 + + compileOptions { + sourceCompatibility = javaVersion + targetCompatibility = javaVersion + } + } + + // Android library config + pluginManager.withPlugin("com.android.library") { + with(extensions.getByType()) { + commonAndroidConfig() + defaultConfig { minSdk = 21 } + } + } + + // Android app config + pluginManager.withPlugin("com.android.application") { + with(extensions.getByType()) { + commonAndroidConfig() + defaultConfig { + minSdk = 21 + //noinspection ExpiredTargetSdkVersion + targetSdk = 30 + } + } + } + + // Android test config + pluginManager.withPlugin("com.android.test") { + with(extensions.getByType()) { + commonAndroidConfig() + defaultConfig { + // Using sdk 28 for robolectric tests. + minSdk = 28 + //noinspection ExpiredTargetSdkVersion + targetSdk = 28 + } + } + } + + tasks.withType().configureEach { + sourceCompatibility = javaVersion.toString() + targetCompatibility = javaVersion.toString() + } + + tasks.withType().configureEach { + kotlinOptions { + jvmTarget = javaVersion.toString() + } + } } tasks.register("clean", Delete::class) { @@ -53,3 +115,4 @@ tasks.register("install") { dependsOn(publishTasks) } +apply(from = "gradle/merge-reports.gradle") diff --git a/formula-android-compose/build.gradle.kts b/formula-android-compose/build.gradle.kts index 07be38cd2..dfccbd08d 100644 --- a/formula-android-compose/build.gradle.kts +++ b/formula-android-compose/build.gradle.kts @@ -9,34 +9,17 @@ apply { } android { - compileSdk = libs.versions.compileSdk.get().toInt() - - defaultConfig { - minSdk = libs.versions.minSdk.get().toInt() - targetSdk = libs.versions.targetSdk.get().toInt() - } + namespace = "com.instacart.formula.android.compose" buildFeatures { compose = true } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - composeOptions { - kotlinCompilerVersion = libs.versions.kotlin.get() kotlinCompilerExtensionVersion = libs.versions.compose.get() } } -tasks.withType().all { - kotlinOptions { - jvmTarget = "1.8" - } -} - task("sourcesJar") { from(android.sourceSets["main"].java.srcDirs) archiveClassifier.set("sources") @@ -45,9 +28,11 @@ task("sourcesJar") { task("javadoc") { isFailOnError = false source(android.sourceSets["main"].java.getSourceFiles()) - classpath += project.files(android.bootClasspath.joinToString(separator = File.pathSeparator)) - classpath += configurations.api - classpath += configurations.implementation + classpath = project.files( + android.bootClasspath.joinToString(separator = File.pathSeparator), + configurations.api, + configurations.implementation + ) } task("javadocJar") { diff --git a/formula-android-tests/build.gradle.kts b/formula-android-tests/build.gradle.kts index 455f0f35d..5fb47c137 100644 --- a/formula-android-tests/build.gradle.kts +++ b/formula-android-tests/build.gradle.kts @@ -9,21 +9,14 @@ apply { } android { - compileSdk = 28 + namespace = "com.instacart.formula.samples" defaultConfig { applicationId = "com.instacart.formula.samples" - minSdk = libs.versions.minSdk.get().toInt() - targetSdk = 28 // Using sdk 28 for robolectric tests. versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - buildTypes { release { isMinifyEnabled = false @@ -38,12 +31,6 @@ android { } } -tasks.withType().all { - kotlinOptions { - jvmTarget = "1.8" - } -} - dependencies { implementation(project(":formula-rxjava3")) implementation(project(":formula-android")) diff --git a/formula-android/build.gradle.kts b/formula-android/build.gradle.kts index eb1144ea9..daaf88406 100644 --- a/formula-android/build.gradle.kts +++ b/formula-android/build.gradle.kts @@ -11,29 +11,13 @@ apply { } android { - compileSdk = libs.versions.compileSdk.get().toInt() - - defaultConfig { - minSdk = libs.versions.minSdk.get().toInt() - targetSdk = libs.versions.targetSdk.get().toInt() - } - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } + namespace = "com.instacart.formula.android" testOptions { unitTests.isReturnDefaultValues = true } } -tasks.withType().all { - kotlinOptions { - jvmTarget = "1.8" - } -} - task("sourcesJar") { from(android.sourceSets["main"].java.srcDirs) archiveClassifier.set("sources") @@ -42,9 +26,11 @@ task("sourcesJar") { task("javadoc") { isFailOnError = false source(android.sourceSets["main"].java.getSourceFiles()) - classpath += project.files(android.bootClasspath.joinToString(separator = File.pathSeparator)) - classpath += configurations.api - classpath += configurations.implementation + classpath = project.files( + android.bootClasspath.joinToString(separator = File.pathSeparator), + configurations.api, + configurations.implementation + ) } task("javadocJar") { diff --git a/formula-coroutines/build.gradle.kts b/formula-coroutines/build.gradle.kts index 36240d14e..7a687486d 100644 --- a/formula-coroutines/build.gradle.kts +++ b/formula-coroutines/build.gradle.kts @@ -3,11 +3,6 @@ plugins { id("kotlin") } -java { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 -} - dependencies { implementation(libs.kotlin) implementation(libs.coroutines) @@ -18,10 +13,4 @@ dependencies { testImplementation(libs.truth) testImplementation(libs.junit) testImplementation(libs.coroutines.test) -} - -tasks.withType().all { - kotlinOptions { - freeCompilerArgs += "-Xopt-in=kotlin.RequiresOptIn" - } } \ No newline at end of file diff --git a/formula-lint/build.gradle.kts b/formula-lint/build.gradle.kts index 4658ff7a2..f3c0fb154 100644 --- a/formula-lint/build.gradle.kts +++ b/formula-lint/build.gradle.kts @@ -10,11 +10,6 @@ apply { from("$rootDir/.buildscript/configure-signing.gradle") } -java { - targetCompatibility = JavaVersion.VERSION_1_8 - sourceCompatibility = JavaVersion.VERSION_1_8 -} - dependencies { compileOnly(libs.lint.api) compileOnly(libs.lint.checks) diff --git a/formula-rxjava3/build.gradle.kts b/formula-rxjava3/build.gradle.kts index 2851693c4..8de29d1b5 100644 --- a/formula-rxjava3/build.gradle.kts +++ b/formula-rxjava3/build.gradle.kts @@ -7,21 +7,6 @@ apply { from("$rootDir/.buildscript/configure-signing.gradle") } -repositories { - mavenCentral() -} - -java { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 -} - -tasks.withType().all { - kotlinOptions { - jvmTarget = "1.8" - } -} - dependencies { implementation(libs.kotlin) diff --git a/formula-test/build.gradle.kts b/formula-test/build.gradle.kts index 0c3b9b2e4..4ce868c5b 100644 --- a/formula-test/build.gradle.kts +++ b/formula-test/build.gradle.kts @@ -7,21 +7,6 @@ apply { from("$rootDir/.buildscript/configure-signing.gradle") } -java { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 -} - -repositories { - mavenCentral() -} - -tasks.withType().all { - kotlinOptions { - jvmTarget = "1.8" - } -} - dependencies { implementation(libs.kotlin) api(project(":formula-rxjava3")) diff --git a/formula/build.gradle.kts b/formula/build.gradle.kts index 0ec95f5a7..f35a685e9 100644 --- a/formula/build.gradle.kts +++ b/formula/build.gradle.kts @@ -7,22 +7,6 @@ apply { from("$rootDir/.buildscript/configure-signing.gradle") } -repositories { - mavenCentral() -} - - -java { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 -} - -tasks.withType().all { - kotlinOptions { - jvmTarget = "1.8" - } -} - dependencies { implementation(libs.kotlin) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7c023a87c..4f8c4b6b7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,12 +1,8 @@ [versions] -android-gradle = "7.0.4" +android-gradle = "8.2.0" dokka-gradle = "1.4.32" -minSdk = "21" -compileSdk = "30" -targetSdk = "30" - -kotlin = "1.5.21" +kotlin = "1.9.20" coroutines = "1.5.2" compose = "1.0.1" @@ -26,7 +22,10 @@ dokka-gradle = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version.ref dokka-android-gradle = { module = "org.jetbrains.dokka:android-documentation-plugin", version.ref = "dokka-gradle" } maven-publish-gradle = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.14.2" } version-gradle = { module = "com.github.ben-manes:gradle-versions-plugin", version = "0.38.0" } -jacoco-gradle = { module = "com.vanniktech:gradle-android-junit-jacoco-plugin", version = "0.16.0" } + +# We need to fork the plugin to fix an incorrect usage of tasks.withType(Test) +# https://github.com/vanniktech/gradle-android-junit-jacoco-plugin/compare/master...Laimiux:gradle-android-junit-jacoco-plugin:laimonas/gradle-8?expand=1 +jacoco-gradle = { module = "com.github.Jawnnypoo:gradle-android-junit-jacoco-plugin", version = "61a9cc0129" } kotlin = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", version.ref = "kotlin" } kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin" } diff --git a/gradle/merge-reports.gradle b/gradle/merge-reports.gradle index 4b20b16d5..3aa6c075d 100644 --- a/gradle/merge-reports.gradle +++ b/gradle/merge-reports.gradle @@ -24,7 +24,7 @@ afterEvaluate { } task mergeReports(type: Copy) { - from { testTasks*.reports.junitXml.destination } { + from { file("$buildDir/test-results") } { exclude("**/binary/*") } into { file("$buildDir/reports/allTests") } @@ -39,7 +39,7 @@ def disableHtmlTestReport(Project project) { project.android { testOptions { unitTests.all { - reports.html.enabled = false + reports.html.required = false } } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ffed3a254..bcc902a2f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Wed Dec 13 14:59:32 PST 2023 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/samples/composition/build.gradle.kts b/samples/composition/build.gradle.kts index ab1f8d315..9e50cc65a 100644 --- a/samples/composition/build.gradle.kts +++ b/samples/composition/build.gradle.kts @@ -5,22 +5,15 @@ plugins { } android { - compileSdk = libs.versions.compileSdk.get().toInt() + namespace = "com.instacart.formula.samples.composition" defaultConfig { applicationId = "com.instacart.formula.samples.composition" - minSdk = libs.versions.minSdk.get().toInt() - targetSdk = libs.versions.targetSdk.get().toInt() versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - buildTypes { release { isMinifyEnabled = false @@ -35,12 +28,6 @@ android { } } -tasks.withType().all { - kotlinOptions { - jvmTarget = "1.8" - } -} - dependencies { implementation(project(":formula-rxjava3")) diff --git a/samples/counter/build.gradle.kts b/samples/counter/build.gradle.kts index 3f5cb13ca..36cfb64a3 100644 --- a/samples/counter/build.gradle.kts +++ b/samples/counter/build.gradle.kts @@ -5,22 +5,15 @@ plugins { } android { - compileSdk = libs.versions.compileSdk.get().toInt() + namespace = "com.instacart.formula.counter" defaultConfig { applicationId = "com.instacart.formula.counter" - minSdk = libs.versions.minSdk.get().toInt() - targetSdk = libs.versions.targetSdk.get().toInt() versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - buildTypes { release { isMinifyEnabled = false @@ -35,12 +28,6 @@ android { } } -tasks.withType().all { - kotlinOptions { - jvmTarget = "1.8" - } -} - dependencies { implementation(project(":formula-rxjava3")) diff --git a/samples/custom-network-state-stream/build.gradle.kts b/samples/custom-network-state-stream/build.gradle.kts index ddf07628c..61e53d615 100644 --- a/samples/custom-network-state-stream/build.gradle.kts +++ b/samples/custom-network-state-stream/build.gradle.kts @@ -5,22 +5,15 @@ plugins { } android { - compileSdk = libs.versions.compileSdk.get().toInt() + namespace = "com.instacart.formula.samples.networkstate" defaultConfig { applicationId = "com.instacart.formula.samples.networkstate" - minSdk = libs.versions.minSdk.get().toInt() - targetSdk = libs.versions.targetSdk.get().toInt() versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - buildTypes { release { isMinifyEnabled = false @@ -35,12 +28,6 @@ android { } } -tasks.withType().all { - kotlinOptions { - jvmTarget = "1.8" - } -} - dependencies { implementation(project(":formula-rxjava3")) diff --git a/samples/stopwatch-compose/build.gradle.kts b/samples/stopwatch-compose/build.gradle.kts index 909a01250..f49e3ab51 100644 --- a/samples/stopwatch-compose/build.gradle.kts +++ b/samples/stopwatch-compose/build.gradle.kts @@ -5,12 +5,10 @@ plugins { } android { - compileSdk = libs.versions.compileSdk.get().toInt() + namespace = "com.instacart.formula.compose.stopwatch" defaultConfig { applicationId = "com.instacart.formula.compose.stopwatch" - minSdk = libs.versions.minSdk.get().toInt() - targetSdk = libs.versions.targetSdk.get().toInt() versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" @@ -20,13 +18,7 @@ android { compose = true } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - composeOptions { - kotlinCompilerVersion = libs.versions.kotlin.get() kotlinCompilerExtensionVersion = libs.versions.compose.get() } diff --git a/samples/stopwatch-coroutines/build.gradle.kts b/samples/stopwatch-coroutines/build.gradle.kts index d9c659d35..13ef7f2db 100644 --- a/samples/stopwatch-coroutines/build.gradle.kts +++ b/samples/stopwatch-coroutines/build.gradle.kts @@ -5,22 +5,15 @@ plugins { } android { - compileSdk = libs.versions.compileSdk.get().toInt() + namespace = "com.instacart.formula.stopwatch.coroutines" defaultConfig { applicationId = "com.instacart.formula.stopwatch.coroutines" - minSdk = libs.versions.minSdk.get().toInt() - targetSdk = libs.versions.targetSdk.get().toInt() versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - buildTypes { release { isMinifyEnabled = false @@ -35,12 +28,6 @@ android { } } -tasks.withType().all { - kotlinOptions { - jvmTarget = "1.8" - } -} - dependencies { implementation(project(":formula-coroutines")) diff --git a/samples/stopwatch/build.gradle.kts b/samples/stopwatch/build.gradle.kts index a88f04842..583e14f99 100644 --- a/samples/stopwatch/build.gradle.kts +++ b/samples/stopwatch/build.gradle.kts @@ -5,22 +5,15 @@ plugins { } android { - compileSdk = libs.versions.compileSdk.get().toInt() + namespace = "com.instacart.formula.samples.composition" defaultConfig { applicationId = "com.instacart.formula.samples.composition" - minSdk = libs.versions.minSdk.get().toInt() - targetSdk = libs.versions.targetSdk.get().toInt() versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - buildTypes { release { isMinifyEnabled = false @@ -35,12 +28,6 @@ android { } } -tasks.withType().all { - kotlinOptions { - jvmTarget = "1.8" - } -} - dependencies { implementation(project(":formula-rxjava3")) diff --git a/samples/todoapp/build.gradle.kts b/samples/todoapp/build.gradle.kts index d5b9a5fa2..64b3114fa 100644 --- a/samples/todoapp/build.gradle.kts +++ b/samples/todoapp/build.gradle.kts @@ -5,22 +5,15 @@ plugins { } android { - compileSdk = libs.versions.compileSdk.get().toInt() + namespace = "com.examples.todoapp" defaultConfig { applicationId = "com.examples.todoapp" - minSdk = libs.versions.minSdk.get().toInt() - targetSdk = libs.versions.targetSdk.get().toInt() versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - buildTypes { release { isMinifyEnabled = false @@ -35,12 +28,6 @@ android { } } -tasks.withType().all { - kotlinOptions { - jvmTarget = "1.8" - } -} - dependencies { implementation(project(":formula-rxjava3")) implementation(project(":formula-android")) diff --git a/settings.gradle.kts b/settings.gradle.kts index 2046f0c77..ceade7280 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,5 +1,3 @@ -enableFeaturePreview("VERSION_CATALOGS") - include( ":formula", ":formula-android", From 0d64a3d3aa6294821ba963a169757203f86a0120 Mon Sep 17 00:00:00 2001 From: Matt Kranzler Date: Wed, 13 Dec 2023 16:29:45 -0800 Subject: [PATCH 02/18] Use java 17 --- .github/workflows/build-workflow.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/build-workflow.yml b/.github/workflows/build-workflow.yml index 277b20609..ac7c691f6 100644 --- a/.github/workflows/build-workflow.yml +++ b/.github/workflows/build-workflow.yml @@ -6,6 +6,11 @@ jobs: env: DANGER_GITHUB_API_TOKEN: ${{ secrets.DANGER_GITHUB_API_TOKEN }} steps: + - name: Configure JDK + uses: actions/setup-java@v2 + with: + distribution: 'zulu' + java-version: 17 - name: Checkout the code uses: actions/checkout@v2 - name: Install Ruby @@ -42,6 +47,11 @@ jobs: assemble_samples: runs-on: ubuntu-latest steps: + - name: Configure JDK + uses: actions/setup-java@v2 + with: + distribution: 'zulu' + java-version: 17 - name: Checkout the code uses: actions/checkout@v2 - name: Assemble Counter From 3beae4f8be597bc9e7f556fa3e841955ba99bde3 Mon Sep 17 00:00:00 2001 From: Matt Kranzler Date: Wed, 13 Dec 2023 17:09:25 -0800 Subject: [PATCH 03/18] Update jacoco version --- gradle/jacoco.gradle | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gradle/jacoco.gradle b/gradle/jacoco.gradle index 2eaf7b6a5..b0e9ae965 100644 --- a/gradle/jacoco.gradle +++ b/gradle/jacoco.gradle @@ -1,8 +1,7 @@ apply plugin: "com.vanniktech.android.junit.jacoco" junitJacoco { - // WARNING! Don"t upgrade unless https://github.com/Malinskiy/danger-jacoco/issues/10 is fixed - jacocoVersion = '0.8.2' + jacocoVersion = '0.8.8' excludes = [ // Defaults '**/androidx/**/*.*', From 7e057be9726c0fe6b3efd003b2c0ee79bfd0558f Mon Sep 17 00:00:00 2001 From: Matt Kranzler Date: Thu, 14 Dec 2023 08:08:46 -0800 Subject: [PATCH 04/18] Fix namespace in stopwatch --- samples/stopwatch/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/stopwatch/build.gradle.kts b/samples/stopwatch/build.gradle.kts index 583e14f99..55d82cfa5 100644 --- a/samples/stopwatch/build.gradle.kts +++ b/samples/stopwatch/build.gradle.kts @@ -5,10 +5,10 @@ plugins { } android { - namespace = "com.instacart.formula.samples.composition" + namespace = "com.instacart.formula.stopwatch" defaultConfig { - applicationId = "com.instacart.formula.samples.composition" + applicationId = "com.instacart.formula.stopwatch" versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" From 7a9e9af69e19905118e4b2295166d652a9e82f17 Mon Sep 17 00:00:00 2001 From: Matt Kranzler Date: Thu, 14 Dec 2023 08:26:42 -0800 Subject: [PATCH 05/18] Update compose version & remove namespace from manifest files --- formula-android-compose/src/main/AndroidManifest.xml | 2 +- formula-android-tests/src/main/AndroidManifest.xml | 3 +-- formula-android/src/main/AndroidManifest.xml | 2 +- gradle/libs.versions.toml | 2 +- samples/composition/src/main/AndroidManifest.xml | 3 +-- samples/counter/src/main/AndroidManifest.xml | 3 +-- .../custom-network-state-stream/src/main/AndroidManifest.xml | 3 +-- samples/stopwatch-compose/src/main/AndroidManifest.xml | 3 +-- samples/stopwatch-coroutines/src/main/AndroidManifest.xml | 3 +-- samples/stopwatch/src/main/AndroidManifest.xml | 3 +-- samples/todoapp/src/main/AndroidManifest.xml | 3 +-- 11 files changed, 11 insertions(+), 19 deletions(-) diff --git a/formula-android-compose/src/main/AndroidManifest.xml b/formula-android-compose/src/main/AndroidManifest.xml index 42519c3f1..c4e6c98d7 100644 --- a/formula-android-compose/src/main/AndroidManifest.xml +++ b/formula-android-compose/src/main/AndroidManifest.xml @@ -1 +1 @@ - + diff --git a/formula-android-tests/src/main/AndroidManifest.xml b/formula-android-tests/src/main/AndroidManifest.xml index 4ff543a83..c48ff6712 100644 --- a/formula-android-tests/src/main/AndroidManifest.xml +++ b/formula-android-tests/src/main/AndroidManifest.xml @@ -1,5 +1,4 @@ - + + diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4f8c4b6b7..700d37eab 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,7 +4,7 @@ dokka-gradle = "1.4.32" kotlin = "1.9.20" coroutines = "1.5.2" -compose = "1.0.1" +compose = "1.5.4" androidX = "1.2.0" lifecycle = "2.2.0" diff --git a/samples/composition/src/main/AndroidManifest.xml b/samples/composition/src/main/AndroidManifest.xml index 5c78cc3da..45a0419db 100644 --- a/samples/composition/src/main/AndroidManifest.xml +++ b/samples/composition/src/main/AndroidManifest.xml @@ -1,5 +1,4 @@ - + + + + + + + Date: Thu, 14 Dec 2023 08:58:34 -0800 Subject: [PATCH 06/18] Fix compilation errors, update mockito --- .../formula/android/compose/ComposeViewFactory.kt | 2 +- .../java/com/instacart/formula/MockitoFormulaTest.kt | 5 ++--- .../formula/android/ActivityStoreContextTest.kt | 10 +++++----- .../formula/android/ActivityStoreFactoryTest.kt | 2 +- gradle/libs.versions.toml | 5 +++-- samples/stopwatch-coroutines/build.gradle.kts | 4 ++-- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/formula-android-compose/src/main/java/com/instacart/formula/android/compose/ComposeViewFactory.kt b/formula-android-compose/src/main/java/com/instacart/formula/android/compose/ComposeViewFactory.kt index 6c5b76786..9e994616b 100644 --- a/formula-android-compose/src/main/java/com/instacart/formula/android/compose/ComposeViewFactory.kt +++ b/formula-android-compose/src/main/java/com/instacart/formula/android/compose/ComposeViewFactory.kt @@ -10,7 +10,7 @@ import com.instacart.formula.android.ViewFactory import com.jakewharton.rxrelay3.BehaviorRelay -abstract class ComposeViewFactory : ViewFactory { +abstract class ComposeViewFactory : ViewFactory { override fun create(inflater: LayoutInflater, container: ViewGroup?): FeatureView { val view = ComposeView(inflater.context) diff --git a/formula-android/src/test/java/com/instacart/formula/MockitoFormulaTest.kt b/formula-android/src/test/java/com/instacart/formula/MockitoFormulaTest.kt index 4af5a1c6e..3aba8e80f 100644 --- a/formula-android/src/test/java/com/instacart/formula/MockitoFormulaTest.kt +++ b/formula-android/src/test/java/com/instacart/formula/MockitoFormulaTest.kt @@ -1,11 +1,10 @@ package com.instacart.formula import com.google.common.truth.Truth.assertThat -import com.nhaarman.mockito_kotlin.mock -import com.nhaarman.mockito_kotlin.spy -import com.nhaarman.mockito_kotlin.whenever import org.junit.Test import org.mockito.internal.stubbing.answers.CallsRealMethods +import org.mockito.kotlin.mock +import org.mockito.kotlin.whenever class MockitoFormulaTest { diff --git a/formula-android/src/test/java/com/instacart/formula/android/ActivityStoreContextTest.kt b/formula-android/src/test/java/com/instacart/formula/android/ActivityStoreContextTest.kt index 1636951b0..04c3dc5f7 100644 --- a/formula-android/src/test/java/com/instacart/formula/android/ActivityStoreContextTest.kt +++ b/formula-android/src/test/java/com/instacart/formula/android/ActivityStoreContextTest.kt @@ -4,14 +4,14 @@ import androidx.fragment.app.FragmentActivity import androidx.lifecycle.Lifecycle import com.instacart.formula.android.internal.ActivityStoreContextImpl import com.jakewharton.rxrelay3.PublishRelay -import com.nhaarman.mockito_kotlin.mock -import com.nhaarman.mockito_kotlin.verify -import com.nhaarman.mockito_kotlin.verifyZeroInteractions -import com.nhaarman.mockito_kotlin.whenever import io.reactivex.rxjava3.core.Observable import kotlinx.parcelize.Parcelize import org.junit.Before import org.junit.Test +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify +import org.mockito.kotlin.verifyNoInteractions +import org.mockito.kotlin.whenever class ActivityStoreContextTest { class FakeActivity : FragmentActivity() { @@ -58,7 +58,7 @@ class ActivityStoreContextTest { doSomething() } - verifyZeroInteractions(activity) + verifyNoInteractions(activity) } @Test fun `send event success`() { diff --git a/formula-android/src/test/java/com/instacart/formula/android/ActivityStoreFactoryTest.kt b/formula-android/src/test/java/com/instacart/formula/android/ActivityStoreFactoryTest.kt index 63b520310..5f1f06798 100644 --- a/formula-android/src/test/java/com/instacart/formula/android/ActivityStoreFactoryTest.kt +++ b/formula-android/src/test/java/com/instacart/formula/android/ActivityStoreFactoryTest.kt @@ -3,8 +3,8 @@ package com.instacart.formula.android import androidx.fragment.app.FragmentActivity import com.google.common.truth.Truth.assertThat import com.instacart.formula.android.internal.ActivityStoreFactory -import com.nhaarman.mockito_kotlin.mock import org.junit.Test +import org.mockito.kotlin.mock class ActivityStoreFactoryTest { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 700d37eab..137db2176 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,6 +14,7 @@ espresso = "3.4.0" robolectric = "4.6.1" lint = "30.0.0" autoService = "1.0-rc7" +mockito = "5.1.0" [libraries] android-gradle = { module = "com.android.tools.build:gradle", version.ref = "android-gradle" } @@ -64,8 +65,8 @@ truth = { module = "com.google.truth:truth", version = "1.1.3" } junit = { module = "junit:junit", version = "4.13.2" } rxrelays = { module = "com.jakewharton.rxrelay3:rxrelay", version = "3.0.1" } -mockito-inline = { module = "org.mockito:mockito-inline", version = "3.12.4" } -mockito-kotlin = { module = "com.nhaarman:mockito-kotlin", version = "1.6.0" } +mockito-inline = { module = "org.mockito:mockito-inline", version.ref = "mockito" } +mockito-kotlin = { module = "org.mockito.kotlin:mockito-kotlin", version.ref = "mockito" } lint-core = { module = "com.android.tools.lint:lint", version.ref = "lint" } lint-api = { module = "com.android.tools.lint:lint-api", version.ref = "lint" } diff --git a/samples/stopwatch-coroutines/build.gradle.kts b/samples/stopwatch-coroutines/build.gradle.kts index 13ef7f2db..c33b3cab5 100644 --- a/samples/stopwatch-coroutines/build.gradle.kts +++ b/samples/stopwatch-coroutines/build.gradle.kts @@ -5,10 +5,10 @@ plugins { } android { - namespace = "com.instacart.formula.stopwatch.coroutines" + namespace = "com.instacart.formula.stopwatch" defaultConfig { - applicationId = "com.instacart.formula.stopwatch.coroutines" + applicationId = "com.instacart.formula.stopwatch" versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" From 639afdca3fc02bccb7589d28e1a922e5b22d7d43 Mon Sep 17 00:00:00 2001 From: Matt Kranzler Date: Thu, 14 Dec 2023 09:06:18 -0800 Subject: [PATCH 07/18] Update compile sdk to 33 --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 60ba0c4fe..b18831feb 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -47,7 +47,7 @@ subprojects { // Common android config val commonAndroidConfig: CommonExtension<*, *, *, *, *>.() -> Unit = { - compileSdk = 30 + compileSdk = 33 compileOptions { sourceCompatibility = javaVersion From 2f0ddcc502e90aa6d3336de7300a49e2130eb70e Mon Sep 17 00:00:00 2001 From: Matt Kranzler Date: Thu, 14 Dec 2023 09:15:38 -0800 Subject: [PATCH 08/18] Update compile sdk to 34 --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index b18831feb..fc6509b8d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -47,7 +47,7 @@ subprojects { // Common android config val commonAndroidConfig: CommonExtension<*, *, *, *, *>.() -> Unit = { - compileSdk = 33 + compileSdk = 34 compileOptions { sourceCompatibility = javaVersion From 539d9597c8e2a3e34540e1c57a582ed8fa985111 Mon Sep 17 00:00:00 2001 From: Matt Kranzler Date: Thu, 14 Dec 2023 10:00:27 -0800 Subject: [PATCH 09/18] Update to latest versions of mockito --- formula-android/build.gradle.kts | 2 +- gradle/libs.versions.toml | 5 ++--- samples/todoapp/build.gradle.kts | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/formula-android/build.gradle.kts b/formula-android/build.gradle.kts index daaf88406..f93d228e2 100644 --- a/formula-android/build.gradle.kts +++ b/formula-android/build.gradle.kts @@ -56,7 +56,7 @@ dependencies { testImplementation(libs.androidx.test.runner) testImplementation(libs.espresso.core) testImplementation(libs.truth) - testImplementation(libs.mockito.inline) + testImplementation(libs.mockito.core) testImplementation(libs.mockito.kotlin) testImplementation(libs.kotlin.reflect) } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 137db2176..e6233cf18 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,6 @@ espresso = "3.4.0" robolectric = "4.6.1" lint = "30.0.0" autoService = "1.0-rc7" -mockito = "5.1.0" [libraries] android-gradle = { module = "com.android.tools.build:gradle", version.ref = "android-gradle" } @@ -65,8 +64,8 @@ truth = { module = "com.google.truth:truth", version = "1.1.3" } junit = { module = "junit:junit", version = "4.13.2" } rxrelays = { module = "com.jakewharton.rxrelay3:rxrelay", version = "3.0.1" } -mockito-inline = { module = "org.mockito:mockito-inline", version.ref = "mockito" } -mockito-kotlin = { module = "org.mockito.kotlin:mockito-kotlin", version.ref = "mockito" } +mockito-core = { module = "org.mockito:mockito-core", version = "5.7.0" } +mockito-kotlin = { module = "org.mockito.kotlin:mockito-kotlin", version = "5.2.1" } lint-core = { module = "com.android.tools.lint:lint", version.ref = "lint" } lint-api = { module = "com.android.tools.lint:lint-api", version.ref = "lint" } diff --git a/samples/todoapp/build.gradle.kts b/samples/todoapp/build.gradle.kts index 64b3114fa..a9be059f0 100644 --- a/samples/todoapp/build.gradle.kts +++ b/samples/todoapp/build.gradle.kts @@ -43,7 +43,7 @@ dependencies { testImplementation(libs.junit) testImplementation(libs.truth) - testImplementation(libs.mockito.inline) + testImplementation(libs.mockito.core) testImplementation(libs.mockito.kotlin) testImplementation(libs.kotlin.reflect) testImplementation(project(":formula-test")) From cbacdba9ca412c6af03bc8526f4e5007d086af0e Mon Sep 17 00:00:00 2001 From: Matt Kranzler Date: Thu, 14 Dec 2023 11:05:49 -0800 Subject: [PATCH 10/18] Fix for mockito test --- .../src/test/java/com/instacart/formula/MockitoFormulaTest.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/formula-android/src/test/java/com/instacart/formula/MockitoFormulaTest.kt b/formula-android/src/test/java/com/instacart/formula/MockitoFormulaTest.kt index 3aba8e80f..e611ce956 100644 --- a/formula-android/src/test/java/com/instacart/formula/MockitoFormulaTest.kt +++ b/formula-android/src/test/java/com/instacart/formula/MockitoFormulaTest.kt @@ -16,7 +16,9 @@ class MockitoFormulaTest { assertThat(formula.type()).isEqualTo(MyFormula::class) } - class MyFormula : StatelessFormula() { + class MyFormula : Formula() { + override fun initialState(input: Unit) = Unit + override fun Snapshot.evaluate(): Evaluation { return Evaluation(Unit) } From 543d07bee526d8599849cfa5e7991784a616f065 Mon Sep 17 00:00:00 2001 From: Matt Kranzler Date: Thu, 14 Dec 2023 11:15:56 -0800 Subject: [PATCH 11/18] Fix test compilation error --- .../java/com/instacart/formula/test/TestFragmentActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/formula-android-tests/src/main/java/com/instacart/formula/test/TestFragmentActivity.kt b/formula-android-tests/src/main/java/com/instacart/formula/test/TestFragmentActivity.kt index 7fb9ce6ee..1af945d08 100644 --- a/formula-android-tests/src/main/java/com/instacart/formula/test/TestFragmentActivity.kt +++ b/formula-android-tests/src/main/java/com/instacart/formula/test/TestFragmentActivity.kt @@ -3,10 +3,10 @@ package com.instacart.formula.test import android.os.Bundle import androidx.annotation.VisibleForTesting import com.instacart.formula.FormulaAndroid -import com.instacart.formula.R import com.instacart.formula.android.FormulaFragment import com.instacart.formula.android.FragmentKey import com.instacart.formula.android.FormulaAppCompatActivity +import com.instacart.formula.samples.R class TestFragmentActivity : FormulaAppCompatActivity() { @VisibleForTesting lateinit var initialContract: FragmentKey From e7980dc57a7c65b11749302a49f5470470c92b84 Mon Sep 17 00:00:00 2001 From: Matt Kranzler Date: Thu, 14 Dec 2023 11:25:23 -0800 Subject: [PATCH 12/18] Fix test compilation error --- .../com/instacart/formula/ActivityUpdateTest.kt | 1 + .../formula/ActivityUpdateTimingTest.kt | 1 + .../formula/FragmentAndroidEventTest.kt | 12 ++++++++---- .../formula/FragmentLifecycleStateTest.kt | 16 ++++++++++------ .../instacart/formula/FragmentLifecycleTest.kt | 1 + .../com/instacart/formula/TestFeatureFactory.kt | 1 + 6 files changed, 22 insertions(+), 10 deletions(-) diff --git a/formula-android-tests/src/test/java/com/instacart/formula/ActivityUpdateTest.kt b/formula-android-tests/src/test/java/com/instacart/formula/ActivityUpdateTest.kt index 2758fbd58..68e67c89c 100644 --- a/formula-android-tests/src/test/java/com/instacart/formula/ActivityUpdateTest.kt +++ b/formula-android-tests/src/test/java/com/instacart/formula/ActivityUpdateTest.kt @@ -6,6 +6,7 @@ import androidx.test.ext.junit.rules.ActivityScenarioRule import androidx.test.ext.junit.runners.AndroidJUnit4 import com.google.common.truth.Truth.assertThat import com.instacart.formula.android.FormulaAppCompatActivity +import com.instacart.formula.samples.R import com.jakewharton.rxrelay3.PublishRelay import org.junit.Before import org.junit.Rule diff --git a/formula-android-tests/src/test/java/com/instacart/formula/ActivityUpdateTimingTest.kt b/formula-android-tests/src/test/java/com/instacart/formula/ActivityUpdateTimingTest.kt index abfd6e663..dd5215e4c 100644 --- a/formula-android-tests/src/test/java/com/instacart/formula/ActivityUpdateTimingTest.kt +++ b/formula-android-tests/src/test/java/com/instacart/formula/ActivityUpdateTimingTest.kt @@ -6,6 +6,7 @@ import androidx.test.ext.junit.rules.ActivityScenarioRule import androidx.test.ext.junit.runners.AndroidJUnit4 import com.google.common.truth.Truth.assertThat import com.instacart.formula.android.FormulaAppCompatActivity +import com.instacart.formula.samples.R import io.reactivex.rxjava3.core.Observable import org.junit.Before import org.junit.Rule diff --git a/formula-android-tests/src/test/java/com/instacart/formula/FragmentAndroidEventTest.kt b/formula-android-tests/src/test/java/com/instacart/formula/FragmentAndroidEventTest.kt index b21688879..c5177b716 100644 --- a/formula-android-tests/src/test/java/com/instacart/formula/FragmentAndroidEventTest.kt +++ b/formula-android-tests/src/test/java/com/instacart/formula/FragmentAndroidEventTest.kt @@ -7,6 +7,7 @@ import com.google.common.truth.Truth.assertThat import com.instacart.formula.android.Feature import com.instacart.formula.android.ViewFactory import com.instacart.formula.android.events.ActivityResult +import com.instacart.formula.samples.R import com.instacart.formula.test.TestFragmentActivity import com.instacart.formula.test.TestLifecycleKey import io.reactivex.rxjava3.core.Observable @@ -28,7 +29,7 @@ class FragmentAndroidEventTest { configureActivity = { initialContract = TestLifecycleKey() }, - contracts = { + contracts = { bind { _, _ -> Feature( @@ -52,14 +53,17 @@ class FragmentAndroidEventTest { private val activityRule = ActivityScenarioRule(TestFragmentActivity::class.java) - @get:Rule val rule = RuleChain.outerRule(formulaRule).around(activityRule) + @get:Rule + val rule = RuleChain.outerRule(formulaRule).around(activityRule) lateinit var scenario: ActivityScenario - @Before fun setup() { + @Before + fun setup() { scenario = activityRule.scenario } - @Test fun `activity result`() { + @Test + fun `activity result`() { FormulaAndroid.onActivityResult(scenario.activity(), 1, 2, null) val expected = listOf(ActivityResult(1, 2, null)) diff --git a/formula-android-tests/src/test/java/com/instacart/formula/FragmentLifecycleStateTest.kt b/formula-android-tests/src/test/java/com/instacart/formula/FragmentLifecycleStateTest.kt index ac3401457..c6e6189a2 100644 --- a/formula-android-tests/src/test/java/com/instacart/formula/FragmentLifecycleStateTest.kt +++ b/formula-android-tests/src/test/java/com/instacart/formula/FragmentLifecycleStateTest.kt @@ -4,13 +4,14 @@ import androidx.test.core.app.ActivityScenario import androidx.test.ext.junit.rules.ActivityScenarioRule import androidx.test.ext.junit.runners.AndroidJUnit4 import com.google.common.truth.Truth.assertThat -import com.instacart.formula.android.FormulaFragment import com.instacart.formula.android.ActivityStoreContext import com.instacart.formula.android.FeatureFactory +import com.instacart.formula.android.FormulaFragment import com.instacart.formula.android.FragmentKey +import com.instacart.formula.samples.R +import com.instacart.formula.test.TestFragmentActivity import com.instacart.formula.test.TestKey import com.instacart.formula.test.TestKeyWithId -import com.instacart.formula.test.TestFragmentActivity import io.reactivex.rxjava3.core.Observable import org.junit.Before import org.junit.Rule @@ -36,7 +37,7 @@ class FragmentLifecycleStateTest { configureActivity = { initialContract = TestKey() }, - contracts = { + contracts = { bind(featureFactory(this@activity)) bind(featureFactory(this@activity)) } @@ -57,18 +58,21 @@ class FragmentLifecycleStateTest { scenario = activityRule.scenario } - @Test fun `is fragment started`() { + @Test + fun `is fragment started`() { val events = selectStartedEvents(TestKey()) assertThat(events).containsExactly(false, true).inOrder() } - @Test fun `is fragment resumed`() { + @Test + fun `is fragment resumed`() { val events = selectResumedEvents(TestKey()) assertThat(events).containsExactly(false, true).inOrder() } @LooperMode(LooperMode.Mode.LEGACY) - @Test fun `navigate forward`() { + @Test + fun `navigate forward`() { navigateToTaskDetail() val contract = TestKey() diff --git a/formula-android-tests/src/test/java/com/instacart/formula/FragmentLifecycleTest.kt b/formula-android-tests/src/test/java/com/instacart/formula/FragmentLifecycleTest.kt index ee0dc6721..813b4a5a7 100644 --- a/formula-android-tests/src/test/java/com/instacart/formula/FragmentLifecycleTest.kt +++ b/formula-android-tests/src/test/java/com/instacart/formula/FragmentLifecycleTest.kt @@ -9,6 +9,7 @@ import com.google.common.truth.Truth.assertThat import com.instacart.formula.android.Feature import com.instacart.formula.android.FeatureFactory import com.instacart.formula.android.ViewFactory +import com.instacart.formula.samples.R import com.instacart.formula.test.TestFragmentActivity import com.instacart.formula.test.TestFragmentLifecycleCallback import com.instacart.formula.test.TestLifecycleKey diff --git a/formula-android-tests/src/test/java/com/instacart/formula/TestFeatureFactory.kt b/formula-android-tests/src/test/java/com/instacart/formula/TestFeatureFactory.kt index 9f9eae77f..1653f304b 100644 --- a/formula-android-tests/src/test/java/com/instacart/formula/TestFeatureFactory.kt +++ b/formula-android-tests/src/test/java/com/instacart/formula/TestFeatureFactory.kt @@ -4,6 +4,7 @@ import com.instacart.formula.android.Feature import com.instacart.formula.android.FeatureFactory import com.instacart.formula.android.FragmentKey import com.instacart.formula.android.ViewFactory +import com.instacart.formula.samples.R import com.instacart.formula.test.TestFragmentActivity import io.reactivex.rxjava3.core.Observable From 03d00613792883107faae367184425713ac163d0 Mon Sep 17 00:00:00 2001 From: Matt Kranzler Date: Thu, 14 Dec 2023 11:39:47 -0800 Subject: [PATCH 13/18] Revert change with R namespace change, update robolectric --- formula-android-tests/build.gradle.kts | 4 ++-- .../formula/test/TestFragmentActivity.kt | 2 +- .../com/instacart/formula/ActivityUpdateTest.kt | 1 - .../formula/ActivityUpdateTimingTest.kt | 1 - .../formula/FragmentAndroidEventTest.kt | 12 ++++-------- .../formula/FragmentLifecycleStateTest.kt | 16 ++++++---------- .../instacart/formula/FragmentLifecycleTest.kt | 1 - .../com/instacart/formula/TestFeatureFactory.kt | 1 - gradle/libs.versions.toml | 2 +- 9 files changed, 14 insertions(+), 26 deletions(-) diff --git a/formula-android-tests/build.gradle.kts b/formula-android-tests/build.gradle.kts index 5fb47c137..e0e81567a 100644 --- a/formula-android-tests/build.gradle.kts +++ b/formula-android-tests/build.gradle.kts @@ -9,9 +9,9 @@ apply { } android { - namespace = "com.instacart.formula.samples" + namespace = "com.instacart.formula" defaultConfig { - applicationId = "com.instacart.formula.samples" + applicationId = "com.instacart.formula" versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" diff --git a/formula-android-tests/src/main/java/com/instacart/formula/test/TestFragmentActivity.kt b/formula-android-tests/src/main/java/com/instacart/formula/test/TestFragmentActivity.kt index 1af945d08..7fb9ce6ee 100644 --- a/formula-android-tests/src/main/java/com/instacart/formula/test/TestFragmentActivity.kt +++ b/formula-android-tests/src/main/java/com/instacart/formula/test/TestFragmentActivity.kt @@ -3,10 +3,10 @@ package com.instacart.formula.test import android.os.Bundle import androidx.annotation.VisibleForTesting import com.instacart.formula.FormulaAndroid +import com.instacart.formula.R import com.instacart.formula.android.FormulaFragment import com.instacart.formula.android.FragmentKey import com.instacart.formula.android.FormulaAppCompatActivity -import com.instacart.formula.samples.R class TestFragmentActivity : FormulaAppCompatActivity() { @VisibleForTesting lateinit var initialContract: FragmentKey diff --git a/formula-android-tests/src/test/java/com/instacart/formula/ActivityUpdateTest.kt b/formula-android-tests/src/test/java/com/instacart/formula/ActivityUpdateTest.kt index 68e67c89c..2758fbd58 100644 --- a/formula-android-tests/src/test/java/com/instacart/formula/ActivityUpdateTest.kt +++ b/formula-android-tests/src/test/java/com/instacart/formula/ActivityUpdateTest.kt @@ -6,7 +6,6 @@ import androidx.test.ext.junit.rules.ActivityScenarioRule import androidx.test.ext.junit.runners.AndroidJUnit4 import com.google.common.truth.Truth.assertThat import com.instacart.formula.android.FormulaAppCompatActivity -import com.instacart.formula.samples.R import com.jakewharton.rxrelay3.PublishRelay import org.junit.Before import org.junit.Rule diff --git a/formula-android-tests/src/test/java/com/instacart/formula/ActivityUpdateTimingTest.kt b/formula-android-tests/src/test/java/com/instacart/formula/ActivityUpdateTimingTest.kt index dd5215e4c..abfd6e663 100644 --- a/formula-android-tests/src/test/java/com/instacart/formula/ActivityUpdateTimingTest.kt +++ b/formula-android-tests/src/test/java/com/instacart/formula/ActivityUpdateTimingTest.kt @@ -6,7 +6,6 @@ import androidx.test.ext.junit.rules.ActivityScenarioRule import androidx.test.ext.junit.runners.AndroidJUnit4 import com.google.common.truth.Truth.assertThat import com.instacart.formula.android.FormulaAppCompatActivity -import com.instacart.formula.samples.R import io.reactivex.rxjava3.core.Observable import org.junit.Before import org.junit.Rule diff --git a/formula-android-tests/src/test/java/com/instacart/formula/FragmentAndroidEventTest.kt b/formula-android-tests/src/test/java/com/instacart/formula/FragmentAndroidEventTest.kt index c5177b716..b21688879 100644 --- a/formula-android-tests/src/test/java/com/instacart/formula/FragmentAndroidEventTest.kt +++ b/formula-android-tests/src/test/java/com/instacart/formula/FragmentAndroidEventTest.kt @@ -7,7 +7,6 @@ import com.google.common.truth.Truth.assertThat import com.instacart.formula.android.Feature import com.instacart.formula.android.ViewFactory import com.instacart.formula.android.events.ActivityResult -import com.instacart.formula.samples.R import com.instacart.formula.test.TestFragmentActivity import com.instacart.formula.test.TestLifecycleKey import io.reactivex.rxjava3.core.Observable @@ -29,7 +28,7 @@ class FragmentAndroidEventTest { configureActivity = { initialContract = TestLifecycleKey() }, - contracts = { + contracts = { bind { _, _ -> Feature( @@ -53,17 +52,14 @@ class FragmentAndroidEventTest { private val activityRule = ActivityScenarioRule(TestFragmentActivity::class.java) - @get:Rule - val rule = RuleChain.outerRule(formulaRule).around(activityRule) + @get:Rule val rule = RuleChain.outerRule(formulaRule).around(activityRule) lateinit var scenario: ActivityScenario - @Before - fun setup() { + @Before fun setup() { scenario = activityRule.scenario } - @Test - fun `activity result`() { + @Test fun `activity result`() { FormulaAndroid.onActivityResult(scenario.activity(), 1, 2, null) val expected = listOf(ActivityResult(1, 2, null)) diff --git a/formula-android-tests/src/test/java/com/instacart/formula/FragmentLifecycleStateTest.kt b/formula-android-tests/src/test/java/com/instacart/formula/FragmentLifecycleStateTest.kt index c6e6189a2..ac3401457 100644 --- a/formula-android-tests/src/test/java/com/instacart/formula/FragmentLifecycleStateTest.kt +++ b/formula-android-tests/src/test/java/com/instacart/formula/FragmentLifecycleStateTest.kt @@ -4,14 +4,13 @@ import androidx.test.core.app.ActivityScenario import androidx.test.ext.junit.rules.ActivityScenarioRule import androidx.test.ext.junit.runners.AndroidJUnit4 import com.google.common.truth.Truth.assertThat +import com.instacart.formula.android.FormulaFragment import com.instacart.formula.android.ActivityStoreContext import com.instacart.formula.android.FeatureFactory -import com.instacart.formula.android.FormulaFragment import com.instacart.formula.android.FragmentKey -import com.instacart.formula.samples.R -import com.instacart.formula.test.TestFragmentActivity import com.instacart.formula.test.TestKey import com.instacart.formula.test.TestKeyWithId +import com.instacart.formula.test.TestFragmentActivity import io.reactivex.rxjava3.core.Observable import org.junit.Before import org.junit.Rule @@ -37,7 +36,7 @@ class FragmentLifecycleStateTest { configureActivity = { initialContract = TestKey() }, - contracts = { + contracts = { bind(featureFactory(this@activity)) bind(featureFactory(this@activity)) } @@ -58,21 +57,18 @@ class FragmentLifecycleStateTest { scenario = activityRule.scenario } - @Test - fun `is fragment started`() { + @Test fun `is fragment started`() { val events = selectStartedEvents(TestKey()) assertThat(events).containsExactly(false, true).inOrder() } - @Test - fun `is fragment resumed`() { + @Test fun `is fragment resumed`() { val events = selectResumedEvents(TestKey()) assertThat(events).containsExactly(false, true).inOrder() } @LooperMode(LooperMode.Mode.LEGACY) - @Test - fun `navigate forward`() { + @Test fun `navigate forward`() { navigateToTaskDetail() val contract = TestKey() diff --git a/formula-android-tests/src/test/java/com/instacart/formula/FragmentLifecycleTest.kt b/formula-android-tests/src/test/java/com/instacart/formula/FragmentLifecycleTest.kt index 813b4a5a7..ee0dc6721 100644 --- a/formula-android-tests/src/test/java/com/instacart/formula/FragmentLifecycleTest.kt +++ b/formula-android-tests/src/test/java/com/instacart/formula/FragmentLifecycleTest.kt @@ -9,7 +9,6 @@ import com.google.common.truth.Truth.assertThat import com.instacart.formula.android.Feature import com.instacart.formula.android.FeatureFactory import com.instacart.formula.android.ViewFactory -import com.instacart.formula.samples.R import com.instacart.formula.test.TestFragmentActivity import com.instacart.formula.test.TestFragmentLifecycleCallback import com.instacart.formula.test.TestLifecycleKey diff --git a/formula-android-tests/src/test/java/com/instacart/formula/TestFeatureFactory.kt b/formula-android-tests/src/test/java/com/instacart/formula/TestFeatureFactory.kt index 1653f304b..9f9eae77f 100644 --- a/formula-android-tests/src/test/java/com/instacart/formula/TestFeatureFactory.kt +++ b/formula-android-tests/src/test/java/com/instacart/formula/TestFeatureFactory.kt @@ -4,7 +4,6 @@ import com.instacart.formula.android.Feature import com.instacart.formula.android.FeatureFactory import com.instacart.formula.android.FragmentKey import com.instacart.formula.android.ViewFactory -import com.instacart.formula.samples.R import com.instacart.formula.test.TestFragmentActivity import io.reactivex.rxjava3.core.Observable diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e6233cf18..a0ea2142c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,7 +11,7 @@ lifecycle = "2.2.0" lifecycleKtx = '2.4.0-alpha03' androidTest = "1.4.0" espresso = "3.4.0" -robolectric = "4.6.1" +robolectric = "4.11.1" lint = "30.0.0" autoService = "1.0-rc7" From 4b7092272372e674da92b4e40f522e34b1aacda0 Mon Sep 17 00:00:00 2001 From: Matt Kranzler Date: Mon, 18 Dec 2023 13:04:57 -0800 Subject: [PATCH 14/18] Use kotlin 1.9.10 to match IC App --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a0ea2142c..6c552b81f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,7 +2,7 @@ android-gradle = "8.2.0" dokka-gradle = "1.4.32" -kotlin = "1.9.20" +kotlin = "1.9.10" coroutines = "1.5.2" compose = "1.5.4" From bbf0477fa29522156219b7a3f16a9d4a9f2e55af Mon Sep 17 00:00:00 2001 From: Matt Kranzler Date: Mon, 18 Dec 2023 13:57:07 -0800 Subject: [PATCH 15/18] Revert to compose 1.5.3 which supports kotlin 1.9.10 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6c552b81f..73ea4971b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,7 +4,7 @@ dokka-gradle = "1.4.32" kotlin = "1.9.10" coroutines = "1.5.2" -compose = "1.5.4" +compose = "1.5.3" androidX = "1.2.0" lifecycle = "2.2.0" From 83136725d2761434751a8763d963dba079eeae0d Mon Sep 17 00:00:00 2001 From: Matt Kranzler Date: Thu, 21 Dec 2023 13:02:25 -0800 Subject: [PATCH 16/18] Use jdk 18 --- .github/workflows/build-workflow.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-workflow.yml b/.github/workflows/build-workflow.yml index ac7c691f6..4f24a6d05 100644 --- a/.github/workflows/build-workflow.yml +++ b/.github/workflows/build-workflow.yml @@ -10,7 +10,7 @@ jobs: uses: actions/setup-java@v2 with: distribution: 'zulu' - java-version: 17 + java-version: 18 - name: Checkout the code uses: actions/checkout@v2 - name: Install Ruby @@ -51,7 +51,7 @@ jobs: uses: actions/setup-java@v2 with: distribution: 'zulu' - java-version: 17 + java-version: 18 - name: Checkout the code uses: actions/checkout@v2 - name: Assemble Counter From 2f04dfff117fa12cfc270b83f846a1dce7b9c073 Mon Sep 17 00:00:00 2001 From: Laimonas Turauskas Date: Wed, 3 Jan 2024 17:00:19 -0500 Subject: [PATCH 17/18] Fix mockito. --- .../src/test/java/com/instacart/formula/MockitoFormulaTest.kt | 4 +--- .../src/main/java/com/instacart/formula/StatelessFormula.kt | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/formula-android/src/test/java/com/instacart/formula/MockitoFormulaTest.kt b/formula-android/src/test/java/com/instacart/formula/MockitoFormulaTest.kt index e611ce956..3aba8e80f 100644 --- a/formula-android/src/test/java/com/instacart/formula/MockitoFormulaTest.kt +++ b/formula-android/src/test/java/com/instacart/formula/MockitoFormulaTest.kt @@ -16,9 +16,7 @@ class MockitoFormulaTest { assertThat(formula.type()).isEqualTo(MyFormula::class) } - class MyFormula : Formula() { - override fun initialState(input: Unit) = Unit - + class MyFormula : StatelessFormula() { override fun Snapshot.evaluate(): Evaluation { return Evaluation(Unit) } diff --git a/formula/src/main/java/com/instacart/formula/StatelessFormula.kt b/formula/src/main/java/com/instacart/formula/StatelessFormula.kt index 2a8bba7f5..164cfacd4 100644 --- a/formula/src/main/java/com/instacart/formula/StatelessFormula.kt +++ b/formula/src/main/java/com/instacart/formula/StatelessFormula.kt @@ -13,7 +13,7 @@ package com.instacart.formula abstract class StatelessFormula : IFormula { // Implements the common API used by the runtime. - private val implementation = object : Formula() { + private val implementation: Formula = object : Formula() { override fun initialState(input: Input) = Unit override fun Snapshot.evaluate(): Evaluation { From 94bf9aebf17a78dff6f93f6237ee50becca1342d Mon Sep 17 00:00:00 2001 From: Laimonas Turauskas Date: Wed, 3 Jan 2024 17:06:56 -0500 Subject: [PATCH 18/18] Use java 18. --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index fc6509b8d..77398c20b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -34,7 +34,7 @@ allprojects { } subprojects { - val javaVersion = JavaVersion.VERSION_11 + val javaVersion = JavaVersion.VERSION_18 tasks.withType().configureEach { dokkaSourceSets.named("main") {