Skip to content
This repository was archived by the owner on Sep 3, 2023. It is now read-only.

Commit 52c6f8d

Browse files
committed
WIP rewrite test infrastructure
1 parent 40d634f commit 52c6f8d

File tree

9 files changed

+122
-18
lines changed

9 files changed

+122
-18
lines changed

dependencies.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ ext.versions = [
1212
bintrayPlugin : '0.8.1',
1313

1414
junit : '4.12',
15-
assertj : '3.11.0',
16-
mockitoCore : '2.7.5',
17-
mockitoKotlin : '2.0.0-RC1',
15+
testRunner : '1.0.2',
16+
espresso : '3.0.2',
17+
uiAutomator : '2.1.3',
1818

19-
supportLib : '28.0.0-rc01'
19+
supportLib : '28.0.0-rc02'
2020
]

library/build.gradle

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,13 @@ android {
1414
targetSdkVersion versions.compileSdk
1515
versionCode versions.publishVersionCode
1616
versionName versions.publishVersion
17-
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
1817
}
1918
}
2019

2120
dependencies {
2221
implementation 'com.android.support:support-annotations:' + versions.supportLib
2322
implementation 'com.android.support:appcompat-v7:' + versions.supportLib
2423
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:' + versions.kotlin
25-
26-
testImplementation 'junit:junit:' + versions.junit
27-
testImplementation 'org.assertj:assertj-core:' + versions.assertj
28-
testImplementation 'org.mockito:mockito-core:' + versions.mockitoCore
29-
testImplementation 'com.nhaarman.mockitokotlin2:mockito-kotlin:' + versions.mockitoKotlin
3024
}
3125

3226
apply from: '../spotless.gradle'

library/proguard-rules.pro

Lines changed: 0 additions & 3 deletions
This file was deleted.
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
<manifest package="com.afollestad.assent">
22

3-
<application />
4-
3+
<application/>
54
</manifest>

sample/build.gradle

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,19 @@ android {
1818
targetSdkVersion versions.compileSdk
1919
versionCode versions.publishVersionCode
2020
versionName versions.publishVersion
21+
22+
testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner'
2123
}
2224
}
2325

2426
dependencies {
2527
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:' + versions.kotlin
2628
implementation 'com.android.support:appcompat-v7:' + versions.supportLib
2729
implementation project(':library')
30+
31+
androidTestImplementation 'junit:junit:' + versions.junit
32+
androidTestImplementation 'com.android.support.test.espresso:espresso-core:' + versions.espresso
33+
androidTestImplementation 'com.android.support.test:runner:' + versions.testRunner
34+
androidTestImplementation 'com.android.support.test:rules:' + versions.testRunner
35+
androidTestImplementation 'com.android.support.test.uiautomator:uiautomator-v18:' + versions.uiAutomator
2836
}

sample/proguard-rules.pro

Lines changed: 0 additions & 3 deletions
This file was deleted.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<manifest
2+
xmlns:tools="http://schemas.android.com/tools"
3+
package="com.afollestad.assentsample">
4+
5+
<uses-sdk tools:overrideLibrary="android.support.test.uiautomator.v18"/>
6+
</manifest>
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.afollestad.assentsample
2+
3+
import android.support.test.InstrumentationRegistry.getInstrumentation
4+
import android.support.test.espresso.Espresso.onView
5+
import android.support.test.espresso.action.ViewActions.click
6+
import android.support.test.espresso.assertion.ViewAssertions.matches
7+
import android.support.test.espresso.matcher.ViewMatchers.isDisplayed
8+
import android.support.test.espresso.matcher.ViewMatchers.withId
9+
import android.support.test.espresso.matcher.ViewMatchers.withText
10+
import android.support.test.filters.SdkSuppress
11+
import android.support.test.rule.ActivityTestRule
12+
import android.support.test.runner.AndroidJUnit4
13+
import android.support.test.uiautomator.UiDevice
14+
import com.afollestad.assentsample.utils.TEXT_ALLOW
15+
import com.afollestad.assentsample.utils.assertViewWithTextIsVisible
16+
import com.afollestad.assentsample.utils.denyCurrentPermission
17+
import org.junit.Before
18+
import org.junit.Rule
19+
import org.junit.Test
20+
import org.junit.runner.RunWith
21+
22+
@RunWith(AndroidJUnit4::class)
23+
@SdkSuppress(minSdkVersion = 18)
24+
class AssentTest {
25+
26+
@Rule
27+
@JvmField
28+
var rule = ActivityTestRule(MainActivity::class.java)
29+
30+
private lateinit var device: UiDevice
31+
32+
@Before fun setup() {
33+
device = UiDevice.getInstance(getInstrumentation())
34+
}
35+
36+
@Test fun test_basic() {
37+
onView(withText(R.string.none_granted))
38+
.check(matches(isDisplayed()))
39+
onView(withId(R.id.requestPermissionButton))
40+
.check(matches(isDisplayed()))
41+
.perform(click())
42+
43+
device.assertViewWithTextIsVisible(TEXT_ALLOW, rule.activity)
44+
device.denyCurrentPermission()
45+
device.denyCurrentPermission()
46+
}
47+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.afollestad.assentsample.utils
2+
3+
import android.app.Activity
4+
import android.os.Handler
5+
import android.support.test.uiautomator.UiDevice
6+
import android.support.test.uiautomator.UiSelector
7+
8+
internal const val TEXT_ALLOW = "ALLOW"
9+
internal const val TEXT_DENY = "DENY"
10+
internal const val TEXT_NEVER_ASK_AGAIN = "Never ask again"
11+
12+
private fun sleep(time: Long) {
13+
try {
14+
Thread.sleep(time)
15+
} catch (_: Throwable) {
16+
}
17+
}
18+
19+
internal fun UiDevice.assertViewWithTextIsVisible(
20+
text: String,
21+
context: Activity,
22+
timeout: Long = 4000,
23+
elapsed: Long = 0
24+
) {
25+
val allowButton = findObject(UiSelector().text(text))
26+
if (!allowButton.exists()) {
27+
if (elapsed >= timeout) {
28+
throw AssertionError("View with text <$text> not found after ${elapsed}ms")
29+
}
30+
val handler = Handler(context.mainLooper)
31+
handler.postDelayed({
32+
assertViewWithTextIsVisible(text, context, timeout, elapsed + 500)
33+
}, 500)
34+
}
35+
}
36+
37+
fun UiDevice.allowCurrentPermission(device: UiDevice) {
38+
val allowButton = findObject(UiSelector().text(TEXT_ALLOW))
39+
allowButton.click()
40+
}
41+
42+
fun UiDevice.denyCurrentPermission() {
43+
val denyButton = findObject(UiSelector().text(TEXT_DENY))
44+
denyButton.click()
45+
}
46+
47+
fun UiDevice.denyCurrentPermissionPermanently() {
48+
val neverAskAgainCheckbox = findObject(UiSelector().text(TEXT_NEVER_ASK_AGAIN))
49+
neverAskAgainCheckbox.click()
50+
denyCurrentPermission()
51+
}
52+
53+
fun UiDevice.grantPermission(permissionTitle: String) {
54+
val permissionEntry = findObject(UiSelector().text(permissionTitle))
55+
permissionEntry.click()
56+
}

0 commit comments

Comments
 (0)