Skip to content

Commit 7de9287

Browse files
committed
Consequently use injected @ApplicationContext in Android tests; fix Hilt rules
1 parent 64d41b1 commit 7de9287

17 files changed

+165
-101
lines changed

app/src/androidTest/kotlin/at/bitfire/davdroid/db/CollectionTest.kt

+11-10
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@
44

55
package at.bitfire.davdroid.db
66

7+
import android.content.Context
78
import android.security.NetworkSecurityPolicy
89
import androidx.test.filters.SmallTest
9-
import androidx.test.platform.app.InstrumentationRegistry
1010
import at.bitfire.dav4jvm.DavResource
1111
import at.bitfire.dav4jvm.property.webdav.ResourceType
1212
import at.bitfire.davdroid.network.HttpClient
1313
import at.bitfire.davdroid.settings.SettingsManager
14+
import dagger.hilt.android.qualifiers.ApplicationContext
1415
import dagger.hilt.android.testing.HiltAndroidRule
1516
import dagger.hilt.android.testing.HiltAndroidTest
1617
import okhttp3.HttpUrl.Companion.toHttpUrl
@@ -34,25 +35,25 @@ class CollectionTest {
3435
val hiltRule = HiltAndroidRule(this)
3536

3637
@Inject
37-
lateinit var settingsManager: SettingsManager
38-
39-
@Before
40-
fun inject() {
41-
hiltRule.inject()
42-
}
38+
@ApplicationContext
39+
lateinit var context: Context
4340

41+
@Inject
42+
lateinit var settingsManager: SettingsManager
4443

4544
private lateinit var httpClient: HttpClient
4645
private val server = MockWebServer()
4746

4847
@Before
49-
fun setUp() {
50-
httpClient = HttpClient.Builder(InstrumentationRegistry.getInstrumentation().targetContext).build()
48+
fun setup() {
49+
hiltRule.inject()
50+
51+
httpClient = HttpClient.Builder(context).build()
5152
Assume.assumeTrue(NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted)
5253
}
5354

5455
@After
55-
fun shutDown() {
56+
fun teardown() {
5657
httpClient.close()
5758
}
5859

app/src/androidTest/kotlin/at/bitfire/davdroid/network/ConnectionUtilsTest.kt

-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET
1111
import android.net.NetworkCapabilities.NET_CAPABILITY_NOT_VPN
1212
import android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED
1313
import android.net.NetworkCapabilities.TRANSPORT_WIFI
14-
import dagger.hilt.android.testing.HiltAndroidTest
1514
import io.mockk.every
1615
import io.mockk.junit4.MockKRule
1716
import io.mockk.mockk
@@ -21,7 +20,6 @@ import org.junit.Before
2120
import org.junit.Rule
2221
import org.junit.Test
2322

24-
@HiltAndroidTest
2523
class ConnectionUtilsTest {
2624

2725
@get:Rule

app/src/androidTest/kotlin/at/bitfire/davdroid/network/HttpClientTest.kt

+8-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44

55
package at.bitfire.davdroid.network
66

7+
import android.content.Context
78
import android.security.NetworkSecurityPolicy
8-
import androidx.test.platform.app.InstrumentationRegistry
9+
import dagger.hilt.android.qualifiers.ApplicationContext
910
import dagger.hilt.android.testing.HiltAndroidRule
1011
import dagger.hilt.android.testing.HiltAndroidTest
1112
import okhttp3.Request
@@ -19,6 +20,7 @@ import org.junit.Assume
1920
import org.junit.Before
2021
import org.junit.Rule
2122
import org.junit.Test
23+
import javax.inject.Inject
2224

2325
@HiltAndroidTest
2426
class HttpClientTest {
@@ -29,11 +31,15 @@ class HttpClientTest {
2931
@get:Rule
3032
var hiltRule = HiltAndroidRule(this)
3133

34+
@Inject
35+
@ApplicationContext
36+
lateinit var context: Context
37+
3238
@Before
3339
fun setUp() {
3440
hiltRule.inject()
3541

36-
httpClient = HttpClient.Builder(InstrumentationRegistry.getInstrumentation().targetContext).build()
42+
httpClient = HttpClient.Builder(context).build()
3743

3844
server = MockWebServer()
3945
server.start(30000)

app/src/androidTest/kotlin/at/bitfire/davdroid/repository/DavCollectionRepositoryTest.kt

+7-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package at.bitfire.davdroid.repository
22

3-
import androidx.test.platform.app.InstrumentationRegistry
3+
import android.content.Context
44
import at.bitfire.davdroid.db.AppDatabase
55
import at.bitfire.davdroid.db.Collection
66
import at.bitfire.davdroid.db.Service
77
import at.bitfire.davdroid.settings.AccountSettings
8+
import dagger.hilt.android.qualifiers.ApplicationContext
89
import dagger.hilt.android.testing.HiltAndroidRule
910
import dagger.hilt.android.testing.HiltAndroidTest
1011
import io.mockk.mockk
@@ -27,12 +28,14 @@ class DavCollectionRepositoryTest {
2728
lateinit var accountSettingsFactory: AccountSettings.Factory
2829

2930
@Inject
30-
lateinit var serviceRepository: DavServiceRepository
31+
@ApplicationContext
32+
lateinit var context: Context
3133

3234
@Inject
3335
lateinit var db: AppDatabase
3436

35-
val context = InstrumentationRegistry.getInstrumentation().targetContext
37+
@Inject
38+
lateinit var serviceRepository: DavServiceRepository
3639

3740
var service: Service? = null
3841

@@ -48,6 +51,7 @@ class DavCollectionRepositoryTest {
4851
serviceRepository.deleteAll()
4952
}
5053

54+
5155
@Test
5256
fun testOnChangeListener_setForceReadOnly() = runBlocking {
5357
val collectionId = db.collectionDao().insertOrUpdateByUrl(

app/src/androidTest/kotlin/at/bitfire/davdroid/resource/LocalAddressBookTest.kt

+13-10
Original file line numberDiff line numberDiff line change
@@ -6,34 +6,37 @@ package at.bitfire.davdroid.resource
66

77
import android.accounts.Account
88
import android.accounts.AccountManager
9-
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
10-
import androidx.test.platform.app.InstrumentationRegistry
9+
import android.content.Context
1110
import at.bitfire.davdroid.R
11+
import dagger.hilt.android.qualifiers.ApplicationContext
1212
import dagger.hilt.android.testing.HiltAndroidRule
1313
import dagger.hilt.android.testing.HiltAndroidTest
1414
import org.junit.After
1515
import org.junit.Before
1616
import org.junit.Rule
1717
import org.junit.Test
18+
import javax.inject.Inject
1819

1920
@HiltAndroidTest
2021
class LocalAddressBookTest {
2122

2223
@get:Rule
2324
val hiltRule = HiltAndroidRule(this)
2425

25-
val context = InstrumentationRegistry.getInstrumentation().targetContext
26+
@Inject
27+
@ApplicationContext
28+
lateinit var context: Context
2629

27-
val mainAccountType = context.getString(R.string.account_type)
28-
val mainAccount = Account("main", mainAccountType)
30+
private val mainAccountType by lazy { context.getString(R.string.account_type) }
31+
private val mainAccount by lazy { Account("main", mainAccountType) }
2932

30-
val addressBookAccountType = context.getString(R.string.account_type_address_book)
31-
val addressBookAccount = Account("sub", addressBookAccountType)
33+
private val addressBookAccountType by lazy { context.getString(R.string.account_type_address_book) }
34+
private val addressBookAccount by lazy { Account("sub", addressBookAccountType) }
3235

33-
val accountManager = AccountManager.get(context)
36+
private val accountManager by lazy { AccountManager.get(context) }
3437

3538
@Before
36-
fun setUp() {
39+
fun setup() {
3740
hiltRule.inject()
3841

3942
// TODO DOES NOT WORK: the account immediately starts to sync, which creates the sync adapter services.
@@ -42,7 +45,7 @@ class LocalAddressBookTest {
4245
}
4346

4447
@After
45-
fun cleanup() {
48+
fun teardown() {
4649
accountManager.removeAccount(addressBookAccount, null, null)
4750
accountManager.removeAccount(mainAccount, null, null)
4851
}

app/src/androidTest/kotlin/at/bitfire/davdroid/resource/LocalGroupTest.kt

+7-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import android.Manifest
88
import android.content.ContentProviderClient
99
import android.content.ContentUris
1010
import android.content.ContentValues
11+
import android.content.Context
1112
import android.provider.ContactsContract
1213
import android.provider.ContactsContract.CommonDataKinds.GroupMembership
1314
import androidx.test.platform.app.InstrumentationRegistry
@@ -17,6 +18,7 @@ import at.bitfire.vcard4android.BatchOperation
1718
import at.bitfire.vcard4android.CachedGroupMembership
1819
import at.bitfire.vcard4android.Contact
1920
import at.bitfire.vcard4android.GroupMethod
21+
import dagger.hilt.android.qualifiers.ApplicationContext
2022
import dagger.hilt.android.testing.HiltAndroidRule
2123
import dagger.hilt.android.testing.HiltAndroidTest
2224
import org.junit.AfterClass
@@ -37,8 +39,6 @@ class LocalGroupTest {
3739

3840
companion object {
3941

40-
val context = InstrumentationRegistry.getInstrumentation().targetContext
41-
4242
@JvmField
4343
@ClassRule
4444
val permissionRule = GrantPermissionRule.grant(Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS)!!
@@ -48,6 +48,7 @@ class LocalGroupTest {
4848
@BeforeClass
4949
@JvmStatic
5050
fun connect() {
51+
val context = InstrumentationRegistry.getInstrumentation().targetContext
5152
provider = context.contentResolver.acquireContentProviderClient(ContactsContract.AUTHORITY)!!
5253
assertNotNull(provider)
5354
}
@@ -62,6 +63,10 @@ class LocalGroupTest {
6263
@get:Rule
6364
val hiltRule = HiltAndroidRule(this)
6465

66+
@Inject
67+
@ApplicationContext
68+
lateinit var context: Context
69+
6570
@Inject
6671
lateinit var settingsManager: SettingsManager
6772

app/src/androidTest/kotlin/at/bitfire/davdroid/resource/contactrow/GroupMembershipBuilderTest.kt

+7-2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import androidx.test.rule.GrantPermissionRule
1515
import at.bitfire.davdroid.resource.LocalTestAddressBook
1616
import at.bitfire.vcard4android.Contact
1717
import at.bitfire.vcard4android.GroupMethod
18+
import dagger.hilt.android.qualifiers.ApplicationContext
1819
import dagger.hilt.android.testing.HiltAndroidRule
1920
import dagger.hilt.android.testing.HiltAndroidTest
2021
import org.junit.AfterClass
@@ -24,14 +25,13 @@ import org.junit.BeforeClass
2425
import org.junit.ClassRule
2526
import org.junit.Rule
2627
import org.junit.Test
28+
import javax.inject.Inject
2729

2830
@HiltAndroidTest
2931
class GroupMembershipBuilderTest {
3032

3133
companion object {
3234

33-
val context: Context = InstrumentationRegistry.getInstrumentation().targetContext
34-
3535
@JvmField
3636
@ClassRule
3737
val permissionRule = GrantPermissionRule.grant(Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS)!!
@@ -41,6 +41,7 @@ class GroupMembershipBuilderTest {
4141
@BeforeClass
4242
@JvmStatic
4343
fun connect() {
44+
val context: Context = InstrumentationRegistry.getInstrumentation().targetContext
4445
provider = context.contentResolver.acquireContentProviderClient(ContactsContract.AUTHORITY)!!
4546
}
4647

@@ -55,6 +56,10 @@ class GroupMembershipBuilderTest {
5556
@get:Rule
5657
val hiltRule = HiltAndroidRule(this)
5758

59+
@Inject
60+
@ApplicationContext
61+
lateinit var context: Context
62+
5863
@Before
5964
fun inject() {
6065
hiltRule.inject()

app/src/androidTest/kotlin/at/bitfire/davdroid/servicedetection/CollectionListRefresherTest.kt

+16-20
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ package at.bitfire.davdroid.servicedetection
66

77
import android.content.Context
88
import android.security.NetworkSecurityPolicy
9-
import androidx.test.platform.app.InstrumentationRegistry
109
import at.bitfire.davdroid.db.AppDatabase
1110
import at.bitfire.davdroid.db.Collection
1211
import at.bitfire.davdroid.db.HomeSet
@@ -16,6 +15,7 @@ import at.bitfire.davdroid.log.Logger
1615
import at.bitfire.davdroid.network.HttpClient
1716
import at.bitfire.davdroid.settings.Settings
1817
import at.bitfire.davdroid.settings.SettingsManager
18+
import dagger.hilt.android.qualifiers.ApplicationContext
1919
import dagger.hilt.android.testing.HiltAndroidRule
2020
import dagger.hilt.android.testing.HiltAndroidTest
2121
import io.mockk.every
@@ -36,22 +36,6 @@ import javax.inject.Inject
3636

3737
@HiltAndroidTest
3838
class CollectionListRefresherTest {
39-
40-
@get:Rule
41-
var hiltRule = HiltAndroidRule(this)
42-
43-
val context: Context = InstrumentationRegistry.getInstrumentation().targetContext
44-
45-
@Inject
46-
lateinit var settings: SettingsManager
47-
48-
@Before
49-
fun setUp() {
50-
hiltRule.inject()
51-
}
52-
53-
54-
// Test dependencies
5539

5640
companion object {
5741
private const val PATH_CALDAV = "/caldav"
@@ -66,28 +50,40 @@ class CollectionListRefresherTest {
6650
private const val SUBPATH_ADDRESSBOOK_INACCESSIBLE = "/addressbooks/inaccessible-contacts"
6751
}
6852

53+
@get:Rule
54+
var hiltRule = HiltAndroidRule(this)
55+
56+
@Inject
57+
@ApplicationContext
58+
lateinit var context: Context
59+
6960
@Inject
7061
lateinit var db: AppDatabase
7162

7263
@Inject
7364
lateinit var refresherFactory: CollectionListRefresher.Factory
7465

66+
@Inject
67+
lateinit var settings: SettingsManager
68+
7569
private val mockServer = MockWebServer()
7670
private lateinit var client: HttpClient
7771

7872
@Before
79-
fun mockServerSetup() {
73+
fun setup() {
74+
hiltRule.inject()
75+
8076
// Start mock web server
8177
mockServer.dispatcher = TestDispatcher()
8278
mockServer.start()
8379

84-
client = HttpClient.Builder(InstrumentationRegistry.getInstrumentation().targetContext).build()
80+
client = HttpClient.Builder(context).build()
8581

8682
Assume.assumeTrue(NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted)
8783
}
8884

8985
@After
90-
fun cleanUp() {
86+
fun teardown() {
9187
mockServer.shutdown()
9288
db.close()
9389
}

0 commit comments

Comments
 (0)