Skip to content

Commit b28c5c7

Browse files
committed
Ensure tests are running with proper permissions and handle SecurityException
1 parent d884531 commit b28c5c7

File tree

1 file changed

+21
-4
lines changed

1 file changed

+21
-4
lines changed

lib/src/androidTest/kotlin/at/bitfire/ical4android/DmfsStyleProvidersTaskTest.kt

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,15 @@ package at.bitfire.ical4android
99
import androidx.test.platform.app.InstrumentationRegistry
1010
import androidx.test.rule.GrantPermissionRule
1111
import org.junit.After
12+
import org.junit.Assert.assertNotNull
1213
import org.junit.Assume
1314
import org.junit.Before
1415
import org.junit.Rule
16+
import org.junit.rules.TestRule
17+
import org.junit.runner.Description
1518
import org.junit.runner.RunWith
1619
import org.junit.runners.Parameterized
20+
import org.junit.runners.model.Statement
1721
import java.util.logging.Logger
1822

1923
@RunWith(Parameterized::class)
@@ -28,17 +32,30 @@ abstract class DmfsStyleProvidersTaskTest(
2832
fun taskProviders() = listOf(TaskProvider.ProviderName.OpenTasks,TaskProvider.ProviderName.TasksOrg)
2933
}
3034

31-
@JvmField
32-
@Rule
33-
val permissionRule = GrantPermissionRule.grant(*providerName.permissions)
35+
@get:Rule
36+
val permissionRule: TestRule = object : TestRule {
37+
val rule = GrantPermissionRule.grant(*providerName.permissions)
38+
39+
override fun apply(base: Statement, description: Description) =
40+
object: Statement() {
41+
override fun evaluate() {
42+
val innerStatement = rule.apply(base, description)
43+
try {
44+
innerStatement.evaluate()
45+
} catch (e: SecurityException) {
46+
Assume.assumeNoException(e)
47+
}
48+
}
49+
}
50+
}
3451

3552
var providerOrNull: TaskProvider? = null
3653
lateinit var provider: TaskProvider
3754

3855
@Before
3956
open fun prepare() {
4057
providerOrNull = TaskProvider.acquire(InstrumentationRegistry.getInstrumentation().context, providerName)
41-
Assume.assumeNotNull(providerOrNull) // will halt here if providerOrNull is null
58+
assertNotNull("$providerName is not installed", providerOrNull != null)
4259

4360
provider = providerOrNull!!
4461
Logger.getLogger(javaClass.name).fine("Using task provider: $provider")

0 commit comments

Comments
 (0)