diff --git a/test_runner/src/main/kotlin/ftl/run/platform/android/CreateAndroidTestContext.kt b/test_runner/src/main/kotlin/ftl/run/platform/android/CreateAndroidTestContext.kt index 9d56e81392..60924b5f05 100644 --- a/test_runner/src/main/kotlin/ftl/run/platform/android/CreateAndroidTestContext.kt +++ b/test_runner/src/main/kotlin/ftl/run/platform/android/CreateAndroidTestContext.kt @@ -90,7 +90,8 @@ private val ignoredAnnotations = listOf( private fun String.toFlankTestMethod() = FlankTestMethod("class $this", ignored = false, isParameterizedClass = true) -private fun InstrumentationTestContext.getParametrizedClasses(): List = +@VisibleForTesting +internal fun InstrumentationTestContext.getParametrizedClasses(): List = DexParser.readDexFiles(test.local).fold(emptyList()) { accumulator, file: DexFile -> accumulator + file.classDefs .filter(file::isParametrizedClass) diff --git a/test_runner/src/test/kotlin/ftl/run/platform/android/CreateAndroidTestContextKtTest.kt b/test_runner/src/test/kotlin/ftl/run/platform/android/CreateAndroidTestContextKtTest.kt index 0808500490..edea40677f 100644 --- a/test_runner/src/test/kotlin/ftl/run/platform/android/CreateAndroidTestContextKtTest.kt +++ b/test_runner/src/test/kotlin/ftl/run/platform/android/CreateAndroidTestContextKtTest.kt @@ -1,19 +1,23 @@ package ftl.run.platform.android +import com.google.common.truth.Truth.assertThat import com.linkedin.dex.parser.DexParser import com.linkedin.dex.parser.DexParser.Companion.findTestMethods import com.linkedin.dex.parser.TestMethod import ftl.args.AndroidArgs import ftl.filter.TestFilter +import ftl.filter.TestFilters import ftl.run.model.AndroidTestContext import ftl.run.model.InstrumentationTestContext import ftl.run.model.RoboTestContext import ftl.test.util.mixedConfigYaml import ftl.test.util.should import ftl.util.FileReference +import ftl.util.FlankTestMethod import io.mockk.every import io.mockk.mockk import io.mockk.mockkObject +import io.mockk.mockkStatic import kotlinx.coroutines.runBlocking import org.junit.Assert.assertEquals import org.junit.Test @@ -79,4 +83,32 @@ class CreateAndroidTestContextKtTest { // given assertEquals(actual, 2) } + + @Test + fun `should not append all parameterized classes to list of test methods`() { + val testInstrumentationContext = InstrumentationTestContext( + FileReference("./src/test/kotlin/ftl/fixtures/tmp/apk/app-debug.apk", ""), + FileReference("./src/test/kotlin/ftl/fixtures/tmp/apk/app-single-success-debug-androidTest.apk", "") + ) + + mockkStatic("ftl.run.platform.android.CreateAndroidTestContextKt") { + every { testInstrumentationContext.getParametrizedClasses() } returns listOf("foo.bar.ParamClass") + } + mockkObject(DexParser) { + every { findTestMethods(any()) } returns listOf( + TestMethod("foo.bar.TestClass1#test1", emptyList()), + TestMethod("foo.bar.TestClass1#test2", emptyList()), + TestMethod("foo.bar.TestClass2#test1", emptyList()), + TestMethod("foo.bar.TestClass2#test2", emptyList()), + TestMethod("foo.bar.ParamClass#testParam", emptyList()), + ) + + val actual = testInstrumentationContext.getFlankTestMethods(TestFilters.fromTestTargets(listOf("class foo.bar.TestClass1"))) + val expected = listOf( + FlankTestMethod("class foo.bar.TestClass1#test1"), + FlankTestMethod("class foo.bar.TestClass1#test2") + ) + assertThat(actual).isEqualTo(expected) + } + } }