testtags
This commit is contained in:
@@ -40,6 +40,7 @@ dependencies {
|
||||
implementation(project(":libraries:matrix"))
|
||||
implementation(project(":libraries:designsystem"))
|
||||
implementation(project(":libraries:elementresources"))
|
||||
implementation(project(":libraries:testtags"))
|
||||
implementation(libs.appyx.core)
|
||||
implementation(project(":libraries:ui-strings"))
|
||||
ksp(libs.showkase.processor)
|
||||
|
||||
@@ -57,6 +57,8 @@ import io.element.android.x.core.compose.textFieldState
|
||||
import io.element.android.x.designsystem.components.VectorIcon
|
||||
import io.element.android.x.features.login.R
|
||||
import io.element.android.x.features.login.error.changeServerError
|
||||
import io.element.android.x.testtags.TestTags
|
||||
import io.element.android.x.testtags.testTag
|
||||
|
||||
@Composable
|
||||
fun ChangeServerView(
|
||||
@@ -129,6 +131,7 @@ fun ChangeServerView(
|
||||
value = homeserverFieldState,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.testTag(TestTags.changeServerServer)
|
||||
.padding(top = 200.dp),
|
||||
onValueChange = {
|
||||
homeserverFieldState = it
|
||||
@@ -162,6 +165,7 @@ fun ChangeServerView(
|
||||
enabled = state.submitEnabled,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.testTag(TestTags.changeServerContinue)
|
||||
.padding(top = 44.dp)
|
||||
) {
|
||||
Text(text = "Continue")
|
||||
|
||||
@@ -61,6 +61,8 @@ import androidx.compose.ui.unit.sp
|
||||
import io.element.android.x.core.compose.textFieldState
|
||||
import io.element.android.x.features.login.error.loginError
|
||||
import io.element.android.x.matrix.core.SessionId
|
||||
import io.element.android.x.testtags.TestTags
|
||||
import io.element.android.x.testtags.testTag
|
||||
import io.element.android.x.ui.strings.R as StringR
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@@ -127,6 +129,7 @@ fun LoginRootScreen(
|
||||
onClick = onChangeServer,
|
||||
modifier = Modifier
|
||||
.align(Alignment.CenterEnd)
|
||||
.testTag(TestTags.loginChangeServer)
|
||||
.padding(top = 8.dp, end = 8.dp),
|
||||
content = {
|
||||
Text(text = "Change")
|
||||
@@ -137,6 +140,7 @@ fun LoginRootScreen(
|
||||
value = loginFieldState,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.testTag(TestTags.loginEmailUsername)
|
||||
.padding(top = 60.dp),
|
||||
label = {
|
||||
Text(text = stringResource(id = StringR.string.login_signin_username_hint))
|
||||
@@ -159,6 +163,7 @@ fun LoginRootScreen(
|
||||
value = passwordFieldState,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.testTag(TestTags.loginPassword)
|
||||
.padding(top = 24.dp),
|
||||
onValueChange = {
|
||||
passwordFieldState = it
|
||||
@@ -202,6 +207,7 @@ fun LoginRootScreen(
|
||||
enabled = state.submitEnabled,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.testTag(TestTags.loginContinue)
|
||||
.padding(vertical = 32.dp)
|
||||
) {
|
||||
Text(text = "Continue")
|
||||
|
||||
@@ -31,6 +31,7 @@ dependencies {
|
||||
implementation(project(":libraries:ui-strings"))
|
||||
implementation(project(":libraries:designsystem"))
|
||||
implementation(project(":libraries:architecture"))
|
||||
implementation(project(":libraries:testtags"))
|
||||
implementation(libs.accompanist.pager)
|
||||
implementation(libs.accompanist.pagerindicator)
|
||||
implementation(libs.appyx.core)
|
||||
|
||||
@@ -50,6 +50,8 @@ import com.google.accompanist.pager.HorizontalPager
|
||||
import com.google.accompanist.pager.HorizontalPagerIndicator
|
||||
import com.google.accompanist.pager.rememberPagerState
|
||||
import io.element.android.x.designsystem.components.VectorButton
|
||||
import io.element.android.x.testtags.TestTags
|
||||
import io.element.android.x.testtags.testTag
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import io.element.android.x.ui.strings.R as StringR
|
||||
@@ -127,6 +129,7 @@ fun OnBoardingScreen(
|
||||
enabled = true,
|
||||
modifier = Modifier
|
||||
.align(CenterHorizontally)
|
||||
.testTag(TestTags.onBoardingSignIn)
|
||||
.padding(top = 16.dp)
|
||||
)
|
||||
}
|
||||
|
||||
23
libraries/testtags/build.gradle.kts
Normal file
23
libraries/testtags/build.gradle.kts
Normal file
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
* Copyright (c) 2023 New Vector Ltd
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
plugins {
|
||||
id("io.element.android-compose-library")
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "io.element.android.x.testtags"
|
||||
}
|
||||
17
libraries/testtags/src/main/AndroidManifest.xml
Normal file
17
libraries/testtags/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!--
|
||||
~ Copyright (c) 2023 New Vector Ltd
|
||||
~
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<manifest />
|
||||
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
* Copyright (c) 2023 New Vector Ltd
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package io.element.android.x.testtags
|
||||
|
||||
import androidx.compose.ui.ExperimentalComposeUiApi
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.semantics.semantics
|
||||
import androidx.compose.ui.semantics.testTag
|
||||
import androidx.compose.ui.semantics.testTagsAsResourceId
|
||||
|
||||
/**
|
||||
* Add a testTag to a Modifier, to be used by external tool, like TrafficLight for instance.
|
||||
*/
|
||||
@OptIn(ExperimentalComposeUiApi::class)
|
||||
fun Modifier.testTag(id: TestTag) = this.then(
|
||||
semantics {
|
||||
testTag = id.value
|
||||
testTagsAsResourceId = true
|
||||
}
|
||||
)
|
||||
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright (c) 2023 New Vector Ltd
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package io.element.android.x.testtags
|
||||
|
||||
@JvmInline
|
||||
value class TestTag internal constructor(val value: String)
|
||||
|
||||
object TestTags {
|
||||
/**
|
||||
* OnBoarding screen
|
||||
*/
|
||||
val onBoardingSignIn = TestTag("onboarding-sign_in")
|
||||
|
||||
/**
|
||||
* Login screen
|
||||
*/
|
||||
val loginChangeServer = TestTag("login-change_server")
|
||||
val loginEmailUsername = TestTag("login-email_username")
|
||||
val loginPassword = TestTag("login-password")
|
||||
val loginContinue = TestTag("login-continue")
|
||||
|
||||
/**
|
||||
* Change server screen
|
||||
*/
|
||||
val changeServerServer = TestTag("change_server-server")
|
||||
val changeServerContinue = TestTag("change_server-continue")
|
||||
}
|
||||
|
||||
|
||||
@@ -41,6 +41,7 @@ include(":libraries:matrixui")
|
||||
include(":libraries:textcomposer")
|
||||
include(":libraries:elementresources")
|
||||
include(":libraries:ui-strings")
|
||||
include(":libraries:testtags")
|
||||
include(":features:onboarding")
|
||||
include(":features:login")
|
||||
include(":features:logout")
|
||||
|
||||
Reference in New Issue
Block a user