From 955b5a38c90537bfd2db0bd8f6d746956a5f4026 Mon Sep 17 00:00:00 2001 From: Ryan Brooks Date: Fri, 18 Oct 2024 12:13:05 -0700 Subject: [PATCH] Remove runners now that they're not relevant (#275) * Remove runners now that they're not relevant * Add specific preview filter to Gradle plugin for easier snapshot debugging --- .../gradle/tasks/snapshots/LocalSnapshots.kt | 3 -- .../tasks/snapshots/utils/PreviewUtils.kt | 1 - .../snapshots/runner/SnapshotsRunner.kt | 50 ------------------ .../runner/SnapshotsRunnerBuilder.kt | 51 ------------------- 4 files changed, 105 deletions(-) delete mode 100644 snapshots/snapshots/src/main/kotlin/com/emergetools/snapshots/runner/SnapshotsRunner.kt delete mode 100644 snapshots/snapshots/src/main/kotlin/com/emergetools/snapshots/runner/SnapshotsRunnerBuilder.kt diff --git a/gradle-plugin/plugin/src/main/kotlin/com/emergetools/android/gradle/tasks/snapshots/LocalSnapshots.kt b/gradle-plugin/plugin/src/main/kotlin/com/emergetools/android/gradle/tasks/snapshots/LocalSnapshots.kt index c8a83aa2..d7a3dfd0 100644 --- a/gradle-plugin/plugin/src/main/kotlin/com/emergetools/android/gradle/tasks/snapshots/LocalSnapshots.kt +++ b/gradle-plugin/plugin/src/main/kotlin/com/emergetools/android/gradle/tasks/snapshots/LocalSnapshots.kt @@ -134,9 +134,6 @@ abstract class LocalSnapshots : DefaultTask() { it.add(key) it.add(value) } - it.add("-e") - it.add("runnerBuilder") - it.add("com.emergetools.snapshots.runner.SnapshotsRunnerBuilder") if (composeSnapshotsJson.exists()) { push( localFile = composeSnapshotsJson.absolutePath, diff --git a/gradle-plugin/plugin/src/main/kotlin/com/emergetools/android/gradle/tasks/snapshots/utils/PreviewUtils.kt b/gradle-plugin/plugin/src/main/kotlin/com/emergetools/android/gradle/tasks/snapshots/utils/PreviewUtils.kt index 3e215b31..f565d48f 100644 --- a/gradle-plugin/plugin/src/main/kotlin/com/emergetools/android/gradle/tasks/snapshots/utils/PreviewUtils.kt +++ b/gradle-plugin/plugin/src/main/kotlin/com/emergetools/android/gradle/tasks/snapshots/utils/PreviewUtils.kt @@ -16,7 +16,6 @@ import org.jf.dexlib2.iface.value.LongEncodedValue import org.jf.dexlib2.iface.value.StringEncodedValue import org.slf4j.Logger import java.io.File -import kotlin.math.log object PreviewUtils { diff --git a/snapshots/snapshots/src/main/kotlin/com/emergetools/snapshots/runner/SnapshotsRunner.kt b/snapshots/snapshots/src/main/kotlin/com/emergetools/snapshots/runner/SnapshotsRunner.kt deleted file mode 100644 index 97fdd804..00000000 --- a/snapshots/snapshots/src/main/kotlin/com/emergetools/snapshots/runner/SnapshotsRunner.kt +++ /dev/null @@ -1,50 +0,0 @@ -package com.emergetools.snapshots.runner - -import android.util.Log -import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner -import com.emergetools.snapshots.EmergeSnapshots -import com.emergetools.snapshots.compose.EmergeComposeSnapshotReflectiveParameterizedInvoker -import org.junit.Rule -import org.junit.runner.notification.RunNotifier - -/** - * Simple runner that will run a test class if it has a @Rule annotation of type [EmergeSnapshots]. - * Otherwise it will skip the test as we're only interested in running Snapshot tests and not - * unrelated instrumentation tests. - */ -internal class SnapshotsRunner( - private val testClass: Class<*>, - private val useReflectiveInvoke: Boolean, -) : AndroidJUnit4ClassRunner(testClass) { - - override fun run(notifier: RunNotifier) { - val hasEmergeSnapshotRule = hasEmergeSnapshotRule(testClass) - val isReflectiveInvoker = - testClass == EmergeComposeSnapshotReflectiveParameterizedInvoker::class.java - - if (hasEmergeSnapshotRule || (useReflectiveInvoke && isReflectiveInvoker)) { - Log.d(TAG, "Running test class: ${testClass.simpleName}") - super.run(notifier) - } else { - // Note: We intentionally do not mark the test as ignored as we - // don't care to acknowledge the test to ensure it doesn't take test run time/get assigned to an emulator - Log.d(TAG, "Ignoring test class: ${testClass.simpleName}") - } - } - - companion object { - const val TAG = "SnapshotsRunner" - - private fun hasEmergeSnapshotRule(testClass: Class<*>): Boolean { - return testClass.methods.any { - val hasEmergeSnapshotRule = - it.isAnnotationPresent(Rule::class.java) && it.returnType == EmergeSnapshots::class.java - Log.d( - TAG, - "${testClass.simpleName} method ${it.name} hasEmergeSnapshotRule: $hasEmergeSnapshotRule" - ) - hasEmergeSnapshotRule - } - } - } -} diff --git a/snapshots/snapshots/src/main/kotlin/com/emergetools/snapshots/runner/SnapshotsRunnerBuilder.kt b/snapshots/snapshots/src/main/kotlin/com/emergetools/snapshots/runner/SnapshotsRunnerBuilder.kt deleted file mode 100644 index 63e16e8d..00000000 --- a/snapshots/snapshots/src/main/kotlin/com/emergetools/snapshots/runner/SnapshotsRunnerBuilder.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.emergetools.snapshots.runner - -import android.util.Log -import androidx.test.platform.app.InstrumentationRegistry -import com.emergetools.snapshots.compose.EmergeComposeSnapshotReflectiveParameterizedInvoker -import org.junit.Test -import org.junit.internal.builders.JUnit4Builder -import org.junit.runner.Runner -import org.junit.runners.Parameterized - -class SnapshotsRunnerBuilder : JUnit4Builder() { - override fun runnerForClass(testClass: Class<*>): Runner? { - val args = InstrumentationRegistry.getArguments() - val invokeDataPath = args.getString( - EmergeComposeSnapshotReflectiveParameterizedInvoker.ARG_REFLECTIVE_INVOKE_DATA_PATH - ) - Log.d(TAG, "invokeDataPath: $invokeDataPath") - - // If one method in the class has a @Test method, we can safely assume it's a test class - // and the SnapshotRunner should handle. - return if ( - testClass.name == EmergeComposeSnapshotReflectiveParameterizedInvoker::class.java.name - ) { - Log.d(TAG, "Using Parameterized for class: ${testClass.simpleName}") - Parameterized(testClass) - } else if (isTestClass(testClass)) { - Log.d(TAG, "Using SnapshotsRunner for class: ${testClass.simpleName}") - SnapshotsRunner(testClass, invokeDataPath != null) - } else { - // Fallback to allow AndroidRunnerBuilder to handle the class. - Log.d(TAG, "Using default runner for class: ${testClass.simpleName}") - null - } - } - - companion object { - const val TAG = "SnapshotsRunnerBuilder" - - private fun isTestClass(testClass: Class<*>): Boolean { - // Check if the class has a method annotated with @Test - return testClass.methods.any { - val annotatedWithTest = it.isAnnotationPresent(Test::class.java) - Log.d( - TAG, - "${testClass.simpleName} method ${it.name} annotated with test: $annotatedWithTest" - ) - annotatedWithTest - } - } - } -}