From cf8cf278e49e1efd847620a77db51c3694c4846f Mon Sep 17 00:00:00 2001 From: Mike Hardy Date: Thu, 1 Feb 2024 12:38:00 -0500 Subject: [PATCH] refactor: shared "testlib" module, used by AnkiDroid test and androidTest --- AnkiDroid/build.gradle | 11 +++- settings.gradle.kts | 2 +- testlib/.gitignore | 1 + testlib/build.gradle.kts | 52 +++++++++++++++++++ testlib/src/main/AndroidManifest.xml | 2 + .../testutils/IgnoreFlakyTestsInCIRule.kt | 0 6 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 testlib/.gitignore create mode 100644 testlib/build.gradle.kts create mode 100644 testlib/src/main/AndroidManifest.xml rename {AnkiDroid/src/test => testlib/src/main}/java/com/ichi2/testutils/IgnoreFlakyTestsInCIRule.kt (100%) diff --git a/AnkiDroid/build.gradle b/AnkiDroid/build.gradle index 5b3f61657c..8f5221349e 100644 --- a/AnkiDroid/build.gradle +++ b/AnkiDroid/build.gradle @@ -76,9 +76,9 @@ android { // needed for upgrades to be offered correctly. versionCode=21700117 versionName="2.17alpha17" - minSdk 23 + minSdk 23 // also in testlib/build.gradle.kts // After #13695: change .tests_emulator.yml - targetSdk 33 // change api/build.gradle.kts and update ../robolectricDownloader.gradle at same time + targetSdk 33 // also in [api|testlib]/build.gradle.kts and ../robolectricDownloader.gradle testApplicationId "com.ichi2.anki.tests" vectorDrawables.useSupportLibrary = true testInstrumentationRunner 'com.ichi2.testutils.NewCollectionPathTestRunner' @@ -155,6 +155,8 @@ android { * Product Flavors are used for Amazon App Store and Google Play Store. * This is because we cannot use Camera Permissions in Amazon App Store (for FireTv etc...) * Therefore, different AndroidManifest for Camera Permissions is used in Amazon flavor. + * + * This flavor block must stay in sync with the same block in testlib/build.gradle.kts */ flavorDimensions += "appStore" productFlavors { @@ -369,6 +371,8 @@ dependencies { // build via AnkiDroidApp. implementation 'com.squareup.leakcanary:leakcanary-android:2.13' + testImplementation project(':testlib') + // A path for a testing library which provide Parameterized Test testImplementation "org.junit.jupiter:junit-jupiter:$junit_version" testImplementation "org.junit.jupiter:junit-jupiter-params:$junit_version" @@ -391,6 +395,9 @@ dependencies { // in a JvmTest we need org.json.JSONObject to not be mocked testImplementation 'org.json:json:20231013' testImplementation 'io.github.ivanshafran:shared-preferences-mock:1.2.4' + + androidTestImplementation project(':testlib') + // May need a resolution strategy for support libs to our versions androidTestImplementation "androidx.test.espresso:espresso-core:$espresso_version" androidTestImplementation("androidx.test.espresso:espresso-contrib:$espresso_version") { diff --git a/settings.gradle.kts b/settings.gradle.kts index 72d79e8d9e..df05afef76 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -26,4 +26,4 @@ dependencyResolutionManagement { } } -include(":lint-rules", ":api", ":AnkiDroid") +include(":lint-rules", ":api", ":AnkiDroid", ":testlib") diff --git a/testlib/.gitignore b/testlib/.gitignore new file mode 100644 index 0000000000..42afabfd2a --- /dev/null +++ b/testlib/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/testlib/build.gradle.kts b/testlib/build.gradle.kts new file mode 100644 index 0000000000..d59034c3b8 --- /dev/null +++ b/testlib/build.gradle.kts @@ -0,0 +1,52 @@ +plugins { + id("com.android.library") + id("kotlin-android") +} + +android { + namespace = "com.ichi2.anki.testlib" + compileSdk = 34 + + defaultConfig { + minSdk = 23 + } + + flavorDimensions += "appStore" + productFlavors { + create("play") { + dimension = "appStore" + } + create("amazon") { + dimension = "appStore" + } + // A 'full' build has no restrictions on storage/camera. Distributed on GitHub/F-Droid + create("full") { + dimension = "appStore" + } + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + + kotlinOptions { + jvmTarget = "11" + freeCompilerArgs += "-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi" + } + + packaging { + resources { + excludes += "META-INF/DEPENDENCIES" + } + } + } +} + +dependencies { + implementation(project(":AnkiDroid")) + compileOnly("org.jetbrains.kotlinx:kotlinx-coroutines-core") + compileOnly("org.hamcrest:hamcrest:" + rootProject.ext["hamcrest_version"]) + compileOnly("org.junit.jupiter:junit-jupiter:" + rootProject.ext["junit_version"]) + compileOnly("org.junit.jupiter:junit-jupiter-params:" + rootProject.ext["junit_version"]) + compileOnly("org.junit.vintage:junit-vintage-engine:" + rootProject.ext["junit_version"]) +} diff --git a/testlib/src/main/AndroidManifest.xml b/testlib/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..568741e54f --- /dev/null +++ b/testlib/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/AnkiDroid/src/test/java/com/ichi2/testutils/IgnoreFlakyTestsInCIRule.kt b/testlib/src/main/java/com/ichi2/testutils/IgnoreFlakyTestsInCIRule.kt similarity index 100% rename from AnkiDroid/src/test/java/com/ichi2/testutils/IgnoreFlakyTestsInCIRule.kt rename to testlib/src/main/java/com/ichi2/testutils/IgnoreFlakyTestsInCIRule.kt