package Ġcom . stripe . android . payments heet . elements Ċ Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Looper . get Main Looper Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġandroidx . compose . ui . text . input . Keyboard Type Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġcom . stripe . android . payments heet . R Ċ import Ġcom . stripe . android . payments heet . elements . common . TextField Config Ċ import Ġcom . stripe . android . payments heet . elements . common . TextField Element Ċ import Ġcom . stripe . android . payments heet . elements . common . TextField Element State Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . ro bo lectric . Ro bo lectric TestRunner Ċ import Ġorg . ro bo lectric . Shadow s . shadow Of Ċ import Ġorg . ro bo lectric . annotation . Config Ċ Ċ @ RunWith ( Ro bo lectric TestRunner :: class ) Ċ @ Config ( sdk Ġ= Ġ[ Build . VERSION _ CODES . P ]) Ċ internal Ġclass ĠTextField Element Test Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġrule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġprivate Ġval Ġconfig Ġ= ĠTest Config () ĊĠĠĠ Ġprivate Ġval Ġshould Show Error Debug : Ġ( TextField Element State , ĠBoolean ) Ġ-> ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġ{ Ġstate , Ġhas Focus Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTextField Element . Companion . Valid . Full Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTextField Element . Companion . Error . Show In Focus Ġ-> Ġ! has Focus ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTextField Element . Companion . Error . Show Always Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġconfig . should Show Error ( state , Ġhas Focus ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġdetermine State Debug : Ġ( String ) Ġ-> ĠTextField Element State Ġ= Ġ{ Ġstr Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstr . contains (" full ") Ġ-> ĠTextField Element . Companion . Valid . Full ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstr . contains (" focus ") Ġ-> ĠTextField Element . Companion . Error . Show In Focus ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstr . contains (" always ") Ġ-> ĠTextField Element . Companion . Error . Show Always ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġconfig . determine State ( str ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġtext Field Element Ġ= ĊĠĠĠĠĠĠĠ ĠTextField Element ( config , Ġshould Show Error Debug , Ġdetermine State Debug ) ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` verify Ġon Value Change Ġsets Ġthe Ġparam Value `() Ġ{ ĊĠĠĠĠĠĠĠ Ġconfig . fake Element State Ġ= ĠError . Incomplete ĊĊĠĠĠĠĠĠĠ Ġvar Ġparam Value : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtext Field Element . input ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe Fore ver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam Value Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtext Field Element . on Value Change (" newValue ") ĊĠĠĠĠĠĠĠ ĠassertThat ( param Value ). isEqualTo (" newValue ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` verify Ġthe Ġerror Ġmessage Ġis Ġset Ġwhen Ġshould Ġbe Ġvisible `() Ġ{ ĊĠĠĠĠĠĠĠ Ġconfig . fake Element State Ġ= ĠError . Incomplete ĊĠĠĠĠĠĠĠ Ġconfig . fake Should Show Error Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġvar ĠerrorMessage Res Id Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ Ġtext Field Element . errorMessage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe Fore ver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Res Id Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtext Field Element . on Value Change (" newValue ") ĊĠĠĠĠĠĠĠ Ġshadow Of ( get Main Looper ()). idle () ĊĠĠĠĠĠĠĠ ĠassertThat ( errorMessage Res Id ). isEqualTo ( R . string . in complete ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Verify Ġis Ġfull Ġset Ġwhen Ġthe Ġelement Ġstate Ġchanges `() Ġ{ ĊĠĠĠĠĠĠĠ Ġconfig . fake Element State Ġ= Ġobject Ġ: ĠTextField Element State . TextField Element State Valid () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Full () Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġis Full Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtext Field Element . is Full ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe Fore ver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Full Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtext Field Element . on Value Change (" newValue ") ĊĠĠĠĠĠĠĠ ĠassertThat ( is Full ). isEqualTo ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Verify Ġis Ġnot Ġfull Ġset Ġwhen Ġthe Ġelement Ġstate Ġchanges `() Ġ{ ĊĠĠĠĠĠĠĠ Ġconfig . fake Element State Ġ= Ġobject Ġ: ĠTextField Element State . TextField Element State Valid () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Full () Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġis Full Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtext Field Element . is Full ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe Fore ver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Full Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtext Field Element . on Value Change (" newValue ") ĊĠĠĠĠĠĠĠ ĠassertThat ( is Full ). isEqualTo ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Verify Ġis Ġnot Ġcomplete Ġset Ġwhen Ġthe Ġelement Ġstate Ġchanges `() Ġ{ ĊĠĠĠĠĠĠĠ Ġconfig . fake Element State Ġ= Ġobject Ġ: ĠTextField Element State . TextField Element State Valid () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠisValid () Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġis Complete Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġtext Field Element . is Complete ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe Fore ver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Complete Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtext Field Element . on Value Change (" newValue ") ĊĠĠĠĠĠĠĠ ĠassertThat ( is Complete ). isEqualTo ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Verify Ġis Ġcomplete Ġset Ġwhen Ġthe Ġelement Ġstate Ġchanges `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġis Complete Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtext Field Element . is Complete ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe Fore ver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Complete Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġconfig . fake Element State Ġ= Ġobject Ġ: ĠTextField Element State . TextField Element State Valid () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠisValid () Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtext Field Element . on Value Change (" newValue ") ĊĠĠĠĠĠĠĠ ĠassertThat ( is Complete ). isEqualTo ( false ) ĊĊĠĠĠĠĠĠĠ Ġconfig . fake Element State Ġ= Ġobject Ġ: ĠTextField Element State . TextField Element State Valid () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠisValid () Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtext Field Element . on Value Change (" newValue ") ĊĠĠĠĠĠĠĠ ĠassertThat ( is Complete ). isEqualTo ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Verify Ġis Ġvisible Ġerror Ġis Ġtrue Ġwhen Ġon Value Change Ġand Ġshould Show Error Ġreturns Ġtrue `() Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġvisible Error Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtext Field Element . visible Error ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe Fore ver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisible Error Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġconfig . fake Should Show Error Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠassertThat ( visible Error ). isEqualTo ( false ) ĊĊĠĠĠĠĠĠĠ Ġconfig . fake Should Show Error Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġtext Field Element . on Value Change (" newValue ") ĊĠĠĠĠĠĠĠ Ġshadow Of ( get Main Looper ()). idle () ĊĠĠĠĠĠĠĠ ĠassertThat ( visible Error ). isEqualTo ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Verify Ġis Ġvisible Ġerror Ġset Ġwhen Ġthe Ġelement Ġstate Ġchanges `() Ġ{ ĊĠĠĠĠĠĠĠ Ġconfig . fake Should Show Error Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġvar Ġvisible Error Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtext Field Element . visible Error ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe Fore ver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisible Error Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertThat ( visible Error ). isEqualTo ( false ) ĊĊĠĠĠĠĠĠĠ Ġconfig . fake Element State Ġ= ĠError . Incomplete ĊĠĠĠĠĠĠĠ Ġconfig . fake Should Show Error Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġtext Field Element . on Value Change (" newValue ") ĊĠĠĠĠĠĠĠ Ġshadow Of ( get Main Looper ()). idle () ĊĠĠĠĠĠĠĠ ĠassertThat ( visible Error ). isEqualTo ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Verify Ġcorrect Ġvalue Ġpassed Ġto Ġconfig Ġshould Ġshow Ġerror `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfig Error Based On Focus Ġ= ĠTest Config Error Based On Focus () ĊĠĠĠĠĠĠĠ Ġval Ġtext Field Element Error Based On Focus Ġ= ĠTextField Element ( config Error Based On Focus ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġvisible Error Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtext Field Element Error Based On Focus . visible Error ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe Fore ver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisible Error Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtext Field Element Error Based On Focus . on Focus Change ( false ) ĊĠĠĠĠĠĠĠ ĠassertThat ( visible Error ). isEqualTo ( false ) ĊĊĠĠĠĠĠĠĠ Ġtext Field Element Error Based On Focus . on Focus Change ( true ) ĊĠĠĠĠĠĠĠ Ġshadow Of ( get Main Looper ()). idle () ĊĠĠĠĠĠĠĠ ĠassertThat ( visible Error ). isEqualTo ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Verify Ġfilter Ġcalled Ġon Ġvalue Ġchange `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfig Error Based On Focus Ġ= ĠTest Config Error Based On Focus () ĊĠĠĠĠĠĠĠ Ġval Ġtext Field Element Error Based On Focus Ġ= ĠTextField Element ( config Error Based On Focus ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġvisible Error Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtext Field Element Error Based On Focus . visible Error ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe Fore ver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisible Error Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtext Field Element Error Based On Focus . on Focus Change ( false ) ĊĠĠĠĠĠĠĠ ĠassertThat ( visible Error ). isEqualTo ( false ) ĊĊĠĠĠĠĠĠĠ Ġtext Field Element Error Based On Focus . on Focus Change ( true ) ĊĠĠĠĠĠĠĠ Ġshadow Of ( get Main Looper ()). idle () ĊĠĠĠĠĠĠĠ ĠassertThat ( visible Error ). isEqualTo ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Verify Ġfilter Ġis Ġcalled Ġto Ġset Ġthe Ġinput Ġvalue `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnumber Config Filter Ġ= ĠTest Config Filter () ĊĠĠĠĠĠĠĠ Ġval Ġtext Field Element Ġ= ĠTextField Element ( number Config Filter ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġinput Value Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġtext Field Element . input ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe Fore ver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Value Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtext Field Element . on Value Change (" 1 a 2 b 3 c 4 d ") ĊĠĠĠĠĠĠĠ Ġshadow Of ( get Main Looper ()). idle () ĊĠĠĠĠĠĠĠ ĠassertThat ( input Value ). isEqualTo (" 1 2 3 4 ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠTest Config Ġ: ĠTextField Config Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġdebug Label Ġ= Ġ" debug Label " ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġlabel : ĠInt Ġ= ĠR . string . address _ label _ name ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġkeyboard : ĠKeyboard Type Ġ= ĠKeyboard Type . Ascii ĊĊĠĠĠĠĠĠĠ Ġvar Ġfake Should Show Error Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġfake Element State : ĠTextField Element State Ġ= ĠValid . Lim itle ss ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdetermine State ( input : ĠString ): ĠTextField Element State Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfake Element State ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġshould Show Error ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement State : ĠTextField Element State , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Focus : ĠBoolean ĊĠĠĠĠĠĠĠ Ġ) Ġ= Ġfake Should Show Error ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfilter ( user Typed : ĠString ): ĠString Ġ= Ġuser Typed ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠTest Config Error Based On Focus Ġ: ĠTextField Config Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġdebug Label Ġ= Ġ" debug Label " ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġlabel : ĠInt Ġ= ĠR . string . address _ label _ name ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġkeyboard : ĠKeyboard Type Ġ= ĠKeyboard Type . Ascii ĊĊĠĠĠĠĠĠĠ Ġvar Ġfake Element State : ĠTextField Element State Ġ= ĠValid . Lim itle ss ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdetermine State ( input : ĠString ): ĠTextField Element State Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfake Element State ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġshould Show Error ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement State : ĠTextField Element State , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Focus : ĠBoolean ĊĠĠĠĠĠĠĠ Ġ) Ġ= Ġhas Focus ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfilter ( user Typed : ĠString ): ĠString Ġ= Ġuser Typed ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠTest Config Filter Ġ: ĠTextField Config Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġdebug Label Ġ= Ġ" debug Label " ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġlabel : ĠInt Ġ= ĠR . string . address _ label _ name ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġkeyboard : ĠKeyboard Type Ġ= ĠKeyboard Type . Ascii ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdetermine State ( input : ĠString ): ĠTextField Element State Ġ= ĠValid . Lim itle ss ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġshould Show Error ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement State : ĠTextField Element State , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Focus : ĠBoolean ĊĠĠĠĠĠĠĠ Ġ) Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfilter ( user Typed : ĠString ): ĠString Ġ= Ġuser Typed . filter Ġ{ ĠCharacter . is Digit ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġsealed Ġclass ĠValid Ġ: ĠTextField Element State . TextField Element State Valid () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject ĠLim itle ss Ġ: ĠValid () Ġ// Ġno Ġauto - advance ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsealed Ġclass ĠError ( string Res Id : ĠInt ) Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTextField Element State . TextField Element State Error ( string Res Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject ĠIn complete Ġ: ĠError ( R . string . in complete ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }