/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 Ġ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 . Ċ Ġ*/ Ċ Ċ package Ġandroidx . compose . foundation . text field Ċ Ċ import Ġandroidx . compose . foundation . layout . required Width Ċ import Ġandroidx . compose . foundation . text . Basic TextField Ċ import Ġandroidx . compose . foundation . text . Core TextField Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . focus . Focus Request er Ċ import Ġandroidx . compose . ui . focus . focus Request er Ċ import Ġandroidx . compose . ui . focus . on Focus Changed Ċ import Ġandroidx . compose . ui . platform . test Tag Ċ import Ġandroidx . compose . ui . test . junit 4 . create Compose Rule Ċ import Ġandroidx . compose . ui . test . on Node With Tag Ċ import Ġandroidx . compose . ui . test . perform Click Ċ import Ġandroidx . compose . ui . text . input . TextField Value Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . test . ext . junit . runners . Android JUnit 4 Ċ import Ġandroidx . test . filters . Large Test Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ Ċ @ Large Test Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ class ĠTextField Focus Test Ġ{ ĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġrule Ġ= Ġcreate Compose Rule () ĊĊĠĠĠ Ġ@ Composable ĊĠĠĠ Ġprivate Ġfun ĠTextField App ( data List : ĠList < Focus TestData >) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( data Ġin Ġdata List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġremember Ġ{ Ġmutable State Of ("") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBasic TextField ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġeditor . value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. focus Request er ( data . focus Request er ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Focus Changed Ġ{ Ġdata . focused Ġ= Ġit . is Focused Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. required Width ( 1 0 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Value Change Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . value Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠFocus TestData ( val Ġfocus Request er : ĠFocus Request er , Ġvar Ġfocused : ĠBoolean Ġ= Ġfalse ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġrequest Focus () Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġtest DataList : ĠList < Focus TestData > ĊĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest DataList Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFocus TestData ( Focus Request er ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFocus TestData ( Focus Request er ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFocus TestData ( Focus Request er ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠTextField App ( test DataList ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ Ġtest DataList [ 0 ]. focus Request er . request Focus () Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( test DataList [ 0 ]. focused ). isTrue () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( test DataList [ 1 ]. focused ). isFalse () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( test DataList [ 2 ]. focused ). isFalse () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ Ġtest DataList [ 1 ]. focus Request er . request Focus () Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( test DataList [ 0 ]. focused ). isFalse () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( test DataList [ 1 ]. focused ). isTrue () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( test DataList [ 2 ]. focused ). isFalse () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ Ġtest DataList [ 2 ]. focus Request er . request Focus () Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( test DataList [ 0 ]. focused ). isFalse () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( test DataList [ 1 ]. focused ). isFalse () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( test DataList [ 2 ]. focused ). isTrue () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġno Cr ush When Switch ing Between Enabled Focused And Disabled TextField () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġenabled Ġ= Ġmutable State Of ( true ) ĊĠĠĠĠĠĠĠ Ġvar Ġfocused Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġ" textField " ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCore TextField ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= ĠText FieldValue (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Value Change Ġ= Ġ{}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenabled Ġ= Ġenabled . value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . test Tag ( tag ). on Focus Changed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfocused Ġ= Ġit . is Focused ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġbring Ġenabled Ġtext Ġfield Ġinto Ġfocus ĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag ( tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform Click () ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( focused ). isTrue () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġmake Ġtext Ġfield Ġdisabled ĊĠĠĠĠĠĠĠ Ġenabled . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( focused ). isFalse () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġmake Ġtext Ġfield Ġenabled Ġagain , Ġit Ġmust Ġnot Ġcrash ĊĠĠĠĠĠĠĠ Ġenabled . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( focused ). isFalse () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ