Skip to content

Commit d5198bd

Browse files
SaintPatrckclaude
andcommitted
Fix test failures caused by LTR visual transformation
## Objective Update test assertions to expect LTR-wrapped text in password and sensitive fields following the implementation of ForceLtrVisualTransformation. ## Changes - Made LRO and PDF constants public in ForceLtrVisualTransformation.kt to enable cross-module access from :app tests - Updated VaultAddEditScreenTest assertions (4 locations) to expect text wrapped with Unicode LTR control characters (LRO/PDF) - Updated VaultItemScreenTest assertions (3 locations) for password, card number, and security code fields - Added @Suppress("StringTemplate") annotations to maintain code clarity with wrapped text format ## Technical Details BitwardenPasswordField now applies ForceLtrVisualTransformation to visible, read-only fields, wrapping text with `\u202A` (LRO) prefix and `\u202C` (PDF) suffix to ensure left-to-right display in all locales. Tests now correctly expect this transformed output. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
1 parent 08636a6 commit d5198bd

File tree

3 files changed

+21
-9
lines changed

3 files changed

+21
-9
lines changed

app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ import androidx.compose.ui.test.performTouchInput
4141
import androidx.core.net.toUri
4242
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
4343
import com.bitwarden.ui.platform.components.snackbar.model.BitwardenSnackbarData
44+
import com.bitwarden.ui.platform.components.util.LRO
45+
import com.bitwarden.ui.platform.components.util.PDF
4446
import com.bitwarden.ui.platform.manager.IntentManager
4547
import com.bitwarden.ui.util.asText
4648
import com.bitwarden.ui.util.assertNoDialogExists
@@ -682,9 +684,10 @@ class VaultAddEditScreenTest : BitwardenComposeTest() {
682684
composeTestRule
683685
.onNodeWithContentDescription("Show")
684686
.performClick()
687+
@Suppress("StringTemplate")
685688
composeTestRule
686689
.onNodeWithText("Password")
687-
.assertTextEquals("Password", "p@ssw0rd")
690+
.assertTextEquals("Password", "${LRO}p@ssw0rd$PDF")
688691
.assertIsEnabled()
689692
composeTestRule
690693
.onNodeWithContentDescription("Hide")
@@ -1004,18 +1007,20 @@ class VaultAddEditScreenTest : BitwardenComposeTest() {
10041007
.assertExists()
10051008
.performClick()
10061009

1010+
@Suppress("StringTemplate")
10071011
composeTestRule
10081012
.onNodeWithText("Authenticator key")
1009-
.assertTextEquals("Authenticator key", "TestCode")
1013+
.assertTextEquals("Authenticator key", "${LRO}TestCode$PDF")
10101014
.assertIsEnabled()
10111015

10121016
mutableStateFlow.update { currentState ->
10131017
updateLoginType(currentState) { copy(totp = "NewTestCode") }
10141018
}
10151019

1020+
@Suppress("StringTemplate")
10161021
composeTestRule
10171022
.onNodeWithTextAfterScroll("Authenticator key")
1018-
.assertTextEquals("Authenticator key", "NewTestCode")
1023+
.assertTextEquals("Authenticator key", "${LRO}NewTestCode$PDF")
10191024

10201025
mutableStateFlow.update { currentState ->
10211026
updateLoginType(currentState) { copy(totp = null) }
@@ -1040,9 +1045,10 @@ class VaultAddEditScreenTest : BitwardenComposeTest() {
10401045
.assertExists()
10411046
.performClick()
10421047

1048+
@Suppress("StringTemplate")
10431049
composeTestRule
10441050
.onNodeWithText("Authenticator key")
1045-
.assertTextEquals("Authenticator key", "TestCode")
1051+
.assertTextEquals("Authenticator key", "${LRO}TestCode$PDF")
10461052
.assertIsEnabled()
10471053

10481054
composeTestRule

app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemScreenTest.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ import androidx.core.net.toUri
2828
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
2929
import com.bitwarden.ui.platform.components.icon.model.IconData
3030
import com.bitwarden.ui.platform.components.snackbar.model.BitwardenSnackbarData
31+
import com.bitwarden.ui.platform.components.util.LRO
32+
import com.bitwarden.ui.platform.components.util.PDF
3133
import com.bitwarden.ui.platform.manager.IntentManager
3234
import com.bitwarden.ui.platform.resource.BitwardenDrawable
3335
import com.bitwarden.ui.platform.resource.BitwardenString
@@ -62,6 +64,7 @@ import org.junit.Test
6264
import java.time.Instant
6365

6466
@Suppress("LargeClass")
67+
6568
class VaultItemScreenTest : BitwardenComposeTest() {
6669

6770
private var onNavigateBackCalled = false
@@ -1000,9 +1003,10 @@ class VaultItemScreenTest : BitwardenComposeTest() {
10001003
)
10011004
}
10021005

1006+
@Suppress("StringTemplate")
10031007
composeTestRule
10041008
.onNodeWithText("Password")
1005-
.assertTextEquals("Password", "p@ssw0rd")
1009+
.assertTextEquals("Password", "${LRO}p@ssw0rd$PDF")
10061010
.assertIsEnabled()
10071011
composeTestRule
10081012
.onNodeWithTextAfterScroll("Check password for data breaches")
@@ -2797,9 +2801,10 @@ class VaultItemScreenTest : BitwardenComposeTest() {
27972801
)
27982802
}
27992803

2804+
@Suppress("StringTemplate")
28002805
composeTestRule
28012806
.onNodeWithText("Number")
2802-
.assertTextEquals("Number", "number")
2807+
.assertTextEquals("Number", "${LRO}number$PDF")
28032808
.assertIsEnabled()
28042809
composeTestRule
28052810
.onNodeWithTextAfterScroll("Number")
@@ -2947,9 +2952,10 @@ class VaultItemScreenTest : BitwardenComposeTest() {
29472952
)
29482953
}
29492954

2955+
@Suppress("StringTemplate")
29502956
composeTestRule
29512957
.onNodeWithText("Security code")
2952-
.assertTextEquals("Security code", "123")
2958+
.assertTextEquals("Security code", "${LRO}123$PDF")
29532959
.assertIsEnabled()
29542960
composeTestRule
29552961
.onNodeWithContentDescription("Copy security code")

ui/src/main/kotlin/com/bitwarden/ui/platform/components/util/ForceLtrVisualTransformation.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ import androidx.compose.ui.text.input.TransformedText
99
import androidx.compose.ui.text.input.VisualTransformation
1010

1111
// Unicode characters for forcing LTR direction
12-
internal const val LRO = "\u202A"
13-
internal const val PDF = "\u202C"
12+
const val LRO = "\u202A"
13+
const val PDF = "\u202C"
1414

1515
/**
1616
* A [VisualTransformation] that forces the output to have an LTR text direction.

0 commit comments

Comments
 (0)