Try test butler
This commit is contained in:
parent
d1a34abf85
commit
9d2e77da8f
@ -1,5 +1,13 @@
|
|||||||
image: registry.gitlab.com/fdroid/ci-images-client
|
image: registry.gitlab.com/fdroid/ci-images-client
|
||||||
|
|
||||||
|
before_script:
|
||||||
|
- export GRADLE_USER_HOME=`pwd`/.gradle
|
||||||
|
|
||||||
|
cache:
|
||||||
|
paths:
|
||||||
|
- .gradle/wrapper
|
||||||
|
- .gradle/caches
|
||||||
|
|
||||||
# Basic android and gradle stuff
|
# Basic android and gradle stuff
|
||||||
# Check linting
|
# Check linting
|
||||||
lintDebug:
|
lintDebug:
|
||||||
@ -48,12 +56,12 @@ debugTests:
|
|||||||
- apt-get update || apt-get update
|
- apt-get update || apt-get update
|
||||||
- apt-get install -y openjdk-11-jdk-headless
|
- apt-get install -y openjdk-11-jdk-headless
|
||||||
- update-alternatives --auto java
|
- update-alternatives --auto java
|
||||||
- ./gradlew connectedStagingAndroidTest || (adb -e logcat -d > logcat.txt; exit 1)
|
- ./gradlew connectedStagingAndroidTest --info || (adb -e logcat -d > logcat.txt; exit 1)
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
- logcat.txt
|
- logcat.txt
|
||||||
|
|
||||||
connected 23 default x86_64:
|
connected 27 default x86_64:
|
||||||
<<: *connected-template
|
<<: *connected-template
|
||||||
|
|
||||||
fdroid build:
|
fdroid build:
|
||||||
|
@ -33,7 +33,7 @@ android {
|
|||||||
versionCode 16
|
versionCode 16
|
||||||
versionName "1.0.beta" + versionCode
|
versionName "1.0.beta" + versionCode
|
||||||
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "org.pixeldroid.app.testUtility.TestRunner"
|
||||||
testInstrumentationRunnerArguments clearPackageData: 'true'
|
testInstrumentationRunnerArguments clearPackageData: 'true'
|
||||||
}
|
}
|
||||||
sourceSets {
|
sourceSets {
|
||||||
@ -234,6 +234,10 @@ dependencies {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
//stagingImplementation 'com.squareup.leakcanary:leakcanary-android:2.7'
|
//stagingImplementation 'com.squareup.leakcanary:leakcanary-android:2.7'
|
||||||
|
androidTestImplementation 'com.android.support.test.espresso:espresso-idling-resource:3.0.2'
|
||||||
|
|
||||||
|
androidTestImplementation 'com.linkedin.testbutler:test-butler-library:2.2.1'
|
||||||
|
androidTestUtil 'com.linkedin.testbutler:test-butler-app:2.2.1'
|
||||||
|
|
||||||
androidTestImplementation 'androidx.work:work-testing:2.7.1'
|
androidTestImplementation 'androidx.work:work-testing:2.7.1'
|
||||||
testImplementation 'com.github.tomakehurst:wiremock-jre8:2.33.2'
|
testImplementation 'com.github.tomakehurst:wiremock-jre8:2.33.2'
|
||||||
|
@ -4,37 +4,50 @@ import android.content.Context
|
|||||||
import androidx.test.core.app.ActivityScenario
|
import androidx.test.core.app.ActivityScenario
|
||||||
import androidx.test.core.app.ApplicationProvider
|
import androidx.test.core.app.ApplicationProvider
|
||||||
import androidx.test.espresso.Espresso.onView
|
import androidx.test.espresso.Espresso.onView
|
||||||
|
import androidx.test.espresso.IdlingRegistry
|
||||||
|
import androidx.test.espresso.IdlingResource
|
||||||
import androidx.test.espresso.action.ViewActions.click
|
import androidx.test.espresso.action.ViewActions.click
|
||||||
import androidx.test.espresso.assertion.ViewAssertions.matches
|
import androidx.test.espresso.assertion.ViewAssertions.matches
|
||||||
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
|
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
|
||||||
import androidx.test.espresso.matcher.ViewMatchers.withId
|
import androidx.test.espresso.matcher.ViewMatchers.withId
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||||
import org.junit.*
|
import com.linkedin.android.testbutler.TestButler
|
||||||
import org.pixeldroid.app.testUtility.clearData
|
import org.junit.After
|
||||||
import org.pixeldroid.app.testUtility.initDB
|
import org.junit.Before
|
||||||
import org.pixeldroid.app.utils.db.AppDatabase
|
import org.junit.Rule
|
||||||
|
import org.junit.Test
|
||||||
import org.junit.rules.Timeout
|
import org.junit.rules.Timeout
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
|
import org.pixeldroid.app.testUtility.ConnectivityIdlingResource
|
||||||
|
import org.pixeldroid.app.testUtility.clearData
|
||||||
|
import org.pixeldroid.app.testUtility.initDB
|
||||||
import org.pixeldroid.app.testUtility.waitForView
|
import org.pixeldroid.app.testUtility.waitForView
|
||||||
|
import org.pixeldroid.app.utils.db.AppDatabase
|
||||||
|
|
||||||
|
|
||||||
@RunWith(AndroidJUnit4::class)
|
@RunWith(AndroidJUnit4::class)
|
||||||
@Ignore("Ignore until we can get TestButler to work on CI")
|
|
||||||
class LoginActivityOfflineTest {
|
class LoginActivityOfflineTest {
|
||||||
|
|
||||||
private lateinit var context: Context
|
private lateinit var context: Context
|
||||||
|
private lateinit var waitForOffline: IdlingResource
|
||||||
|
|
||||||
private lateinit var db: AppDatabase
|
private lateinit var db: AppDatabase
|
||||||
|
|
||||||
@get:Rule
|
@get:Rule
|
||||||
var globalTimeout: Timeout = Timeout.seconds(100)
|
var globalTimeout: Timeout = Timeout.seconds(100)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
fun before() {
|
fun before() {
|
||||||
//TestButler.setWifiState(false)
|
TestButler.setWifiState(false)
|
||||||
//TestButler.setGsmState(false)
|
TestButler.setGsmState(false)
|
||||||
context = ApplicationProvider.getApplicationContext<Context>()
|
context = ApplicationProvider.getApplicationContext()
|
||||||
|
waitForOffline = ConnectivityIdlingResource("resourceName",
|
||||||
|
context, ConnectivityIdlingResource.WAIT_FOR_DISCONNECTION)
|
||||||
db = initDB(context)
|
db = initDB(context)
|
||||||
db.clearAllTables()
|
db.clearAllTables()
|
||||||
|
IdlingRegistry.getInstance().register(waitForOffline)
|
||||||
ActivityScenario.launch(LoginActivity::class.java)
|
ActivityScenario.launch(LoginActivity::class.java)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -53,9 +66,10 @@ class LoginActivityOfflineTest {
|
|||||||
|
|
||||||
@After
|
@After
|
||||||
fun after() {
|
fun after() {
|
||||||
//TestButler.setWifiState(true)
|
TestButler.setWifiState(true)
|
||||||
//TestButler.setGsmState(true)
|
TestButler.setGsmState(true)
|
||||||
db.close()
|
db.close()
|
||||||
clearData()
|
clearData()
|
||||||
|
IdlingRegistry.getInstance().unregister(waitForOffline)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -33,7 +33,6 @@ class MockedServerTest {
|
|||||||
db = initDB(context)
|
db = initDB(context)
|
||||||
db.clearAllTables()
|
db.clearAllTables()
|
||||||
db.instanceDao().insertInstance(testiTestoInstance)
|
db.instanceDao().insertInstance(testiTestoInstance)
|
||||||
|
|
||||||
db.userDao().insertUser(testiTesto)
|
db.userDao().insertUser(testiTesto)
|
||||||
db.close()
|
db.close()
|
||||||
activityScenario = ActivityScenario.launch(MainActivity::class.java)
|
activityScenario = ActivityScenario.launch(MainActivity::class.java)
|
||||||
|
@ -58,13 +58,15 @@ class PostCreationFragmentTest {
|
|||||||
IdlingRegistry.getInstance().unregister(viewPager2IdlingResource)
|
IdlingRegistry.getInstance().unregister(viewPager2IdlingResource)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val expectedIntent: Matcher<Intent> = hasAction(Intent.ACTION_CHOOSER)
|
||||||
|
|
||||||
// image choosing intent
|
// image choosing intent
|
||||||
@Test
|
@Test
|
||||||
fun galleryButtonLaunchesGalleryIntent() {
|
fun galleryButtonLaunchesGalleryIntent() {
|
||||||
waitForView(R.id.photo_view_button)
|
waitForView(R.id.photo_view_button)
|
||||||
|
|
||||||
val expectedIntent: Matcher<Intent> = hasAction(Intent.ACTION_CHOOSER)
|
|
||||||
onView(withId(R.id.photo_view_button)).perform(click())
|
onView(withId(R.id.photo_view_button)).perform(click())
|
||||||
|
Thread.sleep(300)
|
||||||
intended(expectedIntent)
|
intended(expectedIntent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,57 @@
|
|||||||
|
package org.pixeldroid.app.testUtility
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import androidx.test.espresso.IdlingResource
|
||||||
|
import kotlin.jvm.Volatile
|
||||||
|
import android.net.ConnectivityManager
|
||||||
|
import android.net.NetworkInfo
|
||||||
|
import android.util.Log
|
||||||
|
import org.pixeldroid.app.testUtility.ConnectivityIdlingResource
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Kush Saini
|
||||||
|
* Later converted and adapted to Kotlin for PixelDroid
|
||||||
|
* Description:
|
||||||
|
* This [IdlingResource] halts Espresso Test depending on mode which is passed to the constructor
|
||||||
|
*/
|
||||||
|
class ConnectivityIdlingResource
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param resourceName name of the resource (used for logging and idempotency of registration
|
||||||
|
* @param context context
|
||||||
|
* @param mode if mode is WAIT_FOR_CONNECTION i.e. value is 1 then the [IdlingResource]
|
||||||
|
* halts test until internet is available and if mode is WAIT_FOR_DISCONNECTION
|
||||||
|
* i.e. value is 0 then [IdlingResource] waits for internet to disconnect
|
||||||
|
*/(private val resourceName: String, private val context: Context, private val mode: Int) :
|
||||||
|
IdlingResource {
|
||||||
|
@Volatile
|
||||||
|
private var resourceCallback: IdlingResource.ResourceCallback? = null
|
||||||
|
override fun getName(): String {
|
||||||
|
return resourceName
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun isIdleNow(): Boolean {
|
||||||
|
val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
|
||||||
|
val activeNetwork: NetworkInfo? = cm.activeNetworkInfo
|
||||||
|
var isConnected = activeNetwork != null &&
|
||||||
|
activeNetwork.isConnectedOrConnecting
|
||||||
|
if (mode == WAIT_FOR_DISCONNECTION) isConnected = !isConnected
|
||||||
|
if (isConnected) {
|
||||||
|
Log.d(TAG, "Connected now!")
|
||||||
|
resourceCallback!!.onTransitionToIdle()
|
||||||
|
} else {
|
||||||
|
Log.d(TAG, "Not connected!")
|
||||||
|
}
|
||||||
|
return isConnected
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun registerIdleTransitionCallback(resourceCallback: IdlingResource.ResourceCallback) {
|
||||||
|
this.resourceCallback = resourceCallback
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
var WAIT_FOR_CONNECTION = 1
|
||||||
|
var WAIT_FOR_DISCONNECTION = 0
|
||||||
|
private const val TAG = "ConnectIdlingResource"
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +1,5 @@
|
|||||||
package org.pixeldroid.app.testUtility
|
package org.pixeldroid.app.testUtility
|
||||||
/*
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.test.runner.AndroidJUnitRunner
|
import androidx.test.runner.AndroidJUnitRunner
|
||||||
import com.linkedin.android.testbutler.TestButler
|
import com.linkedin.android.testbutler.TestButler
|
||||||
@ -17,4 +17,3 @@ class TestRunner: AndroidJUnitRunner() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*/
|
|
Loading…
x
Reference in New Issue
Block a user