diff options
Diffstat (limited to 'android')
9 files changed, 98 insertions, 0 deletions
diff --git a/android/buildSrc/src/main/kotlin/Dependencies.kt b/android/buildSrc/src/main/kotlin/Dependencies.kt index e4d78ecd73..97ff89bab8 100644 --- a/android/buildSrc/src/main/kotlin/Dependencies.kt +++ b/android/buildSrc/src/main/kotlin/Dependencies.kt @@ -27,6 +27,14 @@ object Dependencies { "androidx.test.espresso:espresso-core:${Versions.AndroidX.espresso}" const val espressoContrib = "androidx.test.espresso:espresso-contrib:${Versions.AndroidX.espresso}" + const val testCore = + "androidx.test:core:${Versions.AndroidX.test}" + const val testRunner = + "androidx.test:runner:${Versions.AndroidX.test}" + const val testUiAutomator = + "androidx.test.uiautomator:uiautomator:${Versions.AndroidX.uiautomator}" + const val testOrchestrator = + "androidx.test:orchestrator:${Versions.AndroidX.test}" } object Koin { @@ -59,6 +67,7 @@ object Dependencies { object Plugin { const val android = "com.android.tools.build:gradle:${Versions.Plugin.android}" const val androidApplicationId = "com.android.application" + const val androidTestId = "com.android.test" const val playPublisher = "com.github.triplet.gradle:play-publisher:${Versions.Plugin.playPublisher}" const val playPublisherId = "com.github.triplet.play" diff --git a/android/buildSrc/src/main/kotlin/Versions.kt b/android/buildSrc/src/main/kotlin/Versions.kt index 8db39a305f..d5c3563202 100644 --- a/android/buildSrc/src/main/kotlin/Versions.kt +++ b/android/buildSrc/src/main/kotlin/Versions.kt @@ -27,6 +27,8 @@ object Versions { const val fragment = "1.3.2" const val recyclerview = "1.2.1" const val junit = "1.1.3" + const val test = "1.4.0" + const val uiautomator = "2.2.0" } object Plugin { diff --git a/android/e2e/build.gradle.kts b/android/e2e/build.gradle.kts new file mode 100644 index 0000000000..655855c1f4 --- /dev/null +++ b/android/e2e/build.gradle.kts @@ -0,0 +1,34 @@ +plugins { + id(Dependencies.Plugin.androidTestId) + id(Dependencies.Plugin.kotlinAndroidId) +} + +android { + compileSdkVersion(Versions.Android.compileSdkVersion) + + defaultConfig { + minSdkVersion(Versions.Android.minSdkVersion) + targetSdkVersion(Versions.Android.targetSdkVersion) + testApplicationId = "net.mullvad.mullvadvpn.e2e" + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + testOptions { + execution = "ANDROIDX_TEST_ORCHESTRATOR" + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + targetProjectPath = ":app" +} + +dependencies { + implementation(Dependencies.AndroidX.testCore) + implementation(Dependencies.AndroidX.testOrchestrator) + implementation(Dependencies.AndroidX.testRunner) + implementation(Dependencies.AndroidX.testUiAutomator) + implementation(Dependencies.Kotlin.stdlib) +} diff --git a/android/e2e/src/main/AndroidManifest.xml b/android/e2e/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..50c48f741b --- /dev/null +++ b/android/e2e/src/main/AndroidManifest.xml @@ -0,0 +1,6 @@ +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="net.mullvad.mullvadvpn.e2e"> + <uses-permission android:name="android.permission.INTERNET" /> + <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner" + android:targetPackage="net.mullvad.mullvadvpn" /> +</manifest> diff --git a/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/LaunchAppTest.kt b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/LaunchAppTest.kt new file mode 100644 index 0000000000..5d19716ff5 --- /dev/null +++ b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/LaunchAppTest.kt @@ -0,0 +1,37 @@ +package net.mullvad.mullvadvpn.e2e + +import android.content.Intent +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.runner.AndroidJUnit4 +import androidx.test.uiautomator.By +import androidx.test.uiautomator.UiDevice +import androidx.test.uiautomator.Until +import net.mullvad.mullvadvpn.e2e.constant.APP_LAUNCH_TIMEOUT +import net.mullvad.mullvadvpn.e2e.constant.MULLVAD_PACKAGE +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class LaunchAppTest { + @Test + fun testLaunchApp() { + val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) + val targetContext = InstrumentationRegistry.getInstrumentation().targetContext + device.pressHome() + // Wait for launcher + device.wait( + Until.hasObject(By.pkg(device.launcherPackageName).depth(0)), + APP_LAUNCH_TIMEOUT + ) + val intent = + targetContext.packageManager.getLaunchIntentForPackage(MULLVAD_PACKAGE)?.apply { + // Clear out any previous instances + addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK) + } + targetContext.startActivity(intent) + device.wait( + Until.hasObject(By.pkg(MULLVAD_PACKAGE).depth(0)), + APP_LAUNCH_TIMEOUT + ) + } +} diff --git a/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/Constants.kt b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/Constants.kt new file mode 100644 index 0000000000..44b8029799 --- /dev/null +++ b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/Constants.kt @@ -0,0 +1,3 @@ +package net.mullvad.mullvadvpn.e2e.constant + +const val LOG_TAG = "mullvad-e2e" diff --git a/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/PackageConstants.kt b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/PackageConstants.kt new file mode 100644 index 0000000000..47aeaa0237 --- /dev/null +++ b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/PackageConstants.kt @@ -0,0 +1,3 @@ +package net.mullvad.mullvadvpn.e2e.constant + +const val MULLVAD_PACKAGE = "net.mullvad.mullvadvpn" diff --git a/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/TimeoutConstants.kt b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/TimeoutConstants.kt new file mode 100644 index 0000000000..6ede2d3048 --- /dev/null +++ b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/TimeoutConstants.kt @@ -0,0 +1,3 @@ +package net.mullvad.mullvadvpn.e2e.constant + +const val APP_LAUNCH_TIMEOUT = 5000L diff --git a/android/settings.gradle.kts b/android/settings.gradle.kts index 15a801b10a..cc8e04d837 100644 --- a/android/settings.gradle.kts +++ b/android/settings.gradle.kts @@ -1 +1,2 @@ include(":app") +include(":e2e") |
