Browse Source

testtags

feature/jme/update_rust_sdk
Benoit Marty 2 years ago
parent
commit
c3b1dbe1c4
  1. 1
      features/login/build.gradle.kts
  2. 4
      features/login/src/main/kotlin/io/element/android/x/features/login/changeserver/ChangeServerView.kt
  3. 6
      features/login/src/main/kotlin/io/element/android/x/features/login/root/LoginRootScreen.kt
  4. 1
      features/onboarding/build.gradle.kts
  5. 3
      features/onboarding/src/main/kotlin/io/element/android/x/features/onboarding/OnBoardingScreen.kt
  6. 23
      libraries/testtags/build.gradle.kts
  7. 17
      libraries/testtags/src/main/AndroidManifest.xml
  8. 34
      libraries/testtags/src/main/kotlin/io/element/android/x/testtags/Compose.kt
  9. 43
      libraries/testtags/src/main/kotlin/io/element/android/x/testtags/TestTags.kt
  10. 1
      settings.gradle.kts

1
features/login/build.gradle.kts

@ -40,6 +40,7 @@ dependencies { @@ -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)

4
features/login/src/main/kotlin/io/element/android/x/features/login/changeserver/ChangeServerView.kt

@ -57,6 +57,8 @@ import io.element.android.x.core.compose.textFieldState @@ -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( @@ -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( @@ -162,6 +165,7 @@ fun ChangeServerView(
enabled = state.submitEnabled,
modifier = Modifier
.fillMaxWidth()
.testTag(TestTags.changeServerContinue)
.padding(top = 44.dp)
) {
Text(text = "Continue")

6
features/login/src/main/kotlin/io/element/android/x/features/login/root/LoginRootScreen.kt

@ -61,6 +61,8 @@ import androidx.compose.ui.unit.sp @@ -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( @@ -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( @@ -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( @@ -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( @@ -202,6 +207,7 @@ fun LoginRootScreen(
enabled = state.submitEnabled,
modifier = Modifier
.fillMaxWidth()
.testTag(TestTags.loginContinue)
.padding(vertical = 32.dp)
) {
Text(text = "Continue")

1
features/onboarding/build.gradle.kts

@ -31,6 +31,7 @@ dependencies { @@ -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)

3
features/onboarding/src/main/kotlin/io/element/android/x/features/onboarding/OnBoardingScreen.kt

@ -50,6 +50,8 @@ import com.google.accompanist.pager.HorizontalPager @@ -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( @@ -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

@ -0,0 +1,23 @@ @@ -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

@ -0,0 +1,17 @@ @@ -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 />

34
libraries/testtags/src/main/kotlin/io/element/android/x/testtags/Compose.kt

@ -0,0 +1,34 @@ @@ -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
}
)

43
libraries/testtags/src/main/kotlin/io/element/android/x/testtags/TestTags.kt

@ -0,0 +1,43 @@ @@ -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")
}

1
settings.gradle.kts

@ -41,6 +41,7 @@ include(":libraries:matrixui") @@ -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")

Loading…
Cancel
Save