summaryrefslogtreecommitdiff
path: root/common/testutils/devicetests/com/android/testutils/DevSdkIgnoreRunner.kt
diff options
context:
space:
mode:
Diffstat (limited to 'common/testutils/devicetests/com/android/testutils/DevSdkIgnoreRunner.kt')
-rw-r--r--common/testutils/devicetests/com/android/testutils/DevSdkIgnoreRunner.kt91
1 files changed, 0 insertions, 91 deletions
diff --git a/common/testutils/devicetests/com/android/testutils/DevSdkIgnoreRunner.kt b/common/testutils/devicetests/com/android/testutils/DevSdkIgnoreRunner.kt
deleted file mode 100644
index 2e73666b..00000000
--- a/common/testutils/devicetests/com/android/testutils/DevSdkIgnoreRunner.kt
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.testutils
-
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import com.android.testutils.DevSdkIgnoreRule.IgnoreAfter
-import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo
-import org.junit.runner.Description
-import org.junit.runner.Runner
-import org.junit.runner.manipulation.Filter
-import org.junit.runner.manipulation.Filterable
-import org.junit.runner.manipulation.NoTestsRemainException
-import org.junit.runner.manipulation.Sortable
-import org.junit.runner.manipulation.Sorter
-import org.junit.runner.notification.RunNotifier
-import kotlin.jvm.Throws
-
-/**
- * A runner that can skip tests based on the development SDK as defined in [DevSdkIgnoreRule].
- *
- * Generally [DevSdkIgnoreRule] should be used for that purpose (using rules is preferable over
- * replacing the test runner), however JUnit runners inspect all methods in the test class before
- * processing test rules. This may cause issues if the test methods are referencing classes that do
- * not exist on the SDK of the device the test is run on.
- *
- * This runner inspects [IgnoreAfter] and [IgnoreUpTo] annotations on the test class, and will skip
- * the whole class if they do not match the development SDK as defined in [DevSdkIgnoreRule].
- * Otherwise, it will delegate to [AndroidJUnit4] to run the test as usual.
- *
- * Example usage:
- *
- * @RunWith(DevSdkIgnoreRunner::class)
- * @IgnoreUpTo(Build.VERSION_CODES.Q)
- * class MyTestClass { ... }
- */
-class DevSdkIgnoreRunner(private val klass: Class<*>) : Runner(), Filterable, Sortable {
- private val baseRunner = klass.let {
- val ignoreAfter = it.getAnnotation(IgnoreAfter::class.java)
- val ignoreUpTo = it.getAnnotation(IgnoreUpTo::class.java)
-
- if (isDevSdkInRange(ignoreUpTo, ignoreAfter)) AndroidJUnit4(klass) else null
- }
-
- override fun run(notifier: RunNotifier) {
- if (baseRunner != null) {
- baseRunner.run(notifier)
- return
- }
-
- // Report a single, skipped placeholder test for this class, as the class is expected to
- // report results when run. In practice runners that apply the Filterable implementation
- // would see a NoTestsRemainException and not call the run method.
- notifier.fireTestIgnored(
- Description.createTestDescription(klass, "skippedClassForDevSdkMismatch"))
- }
-
- override fun getDescription(): Description {
- return baseRunner?.description ?: Description.createSuiteDescription(klass)
- }
-
- /**
- * Get the test count before applying the [Filterable] implementation.
- */
- override fun testCount(): Int {
- // When ignoring the tests, a skipped placeholder test is reported, so test count is 1.
- return baseRunner?.testCount() ?: 1
- }
-
- @Throws(NoTestsRemainException::class)
- override fun filter(filter: Filter?) {
- baseRunner?.filter(filter) ?: throw NoTestsRemainException()
- }
-
- override fun sort(sorter: Sorter?) {
- baseRunner?.sort(sorter)
- }
-} \ No newline at end of file