Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/bitfireAT/vcard4android.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRicki Hirner <hirner@bitfire.at>2021-10-05 13:28:29 +0300
committerRicki Hirner <hirner@bitfire.at>2021-10-05 13:28:29 +0300
commitaf41314f13114f0b2cf9f93e18138cffb24a4d91 (patch)
treefe5484d93e50269d06e125ae07d90a8438db434d
parent60303f320b756e2865a6b3dea65ebd7a188ca823 (diff)
Correctness, tests
-rw-r--r--src/androidTest/java/at/bitfire/vcard4android/AndroidAddressBookTest.kt39
-rw-r--r--src/androidTest/java/at/bitfire/vcard4android/AndroidContactTest.kt45
-rw-r--r--src/androidTest/java/at/bitfire/vcard4android/AndroidGroupTest.kt43
-rw-r--r--src/main/java/at/bitfire/vcard4android/AndroidAddressBook.kt29
-rw-r--r--src/main/java/at/bitfire/vcard4android/AndroidContact.kt9
-rw-r--r--src/main/java/at/bitfire/vcard4android/AndroidGroup.kt10
6 files changed, 92 insertions, 83 deletions
diff --git a/src/androidTest/java/at/bitfire/vcard4android/AndroidAddressBookTest.kt b/src/androidTest/java/at/bitfire/vcard4android/AndroidAddressBookTest.kt
index c0442a4..518dcd1 100644
--- a/src/androidTest/java/at/bitfire/vcard4android/AndroidAddressBookTest.kt
+++ b/src/androidTest/java/at/bitfire/vcard4android/AndroidAddressBookTest.kt
@@ -16,32 +16,33 @@ import android.provider.ContactsContract
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.rule.GrantPermissionRule
import at.bitfire.vcard4android.impl.TestAddressBook
-import org.junit.After
+import org.junit.*
import org.junit.Assert.*
-import org.junit.Before
-import org.junit.Rule
-import org.junit.Test
class AndroidAddressBookTest {
- @JvmField
- @Rule
- val permissionRule = GrantPermissionRule.grant(Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS)!!
+ companion object {
+ @JvmField
+ @ClassRule
+ val permissionRule = GrantPermissionRule.grant(Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS)!!
- private val testAccount = Account("AndroidAddressBookTest", "at.bitfire.vcard4android")
- private lateinit var provider: ContentProviderClient
+ private val testAccount = Account("AndroidAddressBookTest", "at.bitfire.vcard4android")
+ private lateinit var provider: ContentProviderClient
- @Before
- fun connect() {
- val context = InstrumentationRegistry.getInstrumentation().context
- provider = context.contentResolver.acquireContentProviderClient(ContactsContract.AUTHORITY)!!
- assertNotNull(provider)
- }
+ @BeforeClass
+ @JvmStatic
+ fun connect() {
+ val context = InstrumentationRegistry.getInstrumentation().context
+ provider = context.contentResolver.acquireContentProviderClient(ContactsContract.AUTHORITY)!!
+ assertNotNull(provider)
+ }
- @After
- fun disconnect() {
- @Suppress("DEPRECATION")
- provider.release()
+ @BeforeClass
+ @JvmStatic
+ fun disconnect() {
+ @Suppress("DEPRECATION")
+ provider.release()
+ }
}
diff --git a/src/androidTest/java/at/bitfire/vcard4android/AndroidContactTest.kt b/src/androidTest/java/at/bitfire/vcard4android/AndroidContactTest.kt
index b366b83..63df5b1 100644
--- a/src/androidTest/java/at/bitfire/vcard4android/AndroidContactTest.kt
+++ b/src/androidTest/java/at/bitfire/vcard4android/AndroidContactTest.kt
@@ -24,39 +24,40 @@ import ezvcard.property.Address
import ezvcard.property.Birthday
import ezvcard.property.Email
import ezvcard.util.PartialDate
-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.io.ByteArrayOutputStream
import java.io.StringReader
import java.text.SimpleDateFormat
class AndroidContactTest {
- @JvmField
- @Rule
- val permissionRule = GrantPermissionRule.grant(Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS)!!
+ companion object {
+ @JvmField
+ @ClassRule
+ val permissionRule = GrantPermissionRule.grant(Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS)!!
- private val testAccount = Account("AndroidContactTest", "at.bitfire.vcard4android")
-
- private lateinit var provider: ContentProviderClient
- private lateinit var addressBook: TestAddressBook
+ private val testAccount = Account("AndroidContactTest", "at.bitfire.vcard4android")
- @Before
- fun connect() {
- val context = InstrumentationRegistry.getInstrumentation().context
- provider = context.contentResolver.acquireContentProviderClient(ContactsContract.AUTHORITY)!!
- assertNotNull(provider)
+ private lateinit var provider: ContentProviderClient
+ private lateinit var addressBook: TestAddressBook
- addressBook = TestAddressBook(testAccount, provider)
- }
+ @BeforeClass
+ @JvmStatic
+ fun connect() {
+ val context = InstrumentationRegistry.getInstrumentation().context
+ provider = context.contentResolver.acquireContentProviderClient(ContactsContract.AUTHORITY)!!
+ assertNotNull(provider)
+
+ addressBook = TestAddressBook(testAccount, provider)
+ }
- @After
- fun disconnect() {
- @Suppress("DEPRECATION")
- provider.release()
+ @BeforeClass
+ @JvmStatic
+ fun disconnect() {
+ @Suppress("DEPRECATION")
+ provider.release()
+ }
}
diff --git a/src/androidTest/java/at/bitfire/vcard4android/AndroidGroupTest.kt b/src/androidTest/java/at/bitfire/vcard4android/AndroidGroupTest.kt
index ca6cb1e..b0012f9 100644
--- a/src/androidTest/java/at/bitfire/vcard4android/AndroidGroupTest.kt
+++ b/src/androidTest/java/at/bitfire/vcard4android/AndroidGroupTest.kt
@@ -15,37 +15,40 @@ import android.provider.ContactsContract
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.rule.GrantPermissionRule
import at.bitfire.vcard4android.impl.TestAddressBook
-import org.junit.After
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull
-import org.junit.Before
-import org.junit.Rule
+import org.junit.BeforeClass
+import org.junit.ClassRule
import org.junit.Test
class AndroidGroupTest {
- @JvmField
- @Rule
- val permissionRule = GrantPermissionRule.grant(Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS)!!
+ companion object {
+ @JvmField
+ @ClassRule
+ val permissionRule = GrantPermissionRule.grant(Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS)!!
- private val testAccount = Account("AndroidContactGroupTest", "at.bitfire.vcard4android")
+ private val testAccount = Account("AndroidContactGroupTest", "at.bitfire.vcard4android")
- private lateinit var provider: ContentProviderClient
- private lateinit var addressBook: TestAddressBook
+ private lateinit var provider: ContentProviderClient
+ private lateinit var addressBook: TestAddressBook
- @Before
- fun connect() {
- val context = InstrumentationRegistry.getInstrumentation().context
- provider = context.contentResolver.acquireContentProviderClient(ContactsContract.AUTHORITY)!!
- assertNotNull(provider)
+ @BeforeClass
+ @JvmStatic
+ fun connect() {
+ val context = InstrumentationRegistry.getInstrumentation().context
+ provider = context.contentResolver.acquireContentProviderClient(ContactsContract.AUTHORITY)!!
+ assertNotNull(provider)
- addressBook = TestAddressBook(testAccount, provider)
- }
+ addressBook = TestAddressBook(testAccount, provider)
+ }
- @After
- fun disconnect() {
- @Suppress("DEPRECATION")
- provider.release()
+ @BeforeClass
+ @JvmStatic
+ fun disconnect() {
+ @Suppress("DEPRECATION")
+ provider.release()
+ }
}
diff --git a/src/main/java/at/bitfire/vcard4android/AndroidAddressBook.kt b/src/main/java/at/bitfire/vcard4android/AndroidAddressBook.kt
index c534ede..9d75bef 100644
--- a/src/main/java/at/bitfire/vcard4android/AndroidAddressBook.kt
+++ b/src/main/java/at/bitfire/vcard4android/AndroidAddressBook.kt
@@ -18,7 +18,6 @@ import android.provider.ContactsContract.RawContacts
import at.bitfire.vcard4android.Utils.toContentValues
import java.io.FileNotFoundException
import java.util.*
-import kotlin.jvm.Throws
open class AndroidAddressBook<T1: AndroidContact, T2: AndroidGroup>(
var account: Account,
@@ -62,25 +61,39 @@ open class AndroidAddressBook<T1: AndroidContact, T2: AndroidGroup>(
fun queryContacts(where: String?, whereArgs: Array<String>?): List<T1> {
val contacts = LinkedList<T1>()
- provider!!.query(rawContactsSyncUri(),
- null, where, whereArgs, null)?.use { cursor ->
+ provider!!.query(rawContactsSyncUri(), null,
+ where, whereArgs, null)?.use { cursor ->
while (cursor.moveToNext())
contacts += contactFactory.fromProvider(this, cursor.toContentValues())
}
return contacts
}
+ fun queryGroups(where: String?, whereArgs: Array<String>?, callback: (T2) -> Unit) {
+ provider!!.query(groupsSyncUri(), null,
+ where, whereArgs, null)?.use { cursor ->
+ while (cursor.moveToNext()) {
+ val group = groupFactory.fromProvider(this, cursor.toContentValues())
+ callback(group)
+ }
+ }
+ }
+
fun queryGroups(where: String?, whereArgs: Array<String>?): List<T2> {
val groups = LinkedList<T2>()
- provider!!.query(groupsSyncUri(),
- arrayOf(Groups._ID, AndroidGroup.COLUMN_FILENAME, AndroidGroup.COLUMN_ETAG),
- where, whereArgs, null)?.use { cursor ->
- while (cursor.moveToNext())
- groups += groupFactory.fromProvider(this, cursor.toContentValues())
+ queryGroups(where, whereArgs) { group ->
+ groups += group
}
return groups
}
+
+ fun allGroups(callback: (T2) -> Unit) {
+ queryGroups("${Groups.ACCOUNT_TYPE}=? AND ${Groups.ACCOUNT_NAME}=?", arrayOf(account.type, account.name)) { group ->
+ callback(group)
+ }
+ }
+
@Throws(FileNotFoundException::class)
fun findContactById(id: Long) =
queryContacts("${RawContacts._ID}=?", arrayOf(id.toString())).firstOrNull() ?: throw FileNotFoundException()
diff --git a/src/main/java/at/bitfire/vcard4android/AndroidContact.kt b/src/main/java/at/bitfire/vcard4android/AndroidContact.kt
index 385ae04..d1ec734 100644
--- a/src/main/java/at/bitfire/vcard4android/AndroidContact.kt
+++ b/src/main/java/at/bitfire/vcard4android/AndroidContact.kt
@@ -48,8 +48,7 @@ open class AndroidContact(
/**
* Creates a new instance, initialized with some metadata. Usually used to insert a contact to an address book.
*/
- constructor(addressBook: AndroidAddressBook<out AndroidContact, out AndroidGroup>, _contact: Contact, _fileName: String?, _eTag: String?)
- : this(addressBook) {
+ constructor(addressBook: AndroidAddressBook<out AndroidContact, out AndroidGroup>, _contact: Contact, _fileName: String?, _eTag: String?): this(addressBook) {
fileName = _fileName
eTag = _eTag
setContact(_contact)
@@ -58,11 +57,7 @@ open class AndroidContact(
/**
* Creates a new instance, initialized with metadata from the content provider. Usually used when reading a contact from an address book.
*/
- constructor(addressBook: AndroidAddressBook<out AndroidContact, out AndroidGroup>, values: ContentValues) : this(addressBook) {
- initializeFromContentValues(values)
- }
-
- protected open fun initializeFromContentValues(values: ContentValues) {
+ constructor(addressBook: AndroidAddressBook<out AndroidContact, out AndroidGroup>, values: ContentValues): this(addressBook) {
id = values.getAsLong(RawContacts._ID)
fileName = values.getAsString(COLUMN_FILENAME)
eTag = values.getAsString(COLUMN_ETAG)
diff --git a/src/main/java/at/bitfire/vcard4android/AndroidGroup.kt b/src/main/java/at/bitfire/vcard4android/AndroidGroup.kt
index 8447184..4461053 100644
--- a/src/main/java/at/bitfire/vcard4android/AndroidGroup.kt
+++ b/src/main/java/at/bitfire/vcard4android/AndroidGroup.kt
@@ -37,7 +37,9 @@ open class AndroidGroup(
var eTag: String? = null
constructor(addressBook: AndroidAddressBook<out AndroidContact, out AndroidGroup>, values: ContentValues): this(addressBook) {
- initializeFromContentValues(values)
+ id = values.getAsLong(Groups._ID)
+ fileName = values.getAsString(COLUMN_FILENAME)
+ eTag = values.getAsString(COLUMN_ETAG)
}
constructor(addressBook: AndroidAddressBook<out AndroidContact, out AndroidGroup>, contact: Contact, fileName: String? = null, eTag: String? = null): this(addressBook) {
@@ -46,12 +48,6 @@ open class AndroidGroup(
this.eTag = eTag
}
- protected open fun initializeFromContentValues(values: ContentValues) {
- id = values.getAsLong(Groups._ID)
- fileName = values.getAsString(COLUMN_FILENAME)
- eTag = values.getAsString(COLUMN_ETAG)
- }
-
/**
* Cached copy of the [Contact]. If this is null, [getContact] must generate the [Contact]