[#209] Compose dependency update
* [#209] Update Compose dependency to latest version 1.2.0-beta03 - Update dependency - Align our integration tests with the new Compose requirements - Add integration folder to tests, if missing - Split integration tests, which require activity to separate classes - Remove unnecessary custom activity for each integration app part and create one custom common activity - Implement Downloadable fonts from Compose 1.2 - Update Third party licenses documentation
This commit is contained in:
parent
3d5ed7b10b
commit
90c2fcb255
|
@ -6,4 +6,4 @@ The majority of the contents of this Git repository are covered under the [LICEN
|
||||||
|
|
||||||
|
|
||||||
## Rubik Font
|
## Rubik Font
|
||||||
The fonts under the [font](../ui-lib/src/main/res/ui/common/font) directory are downloaded from [Google Fonts](https://fonts.google.com/specimen/Rubik) and are licensed under the [Open Font License](https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL).
|
We use fonts from Rubik font family. The fonts are downloaded from [Google Fonts](https://fonts.google.com/specimen/Rubik) and are licensed under the [Open Font License](https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL).
|
||||||
|
|
|
@ -94,7 +94,7 @@ ANDROIDX_APPCOMPAT_VERSION=1.4.1
|
||||||
ANDROIDX_CAMERA_VERSION=1.1.0-rc01
|
ANDROIDX_CAMERA_VERSION=1.1.0-rc01
|
||||||
ANDROIDX_COMPOSE_COMPILER_VERSION=1.2.0-beta03
|
ANDROIDX_COMPOSE_COMPILER_VERSION=1.2.0-beta03
|
||||||
ANDROIDX_COMPOSE_MATERIAL3_VERSION=1.0.0-alpha13
|
ANDROIDX_COMPOSE_MATERIAL3_VERSION=1.0.0-alpha13
|
||||||
ANDROIDX_COMPOSE_VERSION=1.1.1
|
ANDROIDX_COMPOSE_VERSION=1.2.0-beta03
|
||||||
ANDROIDX_CONSTRAINTLAYOUT_VERSION=1.0.0
|
ANDROIDX_CONSTRAINTLAYOUT_VERSION=1.0.0
|
||||||
ANDROIDX_CORE_VERSION=1.7.0
|
ANDROIDX_CORE_VERSION=1.7.0
|
||||||
ANDROIDX_ESPRESSO_VERSION=3.5.0-alpha07
|
ANDROIDX_ESPRESSO_VERSION=3.5.0-alpha07
|
||||||
|
|
|
@ -164,6 +164,7 @@ dependencyResolutionManagement {
|
||||||
library("androidx-compose-material-icons-extended", "androidx.compose.material:material-icons-extended:$androidxComposeVersion")
|
library("androidx-compose-material-icons-extended", "androidx.compose.material:material-icons-extended:$androidxComposeVersion")
|
||||||
library("androidx-compose-tooling", "androidx.compose.ui:ui-tooling:$androidxComposeVersion")
|
library("androidx-compose-tooling", "androidx.compose.ui:ui-tooling:$androidxComposeVersion")
|
||||||
library("androidx-compose-ui", "androidx.compose.ui:ui:$androidxComposeVersion")
|
library("androidx-compose-ui", "androidx.compose.ui:ui:$androidxComposeVersion")
|
||||||
|
library("androidx-compose-ui-fonts", "androidx.compose.ui:ui-text-google-fonts:$androidxComposeVersion")
|
||||||
library("androidx-compose-compiler", "androidx.compose.compiler:compiler:$androidxComposeCompilerVersion")
|
library("androidx-compose-compiler", "androidx.compose.compiler:compiler:$androidxComposeCompilerVersion")
|
||||||
library("androidx-core", "androidx.core:core-ktx:$androidxCoreVersion")
|
library("androidx-core", "androidx.core:core-ktx:$androidxCoreVersion")
|
||||||
library("androidx-constraintlayout", "androidx.constraintlayout:constraintlayout-compose:$androidxConstraintlayoutVersion")
|
library("androidx-constraintlayout", "androidx.constraintlayout:constraintlayout-compose:$androidxConstraintlayoutVersion")
|
||||||
|
@ -219,6 +220,7 @@ dependencyResolutionManagement {
|
||||||
"androidx-compose-material3",
|
"androidx-compose-material3",
|
||||||
"androidx-compose-tooling",
|
"androidx-compose-tooling",
|
||||||
"androidx-compose-ui",
|
"androidx-compose-ui",
|
||||||
|
"androidx-compose-ui-fonts"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
bundle(
|
bundle(
|
||||||
|
|
|
@ -1,32 +0,0 @@
|
||||||
package co.electriccoin.zcash.ui.design.compat
|
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import androidx.annotation.FontRes
|
|
||||||
import androidx.core.content.res.ResourcesCompat
|
|
||||||
import co.electriccoin.zcash.spackle.AndroidApiVersion
|
|
||||||
import co.electriccoin.zcash.ui.design.R
|
|
||||||
import kotlinx.coroutines.Dispatchers
|
|
||||||
import kotlinx.coroutines.withContext
|
|
||||||
|
|
||||||
object FontCompat {
|
|
||||||
fun isFontPrefetchNeeded() = !AndroidApiVersion.isAtLeastO
|
|
||||||
|
|
||||||
suspend fun prefetchFontsLegacy(context: Context) {
|
|
||||||
prefetchFontLegacy(context, R.font.rubik_medium)
|
|
||||||
prefetchFontLegacy(context, R.font.rubik_regular)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Pre-fetches fonts on Android N (API 25) and below.
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* ResourcesCompat is used implicitly by Compose on older Android versions.
|
|
||||||
* The backwards compatibility library performs disk IO and then
|
|
||||||
* caches the results. This moves that IO off the main thread, to prevent ANRs and
|
|
||||||
* jank during app startup.
|
|
||||||
*/
|
|
||||||
private suspend fun prefetchFontLegacy(context: Context, @FontRes fontRes: Int) =
|
|
||||||
withContext(Dispatchers.IO) {
|
|
||||||
ResourcesCompat.getFont(context, fontRes)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -3,39 +3,56 @@ package co.electriccoin.zcash.ui.design.theme.internal
|
||||||
import androidx.compose.material3.Typography
|
import androidx.compose.material3.Typography
|
||||||
import androidx.compose.runtime.Immutable
|
import androidx.compose.runtime.Immutable
|
||||||
import androidx.compose.runtime.staticCompositionLocalOf
|
import androidx.compose.runtime.staticCompositionLocalOf
|
||||||
|
import androidx.compose.ui.text.ExperimentalTextApi
|
||||||
import androidx.compose.ui.text.TextStyle
|
import androidx.compose.ui.text.TextStyle
|
||||||
import androidx.compose.ui.text.font.Font
|
|
||||||
import androidx.compose.ui.text.font.FontFamily
|
import androidx.compose.ui.text.font.FontFamily
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
|
import androidx.compose.ui.text.googlefonts.Font
|
||||||
|
import androidx.compose.ui.text.googlefonts.GoogleFont
|
||||||
import androidx.compose.ui.text.style.BaselineShift
|
import androidx.compose.ui.text.style.BaselineShift
|
||||||
import androidx.compose.ui.unit.ExperimentalUnitApi
|
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
import co.electriccoin.zcash.ui.design.R
|
import co.electriccoin.zcash.ui.design.R
|
||||||
|
|
||||||
private val Rubik = FontFamily(
|
@OptIn(ExperimentalTextApi::class)
|
||||||
Font(R.font.rubik_regular, FontWeight.W400),
|
private val provider = GoogleFont.Provider(
|
||||||
Font(R.font.rubik_medium, FontWeight.W500)
|
providerAuthority = "com.google.android.gms.fonts",
|
||||||
|
providerPackage = "com.google.android.gms",
|
||||||
|
certificates = R.array.com_google_android_gms_fonts_certs
|
||||||
)
|
)
|
||||||
|
|
||||||
@OptIn(ExperimentalUnitApi::class)
|
// We use bestEffort here to be able to get the closest font weight, if accidentally use
|
||||||
|
// an unspecified font weight and not the default one.
|
||||||
|
@OptIn(ExperimentalTextApi::class)
|
||||||
|
private val RubikFont = GoogleFont(name = "Rubik", bestEffort = true)
|
||||||
|
|
||||||
|
@OptIn(ExperimentalTextApi::class)
|
||||||
|
private val RubikFontFamily = FontFamily(
|
||||||
|
Font(googleFont = RubikFont, fontProvider = provider, weight = FontWeight.Normal), // W400
|
||||||
|
Font(googleFont = RubikFont, fontProvider = provider, weight = FontWeight.Medium), // W500
|
||||||
|
Font(googleFont = RubikFont, fontProvider = provider, weight = FontWeight.SemiBold), // W600
|
||||||
|
Font(googleFont = RubikFont, fontProvider = provider, weight = FontWeight.Bold) // W700
|
||||||
|
)
|
||||||
|
|
||||||
|
// If you change this definition of our Typography, don't forget to check if you use only
|
||||||
|
// the defined font weights above, otherwise the closest one will be used.
|
||||||
internal val Typography = Typography(
|
internal val Typography = Typography(
|
||||||
headlineLarge = TextStyle(
|
headlineLarge = TextStyle(
|
||||||
fontFamily = Rubik,
|
fontFamily = RubikFontFamily,
|
||||||
fontWeight = FontWeight.W600,
|
fontWeight = FontWeight.SemiBold,
|
||||||
fontSize = 30.sp,
|
fontSize = 30.sp,
|
||||||
),
|
),
|
||||||
bodyLarge = TextStyle(
|
bodyLarge = TextStyle(
|
||||||
fontFamily = Rubik,
|
fontFamily = RubikFontFamily,
|
||||||
fontWeight = FontWeight.Normal,
|
fontWeight = FontWeight.Normal,
|
||||||
fontSize = 16.sp
|
fontSize = 16.sp
|
||||||
),
|
),
|
||||||
bodySmall = TextStyle(
|
bodySmall = TextStyle(
|
||||||
fontFamily = Rubik,
|
fontFamily = RubikFontFamily,
|
||||||
fontWeight = FontWeight.Medium,
|
fontWeight = FontWeight.Medium,
|
||||||
fontSize = 16.sp
|
fontSize = 16.sp
|
||||||
),
|
),
|
||||||
labelLarge = TextStyle(
|
labelLarge = TextStyle(
|
||||||
fontFamily = Rubik,
|
fontFamily = RubikFontFamily,
|
||||||
fontWeight = FontWeight.Normal,
|
fontWeight = FontWeight.Normal,
|
||||||
fontSize = 16.sp
|
fontSize = 16.sp
|
||||||
),
|
),
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,32 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
Copyright 2022 The Android Open Source Project
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<resources>
|
||||||
|
<array name="com_google_android_gms_fonts_certs">
|
||||||
|
<item>@array/com_google_android_gms_fonts_certs_dev</item>
|
||||||
|
<item>@array/com_google_android_gms_fonts_certs_prod</item>
|
||||||
|
</array>
|
||||||
|
<string-array name="com_google_android_gms_fonts_certs_dev">
|
||||||
|
<item>
|
||||||
|
MIIEqDCCA5CgAwIBAgIJANWFuGx90071MA0GCSqGSIb3DQEBBAUAMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTAeFw0wODA0MTUyMzM2NTZaFw0zNTA5MDEyMzM2NTZaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBANbOLggKv+IxTdGNs8/TGFy0PTP6DHThvbbR24kT9ixcOd9W+EaBPWW+wPPKQmsHxajtWjmQwWfna8mZuSeJS48LIgAZlKkpFeVyxW0qMBujb8X8ETrWy550NaFtI6t9+u7hZeTfHwqNvacKhp1RbE6dBRGWynwMVX8XW8N1+UjFaq6GCJukT4qmpN2afb8sCjUigq0GuMwYXrFVee74bQgLHWGJwPmvmLHC69EH6kWr22ijx4OKXlSIx2xT1AsSHee70w5iDBiK4aph27yH3TxkXy9V89TDdexAcKk/cVHYNnDBapcavl7y0RiQ4biu8ymM8Ga/nmzhRKya6G0cGw8CAQOjgfwwgfkwHQYDVR0OBBYEFI0cxb6VTEM8YYY6FbBMvAPyT+CyMIHJBgNVHSMEgcEwgb6AFI0cxb6VTEM8YYY6FbBMvAPyT+CyoYGapIGXMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbYIJANWFuGx90071MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADggEBABnTDPEF+3iSP0wNfdIjIz1AlnrPzgAIHVvXxunW7SBrDhEglQZBbKJEk5kT0mtKoOD1JMrSu1xuTKEBahWRbqHsXclaXjoBADb0kkjVEJu/Lh5hgYZnOjvlba8Ld7HCKePCVePoTJBdI4fvugnL8TsgK05aIskyY0hKI9L8KfqfGTl1lzOv2KoWD0KWwtAWPoGChZxmQ+nBli+gwYMzM1vAkP+aayLe0a1EQimlOalO762r0GXO0ks+UeXde2Z4e+8S/pf7pITEI/tP+MxJTALw9QUWEv9lKTk+jkbqxbsh8nfBUapfKqYn0eidpwq2AzVp3juYl7//fKnaPhJD9gs=
|
||||||
|
</item>
|
||||||
|
</string-array>
|
||||||
|
<string-array name="com_google_android_gms_fonts_certs_prod">
|
||||||
|
<item>
|
||||||
|
MIIEQzCCAyugAwIBAgIJAMLgh0ZkSjCNMA0GCSqGSIb3DQEBBAUAMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDAeFw0wODA4MjEyMzEzMzRaFw0zNjAxMDcyMzEzMzRaMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBAKtWLgDYO6IIrgqWbxJOKdoR8qtW0I9Y4sypEwPpt1TTcvZApxsdyxMJZ2JORland2qSGT2y5b+3JKkedxiLDmpHpDsz2WCbdxgxRczfey5YZnTJ4VZbH0xqWVW/8lGmPav5xVwnIiJS6HXk+BVKZF+JcWjAsb/GEuq/eFdpuzSqeYTcfi6idkyugwfYwXFU1+5fZKUaRKYCwkkFQVfcAs1fXA5V+++FGfvjJ/CxURaSxaBvGdGDhfXE28LWuT9ozCl5xw4Yq5OGazvV24mZVSoOO0yZ31j7kYvtwYK6NeADwbSxDdJEqO4k//0zOHKrUiGYXtqw/A0LFFtqoZKFjnkCAQOjgdkwgdYwHQYDVR0OBBYEFMd9jMIhF1Ylmn/Tgt9r45jk14alMIGmBgNVHSMEgZ4wgZuAFMd9jMIhF1Ylmn/Tgt9r45jk14aloXikdjB0MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLR29vZ2xlIEluYy4xEDAOBgNVBAsTB0FuZHJvaWQxEDAOBgNVBAMTB0FuZHJvaWSCCQDC4IdGZEowjTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBAUAA4IBAQBt0lLO74UwLDYKqs6Tm8/yzKkEu116FmH4rkaymUIE0P9KaMftGlMexFlaYjzmB2OxZyl6euNXEsQH8gjwyxCUKRJNexBiGcCEyj6z+a1fuHHvkiaai+KL8W1EyNmgjmyy8AW7P+LLlkR+ho5zEHatRbM/YAnqGcFh5iZBqpknHf1SKMXFh4dd239FJ1jWYfbMDMy3NS5CTMQ2XFI1MvcyUTdZPErjQfTbQe3aDQsQcafEQPD+nqActifKZ0Np0IS9L9kR/wbNvyz6ENwPiTrjV2KRkEjH78ZMcUQXg0L3BYHJ3lc69Vs5Ddf9uUGGMYldX3WfMBEmh/9iFBDAaTCK
|
||||||
|
</item>
|
||||||
|
</string-array>
|
||||||
|
</resources>
|
|
@ -6,7 +6,7 @@
|
||||||
<application
|
<application
|
||||||
android:label="zcash-ui-integration-test">
|
android:label="zcash-ui-integration-test">
|
||||||
<activity
|
<activity
|
||||||
android:name="co.electriccoin.zcash.ui.integration.test.screen.scan.TestScanActivity"
|
android:name="co.electriccoin.zcash.ui.integration.test.common.IntegrationTestingActivity"
|
||||||
android:exported="false" />
|
android:exported="false" />
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
package co.electriccoin.zcash.ui.integration.test.common
|
||||||
|
|
||||||
|
import androidx.activity.ComponentActivity
|
||||||
|
|
||||||
|
class IntegrationTestingActivity : ComponentActivity()
|
|
@ -1,37 +0,0 @@
|
||||||
package co.electriccoin.zcash.ui.integration.test.screen.scan
|
|
||||||
|
|
||||||
import android.os.Bundle
|
|
||||||
import androidx.activity.ComponentActivity
|
|
||||||
import androidx.activity.compose.setContent
|
|
||||||
import androidx.compose.foundation.layout.fillMaxHeight
|
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
|
||||||
import androidx.compose.ui.Modifier
|
|
||||||
import co.electriccoin.zcash.ui.design.component.GradientSurface
|
|
||||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
|
||||||
import co.electriccoin.zcash.ui.screen.scan.WrapScan
|
|
||||||
|
|
||||||
class TestScanActivity : ComponentActivity() {
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
setupUiContent()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setupUiContent() {
|
|
||||||
setContent {
|
|
||||||
ZcashTheme {
|
|
||||||
GradientSurface(
|
|
||||||
Modifier
|
|
||||||
.fillMaxWidth()
|
|
||||||
.fillMaxHeight()
|
|
||||||
) {
|
|
||||||
WrapScan(
|
|
||||||
this,
|
|
||||||
goBack = {},
|
|
||||||
onScanned = {},
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -6,8 +6,8 @@ import androidx.compose.ui.test.junit4.createAndroidComposeRule
|
||||||
import androidx.compose.ui.test.onNodeWithTag
|
import androidx.compose.ui.test.onNodeWithTag
|
||||||
import androidx.test.filters.LargeTest
|
import androidx.test.filters.LargeTest
|
||||||
import co.electriccoin.zcash.test.UiTestPrerequisites
|
import co.electriccoin.zcash.test.UiTestPrerequisites
|
||||||
|
import co.electriccoin.zcash.ui.integration.test.common.IntegrationTestingActivity
|
||||||
import co.electriccoin.zcash.ui.integration.test.getPermissionPositiveButtonUiObject
|
import co.electriccoin.zcash.ui.integration.test.getPermissionPositiveButtonUiObject
|
||||||
import co.electriccoin.zcash.ui.integration.test.screen.scan.TestScanActivity
|
|
||||||
import co.electriccoin.zcash.ui.screen.scan.ScanTag
|
import co.electriccoin.zcash.ui.screen.scan.ScanTag
|
||||||
import co.electriccoin.zcash.ui.screen.scan.model.ScanState
|
import co.electriccoin.zcash.ui.screen.scan.model.ScanState
|
||||||
import org.junit.Assert
|
import org.junit.Assert
|
||||||
|
@ -19,7 +19,7 @@ import org.junit.Test
|
||||||
class ScanViewIntegrationTest : UiTestPrerequisites() {
|
class ScanViewIntegrationTest : UiTestPrerequisites() {
|
||||||
|
|
||||||
@get:Rule
|
@get:Rule
|
||||||
val composeTestRule = createAndroidComposeRule<TestScanActivity>()
|
val composeTestRule = createAndroidComposeRule<IntegrationTestingActivity>()
|
||||||
|
|
||||||
private lateinit var testSetup: ScanViewTestSetup
|
private lateinit var testSetup: ScanViewTestSetup
|
||||||
|
|
||||||
|
|
|
@ -11,9 +11,9 @@ import androidx.compose.ui.test.performClick
|
||||||
import androidx.test.filters.LargeTest
|
import androidx.test.filters.LargeTest
|
||||||
import co.electriccoin.zcash.test.UiTestPrerequisites
|
import co.electriccoin.zcash.test.UiTestPrerequisites
|
||||||
import co.electriccoin.zcash.ui.R
|
import co.electriccoin.zcash.ui.R
|
||||||
|
import co.electriccoin.zcash.ui.integration.test.common.IntegrationTestingActivity
|
||||||
import co.electriccoin.zcash.ui.integration.test.getPermissionPositiveButtonUiObject
|
import co.electriccoin.zcash.ui.integration.test.getPermissionPositiveButtonUiObject
|
||||||
import co.electriccoin.zcash.ui.integration.test.getStringResource
|
import co.electriccoin.zcash.ui.integration.test.getStringResource
|
||||||
import co.electriccoin.zcash.ui.integration.test.screen.scan.TestScanActivity
|
|
||||||
import co.electriccoin.zcash.ui.integration.test.waitForDeviceIdle
|
import co.electriccoin.zcash.ui.integration.test.waitForDeviceIdle
|
||||||
import co.electriccoin.zcash.ui.screen.scan.ScanTag
|
import co.electriccoin.zcash.ui.screen.scan.ScanTag
|
||||||
import co.electriccoin.zcash.ui.screen.scan.model.ScanState
|
import co.electriccoin.zcash.ui.screen.scan.model.ScanState
|
||||||
|
@ -28,7 +28,7 @@ import kotlin.time.Duration.Companion.milliseconds
|
||||||
class ScanViewTest : UiTestPrerequisites() {
|
class ScanViewTest : UiTestPrerequisites() {
|
||||||
|
|
||||||
@get:Rule
|
@get:Rule
|
||||||
val composeTestRule = createAndroidComposeRule<TestScanActivity>()
|
val composeTestRule = createAndroidComposeRule<IntegrationTestingActivity>()
|
||||||
|
|
||||||
private lateinit var testSetup: ScanViewTestSetup
|
private lateinit var testSetup: ScanViewTestSetup
|
||||||
|
|
||||||
|
|
|
@ -6,13 +6,7 @@
|
||||||
<application
|
<application
|
||||||
android:label="zcash-ui-test" >
|
android:label="zcash-ui-test" >
|
||||||
<activity
|
<activity
|
||||||
android:name="co.electriccoin.zcash.ui.screen.onboarding.TestOnboardingActivity"
|
android:name="co.electriccoin.zcash.ui.common.UiTestingActivity"
|
||||||
android:exported="false" />
|
|
||||||
<activity
|
|
||||||
android:name="co.electriccoin.zcash.ui.screen.backup.TestBackupActivity"
|
|
||||||
android:exported="false" />
|
|
||||||
<activity
|
|
||||||
android:name="co.electriccoin.zcash.ui.screen.update.TestUpdateActivity"
|
|
||||||
android:exported="false" />
|
android:exported="false" />
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
package co.electriccoin.zcash.ui.common
|
||||||
|
|
||||||
|
import androidx.activity.ComponentActivity
|
||||||
|
|
||||||
|
class UiTestingActivity : ComponentActivity()
|
|
@ -1,40 +0,0 @@
|
||||||
package co.electriccoin.zcash.ui.screen.backup
|
|
||||||
|
|
||||||
import android.os.Bundle
|
|
||||||
import androidx.activity.ComponentActivity
|
|
||||||
import androidx.activity.compose.setContent
|
|
||||||
import androidx.compose.foundation.layout.fillMaxHeight
|
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
|
||||||
import androidx.compose.ui.Modifier
|
|
||||||
import cash.z.ecc.sdk.fixture.PersistableWalletFixture
|
|
||||||
import co.electriccoin.zcash.ui.design.component.GradientSurface
|
|
||||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
|
||||||
import co.electriccoin.zcash.ui.screen.backup.model.BackupStage
|
|
||||||
import co.electriccoin.zcash.ui.screen.backup.state.BackupState
|
|
||||||
|
|
||||||
class TestBackupActivity : ComponentActivity() {
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
setupUiContent()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setupUiContent() {
|
|
||||||
setContent {
|
|
||||||
ZcashTheme {
|
|
||||||
GradientSurface(
|
|
||||||
Modifier
|
|
||||||
.fillMaxWidth()
|
|
||||||
.fillMaxHeight()
|
|
||||||
) {
|
|
||||||
WrapBackup(
|
|
||||||
persistableWallet = PersistableWalletFixture.new(),
|
|
||||||
backupState = BackupState(BackupStage.EducationOverview),
|
|
||||||
onCopyToClipboard = {},
|
|
||||||
onBackupComplete = {}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
package co.electriccoin.zcash.ui.screen.backup.integration
|
||||||
|
|
||||||
|
import androidx.compose.ui.test.junit4.createAndroidComposeRule
|
||||||
|
import androidx.compose.ui.test.onNodeWithText
|
||||||
|
import androidx.compose.ui.test.performClick
|
||||||
|
import androidx.test.filters.MediumTest
|
||||||
|
import co.electriccoin.zcash.test.UiTestPrerequisites
|
||||||
|
import co.electriccoin.zcash.ui.R
|
||||||
|
import co.electriccoin.zcash.ui.common.UiTestingActivity
|
||||||
|
import co.electriccoin.zcash.ui.fixture.TestChoicesFixture
|
||||||
|
import co.electriccoin.zcash.ui.screen.backup.model.BackupStage
|
||||||
|
import co.electriccoin.zcash.ui.screen.backup.view.BackupTestSetup
|
||||||
|
import co.electriccoin.zcash.ui.test.getStringResource
|
||||||
|
import org.junit.Assert.assertEquals
|
||||||
|
import org.junit.Rule
|
||||||
|
import org.junit.Test
|
||||||
|
|
||||||
|
class BackupActivityTest : UiTestPrerequisites() {
|
||||||
|
|
||||||
|
@get:Rule
|
||||||
|
val composeTestRule = createAndroidComposeRule<UiTestingActivity>()
|
||||||
|
|
||||||
|
private fun newTestSetup(): BackupTestSetup {
|
||||||
|
return BackupTestSetup(
|
||||||
|
composeTestRule,
|
||||||
|
BackupStage.EducationOverview,
|
||||||
|
TestChoicesFixture.new(TestChoicesFixture.INITIAL_CHOICES)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@MediumTest
|
||||||
|
fun current_stage_restoration_activity() {
|
||||||
|
val testSetup = newTestSetup()
|
||||||
|
testSetup.setDefaultContent()
|
||||||
|
|
||||||
|
assertEquals(BackupStage.EducationOverview, testSetup.getStage())
|
||||||
|
|
||||||
|
composeTestRule.onNodeWithText(getStringResource(R.string.new_wallet_1_button)).also {
|
||||||
|
it.performClick()
|
||||||
|
}
|
||||||
|
|
||||||
|
assertEquals(BackupStage.EducationRecoveryPhrase, testSetup.getStage())
|
||||||
|
|
||||||
|
composeTestRule.activityRule.scenario.onActivity {
|
||||||
|
it.recreate()
|
||||||
|
}
|
||||||
|
|
||||||
|
assertEquals(BackupStage.EducationRecoveryPhrase, testSetup.getStage())
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,8 +1,8 @@
|
||||||
package co.electriccoin.zcash.ui.screen.backup.view
|
package co.electriccoin.zcash.ui.screen.backup.integration
|
||||||
|
|
||||||
import androidx.compose.ui.test.hasTestTag
|
import androidx.compose.ui.test.hasTestTag
|
||||||
import androidx.compose.ui.test.junit4.StateRestorationTester
|
import androidx.compose.ui.test.junit4.StateRestorationTester
|
||||||
import androidx.compose.ui.test.junit4.createAndroidComposeRule
|
import androidx.compose.ui.test.junit4.createComposeRule
|
||||||
import androidx.compose.ui.test.onAllNodesWithTag
|
import androidx.compose.ui.test.onAllNodesWithTag
|
||||||
import androidx.compose.ui.test.onChildren
|
import androidx.compose.ui.test.onChildren
|
||||||
import androidx.compose.ui.test.onNodeWithText
|
import androidx.compose.ui.test.onNodeWithText
|
||||||
|
@ -12,16 +12,17 @@ import co.electriccoin.zcash.test.UiTestPrerequisites
|
||||||
import co.electriccoin.zcash.ui.R
|
import co.electriccoin.zcash.ui.R
|
||||||
import co.electriccoin.zcash.ui.fixture.TestChoicesFixture
|
import co.electriccoin.zcash.ui.fixture.TestChoicesFixture
|
||||||
import co.electriccoin.zcash.ui.screen.backup.BackupTag
|
import co.electriccoin.zcash.ui.screen.backup.BackupTag
|
||||||
import co.electriccoin.zcash.ui.screen.backup.TestBackupActivity
|
|
||||||
import co.electriccoin.zcash.ui.screen.backup.model.BackupStage
|
import co.electriccoin.zcash.ui.screen.backup.model.BackupStage
|
||||||
|
import co.electriccoin.zcash.ui.screen.backup.view.BackupTestSetup
|
||||||
import co.electriccoin.zcash.ui.test.getStringResource
|
import co.electriccoin.zcash.ui.test.getStringResource
|
||||||
import org.junit.Assert.assertEquals
|
import org.junit.Assert.assertEquals
|
||||||
import org.junit.Rule
|
import org.junit.Rule
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
||||||
class BackupIntegrationTest : UiTestPrerequisites() {
|
class BackupIntegrationTest : UiTestPrerequisites() {
|
||||||
|
|
||||||
@get:Rule
|
@get:Rule
|
||||||
val composeTestRule = createAndroidComposeRule<TestBackupActivity>()
|
val composeTestRule = createComposeRule()
|
||||||
|
|
||||||
private fun newTestSetup(initialStage: BackupStage): BackupTestSetup {
|
private fun newTestSetup(initialStage: BackupStage): BackupTestSetup {
|
||||||
return BackupTestSetup(
|
return BackupTestSetup(
|
||||||
|
@ -92,25 +93,4 @@ class BackupIntegrationTest : UiTestPrerequisites() {
|
||||||
assertEquals(2, testSetup.getOnChoicesCallbackCount())
|
assertEquals(2, testSetup.getOnChoicesCallbackCount())
|
||||||
assertEquals(4, testSetup.getSelectedChoicesCount())
|
assertEquals(4, testSetup.getSelectedChoicesCount())
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
@MediumTest
|
|
||||||
fun current_stage_restoration_activity() {
|
|
||||||
val testSetup = newTestSetup(BackupStage.EducationOverview)
|
|
||||||
testSetup.setDefaultContent()
|
|
||||||
|
|
||||||
assertEquals(BackupStage.EducationOverview, testSetup.getStage())
|
|
||||||
|
|
||||||
composeTestRule.onNodeWithText(getStringResource(R.string.new_wallet_1_button)).also {
|
|
||||||
it.performClick()
|
|
||||||
}
|
|
||||||
|
|
||||||
assertEquals(BackupStage.EducationRecoveryPhrase, testSetup.getStage())
|
|
||||||
|
|
||||||
composeTestRule.activityRule.scenario.onActivity {
|
|
||||||
it.recreate()
|
|
||||||
}
|
|
||||||
|
|
||||||
assertEquals(BackupStage.EducationRecoveryPhrase, testSetup.getStage())
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -1,55 +0,0 @@
|
||||||
package co.electriccoin.zcash.ui.screen.onboarding
|
|
||||||
|
|
||||||
import android.os.Bundle
|
|
||||||
import androidx.activity.ComponentActivity
|
|
||||||
import androidx.activity.compose.setContent
|
|
||||||
import androidx.activity.viewModels
|
|
||||||
import androidx.compose.foundation.layout.fillMaxHeight
|
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
|
||||||
import androidx.compose.runtime.Composable
|
|
||||||
import androidx.compose.runtime.collectAsState
|
|
||||||
import androidx.compose.ui.Modifier
|
|
||||||
import co.electriccoin.zcash.ui.design.component.GradientSurface
|
|
||||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
|
||||||
import co.electriccoin.zcash.ui.screen.onboarding.view.Onboarding
|
|
||||||
import co.electriccoin.zcash.ui.screen.onboarding.viewmodel.OnboardingViewModel
|
|
||||||
|
|
||||||
class TestOnboardingActivity : ComponentActivity() {
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
setupUiContent()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setupUiContent() {
|
|
||||||
setContent {
|
|
||||||
ZcashTheme {
|
|
||||||
GradientSurface(
|
|
||||||
Modifier
|
|
||||||
.fillMaxWidth()
|
|
||||||
.fillMaxHeight()
|
|
||||||
) {
|
|
||||||
WrapOnboarding()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Composable
|
|
||||||
private fun WrapOnboarding() {
|
|
||||||
val onboardingViewModel by viewModels<OnboardingViewModel>()
|
|
||||||
|
|
||||||
// TODO [#383]: https://github.com/zcash/secant-android-wallet/issues/383
|
|
||||||
if (!onboardingViewModel.isImporting.collectAsState().value) {
|
|
||||||
Onboarding(
|
|
||||||
onboardingState = onboardingViewModel.onboardingState,
|
|
||||||
isDebugMenuEnabled = false,
|
|
||||||
onImportWallet = { onboardingViewModel.isImporting.value = true },
|
|
||||||
onCreateWallet = {},
|
|
||||||
onFixtureWallet = {}
|
|
||||||
)
|
|
||||||
|
|
||||||
reportFullyDrawn()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
package co.electriccoin.zcash.ui.screen.onboarding.integration
|
||||||
|
|
||||||
|
import androidx.compose.ui.test.junit4.createAndroidComposeRule
|
||||||
|
import androidx.compose.ui.test.onNodeWithText
|
||||||
|
import androidx.compose.ui.test.performClick
|
||||||
|
import androidx.test.filters.MediumTest
|
||||||
|
import co.electriccoin.zcash.test.UiTestPrerequisites
|
||||||
|
import co.electriccoin.zcash.ui.R
|
||||||
|
import co.electriccoin.zcash.ui.common.UiTestingActivity
|
||||||
|
import co.electriccoin.zcash.ui.screen.onboarding.model.OnboardingStage
|
||||||
|
import co.electriccoin.zcash.ui.screen.onboarding.view.OnboardingTestSetup
|
||||||
|
import co.electriccoin.zcash.ui.test.getStringResource
|
||||||
|
import org.junit.Assert.assertEquals
|
||||||
|
import org.junit.Rule
|
||||||
|
import org.junit.Test
|
||||||
|
|
||||||
|
// TODO [#382]: https://github.com/zcash/secant-android-wallet/issues/382
|
||||||
|
class OnboardingActivityTest : UiTestPrerequisites() {
|
||||||
|
@get:Rule
|
||||||
|
val composeTestRule = createAndroidComposeRule<UiTestingActivity>()
|
||||||
|
|
||||||
|
private fun newTestSetup() = OnboardingTestSetup(composeTestRule, OnboardingStage.ShieldedByDefault)
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@MediumTest
|
||||||
|
fun current_stage_restoration_activity() {
|
||||||
|
val testSetup = newTestSetup()
|
||||||
|
testSetup.setDefaultContent()
|
||||||
|
|
||||||
|
assertEquals(OnboardingStage.ShieldedByDefault, testSetup.getOnboardingStage())
|
||||||
|
|
||||||
|
composeTestRule.onNodeWithText(getStringResource(R.string.onboarding_next)).also {
|
||||||
|
it.performClick()
|
||||||
|
}
|
||||||
|
|
||||||
|
assertEquals(OnboardingStage.UnifiedAddresses, testSetup.getOnboardingStage())
|
||||||
|
|
||||||
|
composeTestRule.activityRule.scenario.onActivity {
|
||||||
|
it.recreate()
|
||||||
|
}
|
||||||
|
|
||||||
|
assertEquals(OnboardingStage.UnifiedAddresses, testSetup.getOnboardingStage())
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,14 +1,14 @@
|
||||||
package co.electriccoin.zcash.ui.screen.onboarding.view
|
package co.electriccoin.zcash.ui.screen.onboarding.integration
|
||||||
|
|
||||||
import androidx.compose.ui.test.junit4.StateRestorationTester
|
import androidx.compose.ui.test.junit4.StateRestorationTester
|
||||||
import androidx.compose.ui.test.junit4.createAndroidComposeRule
|
import androidx.compose.ui.test.junit4.createComposeRule
|
||||||
import androidx.compose.ui.test.onNodeWithText
|
import androidx.compose.ui.test.onNodeWithText
|
||||||
import androidx.compose.ui.test.performClick
|
import androidx.compose.ui.test.performClick
|
||||||
import androidx.test.filters.MediumTest
|
import androidx.test.filters.MediumTest
|
||||||
import co.electriccoin.zcash.test.UiTestPrerequisites
|
import co.electriccoin.zcash.test.UiTestPrerequisites
|
||||||
import co.electriccoin.zcash.ui.R
|
import co.electriccoin.zcash.ui.R
|
||||||
import co.electriccoin.zcash.ui.screen.onboarding.TestOnboardingActivity
|
|
||||||
import co.electriccoin.zcash.ui.screen.onboarding.model.OnboardingStage
|
import co.electriccoin.zcash.ui.screen.onboarding.model.OnboardingStage
|
||||||
|
import co.electriccoin.zcash.ui.screen.onboarding.view.OnboardingTestSetup
|
||||||
import co.electriccoin.zcash.ui.test.getStringResource
|
import co.electriccoin.zcash.ui.test.getStringResource
|
||||||
import org.junit.Assert.assertEquals
|
import org.junit.Assert.assertEquals
|
||||||
import org.junit.Rule
|
import org.junit.Rule
|
||||||
|
@ -17,7 +17,7 @@ import org.junit.Test
|
||||||
// TODO [#382]: https://github.com/zcash/secant-android-wallet/issues/382
|
// TODO [#382]: https://github.com/zcash/secant-android-wallet/issues/382
|
||||||
class OnboardingIntegrationTest : UiTestPrerequisites() {
|
class OnboardingIntegrationTest : UiTestPrerequisites() {
|
||||||
@get:Rule
|
@get:Rule
|
||||||
val composeTestRule = createAndroidComposeRule<TestOnboardingActivity>()
|
val composeTestRule = createComposeRule()
|
||||||
|
|
||||||
private fun newTestSetup(initialStage: OnboardingStage) = OnboardingTestSetup(composeTestRule, initialStage)
|
private fun newTestSetup(initialStage: OnboardingStage) = OnboardingTestSetup(composeTestRule, initialStage)
|
||||||
|
|
||||||
|
@ -49,25 +49,4 @@ class OnboardingIntegrationTest : UiTestPrerequisites() {
|
||||||
|
|
||||||
assertEquals(OnboardingStage.More, testSetup.getOnboardingStage())
|
assertEquals(OnboardingStage.More, testSetup.getOnboardingStage())
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
@MediumTest
|
|
||||||
fun current_stage_restoration_activity() {
|
|
||||||
val testSetup = newTestSetup(OnboardingStage.ShieldedByDefault)
|
|
||||||
testSetup.setDefaultContent()
|
|
||||||
|
|
||||||
assertEquals(OnboardingStage.ShieldedByDefault, testSetup.getOnboardingStage())
|
|
||||||
|
|
||||||
composeTestRule.onNodeWithText(getStringResource(R.string.onboarding_next)).also {
|
|
||||||
it.performClick()
|
|
||||||
}
|
|
||||||
|
|
||||||
assertEquals(OnboardingStage.UnifiedAddresses, testSetup.getOnboardingStage())
|
|
||||||
|
|
||||||
composeTestRule.activityRule.scenario.onActivity {
|
|
||||||
it.recreate()
|
|
||||||
}
|
|
||||||
|
|
||||||
assertEquals(OnboardingStage.UnifiedAddresses, testSetup.getOnboardingStage())
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -1,36 +0,0 @@
|
||||||
package co.electriccoin.zcash.ui.screen.update
|
|
||||||
|
|
||||||
import android.os.Bundle
|
|
||||||
import androidx.activity.ComponentActivity
|
|
||||||
import androidx.activity.compose.setContent
|
|
||||||
import androidx.compose.foundation.layout.fillMaxHeight
|
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
|
||||||
import androidx.compose.ui.Modifier
|
|
||||||
import co.electriccoin.zcash.ui.design.component.GradientSurface
|
|
||||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
|
||||||
import co.electriccoin.zcash.ui.screen.update.fixture.UpdateInfoFixture
|
|
||||||
|
|
||||||
class TestUpdateActivity : ComponentActivity() {
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
setupUiContent()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setupUiContent() {
|
|
||||||
setContent {
|
|
||||||
ZcashTheme {
|
|
||||||
GradientSurface(
|
|
||||||
Modifier
|
|
||||||
.fillMaxWidth()
|
|
||||||
.fillMaxHeight()
|
|
||||||
) {
|
|
||||||
WrapUpdate(
|
|
||||||
this,
|
|
||||||
UpdateInfoFixture.new(appUpdateInfo = null)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
package co.electriccoin.zcash.ui.screen.update.integration
|
||||||
|
|
||||||
|
import androidx.compose.ui.test.junit4.ComposeContentTestRule
|
||||||
|
import androidx.compose.ui.test.junit4.createAndroidComposeRule
|
||||||
|
import androidx.compose.ui.test.onNodeWithTag
|
||||||
|
import androidx.compose.ui.test.performClick
|
||||||
|
import androidx.test.filters.MediumTest
|
||||||
|
import co.electriccoin.zcash.test.UiTestPrerequisites
|
||||||
|
import co.electriccoin.zcash.ui.common.UiTestingActivity
|
||||||
|
import co.electriccoin.zcash.ui.screen.update.AppUpdateChecker
|
||||||
|
import co.electriccoin.zcash.ui.screen.update.UpdateTag
|
||||||
|
import co.electriccoin.zcash.ui.screen.update.fixture.UpdateInfoFixture
|
||||||
|
import co.electriccoin.zcash.ui.screen.update.model.UpdateInfo
|
||||||
|
import co.electriccoin.zcash.ui.screen.update.model.UpdateState
|
||||||
|
import co.electriccoin.zcash.ui.screen.update.view.UpdateViewTestSetup
|
||||||
|
import org.junit.Assert.assertEquals
|
||||||
|
import org.junit.Rule
|
||||||
|
import org.junit.Test
|
||||||
|
|
||||||
|
class UpdateActivityViewTest : UiTestPrerequisites() {
|
||||||
|
|
||||||
|
@get:Rule
|
||||||
|
val composeTestRule = createAndroidComposeRule<UiTestingActivity>()
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@MediumTest
|
||||||
|
fun later_btn_force_update_test() {
|
||||||
|
val updateInfo = UpdateInfoFixture.new(
|
||||||
|
priority = AppUpdateChecker.Priority.HIGH,
|
||||||
|
force = true,
|
||||||
|
appUpdateInfo = null,
|
||||||
|
state = UpdateState.Prepared,
|
||||||
|
)
|
||||||
|
val testSetup = newTestSetup(updateInfo)
|
||||||
|
|
||||||
|
assertEquals(0, testSetup.getOnLaterCount())
|
||||||
|
|
||||||
|
composeTestRule.clickLater()
|
||||||
|
|
||||||
|
assertEquals(0, testSetup.getOnLaterCount())
|
||||||
|
|
||||||
|
composeTestRule.activity.onBackPressed()
|
||||||
|
|
||||||
|
assertEquals(0, testSetup.getOnLaterCount())
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun newTestSetup(updateInfo: UpdateInfo) = UpdateViewTestSetup(
|
||||||
|
composeTestRule,
|
||||||
|
updateInfo
|
||||||
|
).apply {
|
||||||
|
setDefaultContent()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun ComposeContentTestRule.clickLater() {
|
||||||
|
onNodeWithTag(UpdateTag.BTN_LATER).also {
|
||||||
|
it.performClick()
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,8 +3,8 @@ package co.electriccoin.zcash.ui.screen.update.integration
|
||||||
import androidx.compose.ui.test.junit4.createAndroidComposeRule
|
import androidx.compose.ui.test.junit4.createAndroidComposeRule
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import androidx.test.filters.MediumTest
|
import androidx.test.filters.MediumTest
|
||||||
|
import co.electriccoin.zcash.ui.common.UiTestingActivity
|
||||||
import co.electriccoin.zcash.ui.screen.update.AppUpdateChecker
|
import co.electriccoin.zcash.ui.screen.update.AppUpdateChecker
|
||||||
import co.electriccoin.zcash.ui.screen.update.TestUpdateActivity
|
|
||||||
import co.electriccoin.zcash.ui.screen.update.fixture.UpdateInfoFixture
|
import co.electriccoin.zcash.ui.screen.update.fixture.UpdateInfoFixture
|
||||||
import co.electriccoin.zcash.ui.screen.update.model.UpdateInfo
|
import co.electriccoin.zcash.ui.screen.update.model.UpdateInfo
|
||||||
import co.electriccoin.zcash.ui.screen.update.model.UpdateState
|
import co.electriccoin.zcash.ui.screen.update.model.UpdateState
|
||||||
|
@ -26,7 +26,7 @@ import kotlin.test.assertNull
|
||||||
@ExperimentalCoroutinesApi
|
@ExperimentalCoroutinesApi
|
||||||
class UpdateViewModelTest {
|
class UpdateViewModelTest {
|
||||||
@get:Rule
|
@get:Rule
|
||||||
val composeTestRule = createAndroidComposeRule<TestUpdateActivity>()
|
val composeTestRule = createAndroidComposeRule<UiTestingActivity>()
|
||||||
|
|
||||||
private lateinit var viewModel: UpdateViewModel
|
private lateinit var viewModel: UpdateViewModel
|
||||||
private lateinit var checker: AppUpdateCheckerMock
|
private lateinit var checker: AppUpdateCheckerMock
|
||||||
|
|
|
@ -2,12 +2,12 @@ package co.electriccoin.zcash.ui.screen.update.view
|
||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import androidx.activity.ComponentActivity
|
||||||
import androidx.compose.ui.test.junit4.createAndroidComposeRule
|
import androidx.compose.ui.test.junit4.createAndroidComposeRule
|
||||||
import androidx.test.core.app.ApplicationProvider
|
import androidx.test.core.app.ApplicationProvider
|
||||||
import androidx.test.filters.MediumTest
|
import androidx.test.filters.MediumTest
|
||||||
import cash.z.ecc.android.sdk.ext.onFirst
|
import cash.z.ecc.android.sdk.ext.onFirst
|
||||||
import co.electriccoin.zcash.ui.screen.update.AppUpdateCheckerImp
|
import co.electriccoin.zcash.ui.screen.update.AppUpdateCheckerImp
|
||||||
import co.electriccoin.zcash.ui.screen.update.TestUpdateActivity
|
|
||||||
import co.electriccoin.zcash.ui.screen.update.model.UpdateInfo
|
import co.electriccoin.zcash.ui.screen.update.model.UpdateInfo
|
||||||
import co.electriccoin.zcash.ui.screen.update.model.UpdateState
|
import co.electriccoin.zcash.ui.screen.update.model.UpdateState
|
||||||
import com.google.android.play.core.install.model.ActivityResult
|
import com.google.android.play.core.install.model.ActivityResult
|
||||||
|
@ -15,7 +15,7 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
import org.junit.Rule
|
import org.junit.Rule
|
||||||
import kotlin.test.Test
|
import org.junit.Test
|
||||||
import kotlin.test.assertNotNull
|
import kotlin.test.assertNotNull
|
||||||
import kotlin.test.assertNull
|
import kotlin.test.assertNull
|
||||||
import kotlin.test.assertTrue
|
import kotlin.test.assertTrue
|
||||||
|
@ -23,7 +23,7 @@ import kotlin.test.assertTrue
|
||||||
class AppUpdateCheckerImpTest {
|
class AppUpdateCheckerImpTest {
|
||||||
|
|
||||||
@get:Rule
|
@get:Rule
|
||||||
val composeTestRule = createAndroidComposeRule<TestUpdateActivity>()
|
val composeTestRule = createAndroidComposeRule<ComponentActivity>()
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val context: Context = ApplicationProvider.getApplicationContext()
|
val context: Context = ApplicationProvider.getApplicationContext()
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package co.electriccoin.zcash.ui.screen.update.view
|
package co.electriccoin.zcash.ui.screen.update.view
|
||||||
|
|
||||||
import androidx.compose.ui.test.junit4.ComposeContentTestRule
|
import androidx.compose.ui.test.junit4.ComposeContentTestRule
|
||||||
import androidx.compose.ui.test.junit4.createAndroidComposeRule
|
import androidx.compose.ui.test.junit4.createComposeRule
|
||||||
import androidx.compose.ui.test.onNodeWithTag
|
import androidx.compose.ui.test.onNodeWithTag
|
||||||
import androidx.compose.ui.test.onNodeWithText
|
import androidx.compose.ui.test.onNodeWithText
|
||||||
import androidx.compose.ui.test.onRoot
|
import androidx.compose.ui.test.onRoot
|
||||||
|
@ -10,7 +10,6 @@ import androidx.test.filters.MediumTest
|
||||||
import co.electriccoin.zcash.test.UiTestPrerequisites
|
import co.electriccoin.zcash.test.UiTestPrerequisites
|
||||||
import co.electriccoin.zcash.ui.R
|
import co.electriccoin.zcash.ui.R
|
||||||
import co.electriccoin.zcash.ui.screen.update.AppUpdateChecker
|
import co.electriccoin.zcash.ui.screen.update.AppUpdateChecker
|
||||||
import co.electriccoin.zcash.ui.screen.update.TestUpdateActivity
|
|
||||||
import co.electriccoin.zcash.ui.screen.update.UpdateTag
|
import co.electriccoin.zcash.ui.screen.update.UpdateTag
|
||||||
import co.electriccoin.zcash.ui.screen.update.fixture.UpdateInfoFixture
|
import co.electriccoin.zcash.ui.screen.update.fixture.UpdateInfoFixture
|
||||||
import co.electriccoin.zcash.ui.screen.update.model.UpdateInfo
|
import co.electriccoin.zcash.ui.screen.update.model.UpdateInfo
|
||||||
|
@ -24,29 +23,7 @@ import org.junit.Test
|
||||||
class UpdateViewTest : UiTestPrerequisites() {
|
class UpdateViewTest : UiTestPrerequisites() {
|
||||||
|
|
||||||
@get:Rule
|
@get:Rule
|
||||||
val composeTestRule = createAndroidComposeRule<TestUpdateActivity>()
|
val composeTestRule = createComposeRule()
|
||||||
|
|
||||||
@Test
|
|
||||||
@MediumTest
|
|
||||||
fun later_btn_force_update_test() {
|
|
||||||
val updateInfo = UpdateInfoFixture.new(
|
|
||||||
priority = AppUpdateChecker.Priority.HIGH,
|
|
||||||
force = true,
|
|
||||||
appUpdateInfo = null,
|
|
||||||
state = UpdateState.Prepared,
|
|
||||||
)
|
|
||||||
val testSetup = newTestSetup(updateInfo)
|
|
||||||
|
|
||||||
assertEquals(0, testSetup.getOnLaterCount())
|
|
||||||
|
|
||||||
composeTestRule.clickLater()
|
|
||||||
|
|
||||||
assertEquals(0, testSetup.getOnLaterCount())
|
|
||||||
|
|
||||||
composeTestRule.activity.onBackPressed()
|
|
||||||
|
|
||||||
assertEquals(0, testSetup.getOnLaterCount())
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@MediumTest
|
@MediumTest
|
||||||
|
|
|
@ -23,7 +23,6 @@ import androidx.navigation.compose.composable
|
||||||
import androidx.navigation.compose.rememberNavController
|
import androidx.navigation.compose.rememberNavController
|
||||||
import cash.z.ecc.sdk.model.ZecRequest
|
import cash.z.ecc.sdk.model.ZecRequest
|
||||||
import cash.z.ecc.sdk.send
|
import cash.z.ecc.sdk.send
|
||||||
import co.electriccoin.zcash.ui.design.compat.FontCompat
|
|
||||||
import co.electriccoin.zcash.ui.design.component.ConfigurationOverride
|
import co.electriccoin.zcash.ui.design.component.ConfigurationOverride
|
||||||
import co.electriccoin.zcash.ui.design.component.GradientSurface
|
import co.electriccoin.zcash.ui.design.component.GradientSurface
|
||||||
import co.electriccoin.zcash.ui.design.component.Override
|
import co.electriccoin.zcash.ui.design.component.Override
|
||||||
|
@ -82,15 +81,7 @@ class MainActivity : ComponentActivity() {
|
||||||
|
|
||||||
setupSplashScreen()
|
setupSplashScreen()
|
||||||
|
|
||||||
if (FontCompat.isFontPrefetchNeeded()) {
|
setupUiContent()
|
||||||
lifecycleScope.launch {
|
|
||||||
FontCompat.prefetchFontsLegacy(applicationContext)
|
|
||||||
|
|
||||||
setupUiContent()
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
setupUiContent()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupSplashScreen() {
|
private fun setupSplashScreen() {
|
||||||
|
|
Loading…
Reference in New Issue