diff options
author | Ricki Hirner <hirner@bitfire.at> | 2022-06-16 20:10:01 +0300 |
---|---|---|
committer | Ricki Hirner <hirner@bitfire.at> | 2022-06-16 20:10:01 +0300 |
commit | 4f89e82dfa6943706cc85dd6ee2ba9e944a59d3b (patch) | |
tree | c59cf8851951d8c2815d173578aac3e166a01516 | |
parent | 750b234490de3e6270f48f358b8d20963eb418e2 (diff) |
Correctly connect/disconnect providers and grant permissions
7 files changed, 123 insertions, 94 deletions
diff --git a/build.gradle b/build.gradle index b96cafd..99e65ca 100644 --- a/build.gradle +++ b/build.gradle @@ -18,7 +18,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.2.0' + classpath 'com.android.tools.build:gradle:7.2.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${versions.kotlin}" classpath "org.jetbrains.dokka:dokka-gradle-plugin:${versions.dokka}" } @@ -101,7 +101,7 @@ dependencies { implementation "commons-io:commons-io:${versions.commonsIO}" implementation 'org.slf4j:slf4j-jdk14:1.7.32' - implementation 'androidx.core:core-ktx:1.7.0' + implementation 'androidx.core:core-ktx:1.8.0' androidTestImplementation 'androidx.test:core:1.4.0' androidTestImplementation 'androidx.test:runner:1.4.0' diff --git a/src/androidTest/java/at/bitfire/ical4android/AbstractTasksTest.kt b/src/androidTest/java/at/bitfire/ical4android/AbstractTasksTest.kt index 16431eb..e77b7f9 100644 --- a/src/androidTest/java/at/bitfire/ical4android/AbstractTasksTest.kt +++ b/src/androidTest/java/at/bitfire/ical4android/AbstractTasksTest.kt @@ -5,16 +5,18 @@ package at.bitfire.ical4android import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.rule.GrantPermissionRule import org.junit.After import org.junit.Assume import org.junit.Before +import org.junit.Rule import org.junit.runner.RunWith import org.junit.runners.Parameterized @RunWith(Parameterized::class) abstract class AbstractTasksTest( - val providerName: TaskProvider.ProviderName + val providerName: TaskProvider.ProviderName ) { companion object { @@ -23,20 +25,19 @@ abstract class AbstractTasksTest( fun taskProviders() = listOf(TaskProvider.ProviderName.OpenTasks,TaskProvider.ProviderName.TasksOrg) } - private val providerOrNull: TaskProvider? by lazy { - TaskProvider.acquire(InstrumentationRegistry.getInstrumentation().context, providerName) - } - protected val provider: TaskProvider by lazy { - Assume.assumeNotNull(providerOrNull) - providerOrNull!! - } + @JvmField + @Rule + val permissionRule = GrantPermissionRule.grant(*providerName.permissions) - init { - TestUtils.requestPermissions(providerName.permissions) - } + var providerOrNull: TaskProvider? = null + lateinit var provider: TaskProvider @Before open fun prepare() { + providerOrNull = TaskProvider.acquire(InstrumentationRegistry.getInstrumentation().context, providerName) + Assume.assumeNotNull(providerOrNull) // will halt here if providerOrNull is null + + provider = providerOrNull!! Ical4Android.log.fine("Using task provider: $provider") } @@ -45,4 +46,4 @@ abstract class AbstractTasksTest( providerOrNull?.close() } -} +}
\ No newline at end of file diff --git a/src/androidTest/java/at/bitfire/ical4android/AndroidCalendarTest.kt b/src/androidTest/java/at/bitfire/ical4android/AndroidCalendarTest.kt index 3af1bb8..a8ab2f4 100644 --- a/src/androidTest/java/at/bitfire/ical4android/AndroidCalendarTest.kt +++ b/src/androidTest/java/at/bitfire/ical4android/AndroidCalendarTest.kt @@ -20,40 +20,46 @@ import at.bitfire.ical4android.impl.TestCalendar import at.bitfire.ical4android.impl.TestEvent import net.fortuna.ical4j.model.property.DtEnd import net.fortuna.ical4j.model.property.DtStart -import org.junit.After +import org.junit.* import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull -import org.junit.Before -import org.junit.Rule -import org.junit.Test class AndroidCalendarTest { - @JvmField - @Rule - val permissionRule = GrantPermissionRule.grant( + companion object { + + @JvmField + @ClassRule + val permissionRule = GrantPermissionRule.grant( Manifest.permission.READ_CALENDAR, Manifest.permission.WRITE_CALENDAR - )!! + ) - private val testAccount = Account("ical4android.AndroidCalendarTest", CalendarContract.ACCOUNT_TYPE_LOCAL) + lateinit var provider: ContentProviderClient + + @BeforeClass + @JvmStatic + fun connectProvider() { + provider = InstrumentationRegistry.getInstrumentation().targetContext.contentResolver.acquireContentProviderClient(CalendarContract.AUTHORITY)!! + } + + @AfterClass + @JvmStatic + fun closeProvider() { + provider.closeCompat() + } - private lateinit var provider: ContentProviderClient + } + + private val testAccount = Account("ical4android.AndroidCalendarTest", CalendarContract.ACCOUNT_TYPE_LOCAL) @Before fun prepare() { - provider = InstrumentationRegistry.getInstrumentation().targetContext.contentResolver.acquireContentProviderClient(CalendarContract.AUTHORITY)!! - // make sure there are no colors for testAccount AndroidCalendar.removeColors(provider, testAccount) assertEquals(0, countColors(testAccount)) } - @After - fun shutdown() { - provider.closeCompat() - } - @Test fun testManageCalendars() { diff --git a/src/androidTest/java/at/bitfire/ical4android/AndroidEventTest.kt b/src/androidTest/java/at/bitfire/ical4android/AndroidEventTest.kt index d9839ae..baaabb5 100644 --- a/src/androidTest/java/at/bitfire/ical4android/AndroidEventTest.kt +++ b/src/androidTest/java/at/bitfire/ical4android/AndroidEventTest.kt @@ -5,6 +5,7 @@ package at.bitfire.ical4android import android.Manifest import android.accounts.Account +import android.content.ContentProviderClient import android.content.ContentUris import android.content.ContentValues import android.database.DatabaseUtils @@ -25,11 +26,8 @@ import net.fortuna.ical4j.model.component.VAlarm import net.fortuna.ical4j.model.parameter.* import net.fortuna.ical4j.model.property.* import net.fortuna.ical4j.util.TimeZones -import org.junit.After +import org.junit.* import org.junit.Assert.* -import org.junit.Before -import org.junit.Rule -import org.junit.Test import java.net.URI import java.time.Duration import java.time.Period @@ -37,12 +35,30 @@ import java.util.* class AndroidEventTest { - @JvmField - @Rule - val permissionRule = GrantPermissionRule.grant( + companion object { + + @JvmField + @ClassRule + val permissionRule = GrantPermissionRule.grant( Manifest.permission.READ_CALENDAR, Manifest.permission.WRITE_CALENDAR - )!! + ) + + lateinit var provider: ContentProviderClient + + @BeforeClass + @JvmStatic + fun connectProvider() { + provider = getInstrumentation().targetContext.contentResolver.acquireContentProviderClient(CalendarContract.AUTHORITY)!! + } + + @AfterClass + @JvmStatic + fun closeProvider() { + provider.closeCompat() + } + + } private val testAccount = Account("ical4android@example.com", CalendarContract.ACCOUNT_TYPE_LOCAL) @@ -52,11 +68,6 @@ class AndroidEventTest { private val tzIdDefault = java.util.TimeZone.getDefault().id private val tzDefault = DateUtils.ical4jTimeZone(tzIdDefault) - - private val provider by lazy { - getInstrumentation().targetContext.contentResolver.acquireContentProviderClient(CalendarContract.AUTHORITY)!! - } - private lateinit var calendarUri: Uri private lateinit var calendar: TestCalendar @@ -70,7 +81,6 @@ class AndroidEventTest { @After fun shutdown() { calendar.delete() - provider.closeCompat() } diff --git a/src/androidTest/java/at/bitfire/ical4android/JtxCollectionTest.kt b/src/androidTest/java/at/bitfire/ical4android/JtxCollectionTest.kt index 7840b95..29b5157 100644 --- a/src/androidTest/java/at/bitfire/ical4android/JtxCollectionTest.kt +++ b/src/androidTest/java/at/bitfire/ical4android/JtxCollectionTest.kt @@ -6,25 +6,47 @@ package at.bitfire.ical4android import android.accounts.Account import android.content.ContentProviderClient -import android.content.ContentResolver import android.content.ContentValues -import android.content.Context import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.rule.GrantPermissionRule import at.bitfire.ical4android.MiscUtils.ContentProviderClientHelper.closeCompat import at.bitfire.ical4android.impl.TestJtxCollection import at.techbee.jtx.JtxContract import at.techbee.jtx.JtxContract.asSyncAdapter import junit.framework.TestCase.* -import org.junit.After -import org.junit.Before -import org.junit.Test +import org.junit.* class JtxCollectionTest { + companion object { + + val context = InstrumentationRegistry.getInstrumentation().targetContext + val contentResolver = context.contentResolver + + private lateinit var client: ContentProviderClient + + @JvmField + @ClassRule + val permissionRule = GrantPermissionRule.grant(*TaskProvider.PERMISSIONS_JTX) + + @BeforeClass + @JvmStatic + fun openProvider() { + val clientOrNull = contentResolver.acquireContentProviderClient(JtxContract.AUTHORITY) + Assume.assumeNotNull(clientOrNull) + + client = clientOrNull!! + } + + @AfterClass + @JvmStatic + fun closeProvider() { + client.closeCompat() + } + + } + private val testAccount = Account("TEST", JtxContract.JtxCollection.TEST_ACCOUNT_TYPE) - private lateinit var contentResolver: ContentResolver - private lateinit var client: ContentProviderClient - lateinit var context: Context private val url = "https://jtx.techbee.at" private val displayname = "jtx" @@ -38,14 +60,6 @@ class JtxCollectionTest { put(JtxContract.JtxCollection.SYNC_VERSION, syncversion) } - @Before - fun setUp() { - context = InstrumentationRegistry.getInstrumentation().targetContext - contentResolver = context.contentResolver - TestUtils.requestPermissions(TaskProvider.ProviderName.JtxBoard.permissions) - client = contentResolver.acquireContentProviderClient(JtxContract.AUTHORITY)!! - } - @After fun tearDown() { var collections = JtxCollection.find(testAccount, client, context, TestJtxCollection.Factory, null, null) @@ -54,7 +68,6 @@ class JtxCollectionTest { } collections = JtxCollection.find(testAccount, client, context, TestJtxCollection.Factory, null, null) assertEquals(0, collections.size) - client.closeCompat() } diff --git a/src/androidTest/java/at/bitfire/ical4android/JtxICalObjectTest.kt b/src/androidTest/java/at/bitfire/ical4android/JtxICalObjectTest.kt index 9527dba..f82c07d 100644 --- a/src/androidTest/java/at/bitfire/ical4android/JtxICalObjectTest.kt +++ b/src/androidTest/java/at/bitfire/ical4android/JtxICalObjectTest.kt @@ -6,12 +6,12 @@ package at.bitfire.ical4android import android.accounts.Account import android.content.ContentProviderClient -import android.content.ContentResolver import android.content.ContentValues -import android.content.Context import android.database.DatabaseUtils import android.os.ParcelFileDescriptor import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.rule.GrantPermissionRule +import at.bitfire.ical4android.MiscUtils.ContentProviderClientHelper.closeCompat import at.bitfire.ical4android.impl.TestJtxCollection import at.techbee.jtx.JtxContract import at.techbee.jtx.JtxContract.JtxICalObject @@ -20,21 +20,43 @@ import at.techbee.jtx.JtxContract.asSyncAdapter import junit.framework.TestCase.* import net.fortuna.ical4j.model.Calendar import net.fortuna.ical4j.model.Property -import org.junit.After -import org.junit.Assert -import org.junit.Before -import org.junit.Test +import org.junit.* import java.io.ByteArrayOutputStream import java.io.InputStreamReader class JtxICalObjectTest { + companion object { + + val context = InstrumentationRegistry.getInstrumentation().targetContext + val contentResolver = context.contentResolver + + private lateinit var client: ContentProviderClient + + @JvmField + @ClassRule + val permissionRule = GrantPermissionRule.grant(*TaskProvider.PERMISSIONS_JTX) + + @BeforeClass + @JvmStatic + fun openProvider() { + val clientOrNull = contentResolver.acquireContentProviderClient(JtxContract.AUTHORITY) + Assume.assumeNotNull(clientOrNull) + + client = clientOrNull!! + } + + @AfterClass + @JvmStatic + fun closeProvider() { + client.closeCompat() + } + + } + private val testAccount = Account("TEST", JtxContract.JtxCollection.TEST_ACCOUNT_TYPE) - private lateinit var contentResolver: ContentResolver - private lateinit var client: ContentProviderClient var collection: JtxCollection<at.bitfire.ical4android.JtxICalObject>? = null var sample: at.bitfire.ical4android.JtxICalObject? = null - lateinit var context: Context private val url = "https://jtx.techbee.at" private val displayname = "jtxTest" @@ -50,11 +72,6 @@ class JtxICalObjectTest { @Before fun setUp() { - context = InstrumentationRegistry.getInstrumentation().targetContext - contentResolver = context.contentResolver - TestUtils.requestPermissions(TaskProvider.ProviderName.JtxBoard.permissions) - client = contentResolver.acquireContentProviderClient(JtxContract.AUTHORITY)!! - val collectionUri = JtxCollection.create(testAccount, client, cvCollection) assertNotNull(collectionUri) collection = JtxCollection.find(testAccount, client, context, TestJtxCollection.Factory, null, null)[0] @@ -104,7 +121,6 @@ class JtxICalObjectTest { @After fun tearDown() { - collection?.delete() val collections = JtxCollection.find(testAccount, client, context, TestJtxCollection.Factory, null, null) assertEquals(0, collections.size) diff --git a/src/androidTest/java/at/bitfire/ical4android/TestUtils.kt b/src/androidTest/java/at/bitfire/ical4android/TestUtils.kt deleted file mode 100644 index 3387920..0000000 --- a/src/androidTest/java/at/bitfire/ical4android/TestUtils.kt +++ /dev/null @@ -1,17 +0,0 @@ -/*************************************************************************************************** - * Copyright © All Contributors. See LICENSE and AUTHORS in the root directory for details. - **************************************************************************************************/ - -package at.bitfire.ical4android - -import androidx.test.runner.permission.PermissionRequester - -object TestUtils { - - fun requestPermissions(permissions: Array<String>) { - PermissionRequester().apply { - addPermissions(*permissions) - }.requestPermissions() - } - -}
\ No newline at end of file |