package Ġcom . stripe . android . view Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Color State List Ċ import Ġandroid . view . View Ċ import Ġandroidx . annotation . Color Int Ċ import Ġandroidx . appcompat . view . Context Theme Wrapper Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . test . core . app . Application Provider Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . mock Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . verify No More Interactions Ċ import Ġcom . stripe . android . R Ċ import Ġcom . stripe . android . test h arness . View TestUtils Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . mockito . Mockito . verify Ċ import Ġorg . ro bo lectric . Ro bo lectric TestRunner Ċ import Ġkotlin . test . Test Ċ Ċ @ RunWith ( Ro bo lectric TestRunner :: class ) Ċ internal Ġclass ĠStripe EditText Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext Ġ= ĠContext Theme Wrapper ( ĊĠĠĠĠĠĠĠ ĠApplication Provider . getApplicationContext (), ĊĠĠĠĠĠĠĠ ĠR . style . Stripe Default Theme ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġval Ġafter TextChanged Listener : ĠStripe EditText . After TextChanged Listener Ġ= Ġmock () ĊĠĠĠ Ġprivate Ġval Ġdelete Empty Listener : ĠStripe EditText . Delete Empty Listener Ġ= Ġmock () ĊĊĠĠĠ Ġprivate Ġval Ġedit Text Ġ= ĠStripe EditText ( ĊĠĠĠĠĠĠĠ Ġcontext ĊĠĠĠ Ġ). also Ġ{ ĊĠĠĠĠĠĠĠ Ġit . set Delete Empty Listener ( delete Empty Listener ) ĊĠĠĠĠĠĠĠ Ġit . set After TextChanged Listener ( after TextChanged Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġon Focus Listener Setup Called OnInit () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġon Focus Listener Ġ= Ġmock < View . On Focus ChangeListener >() ĊĠĠĠĠĠĠĠ Ġedit Text . internal Focus Change Listeners . add ( on Focus Listener ) ĊĠĠĠĠĠĠĠ Ġedit Text . getParent On Focus ChangeListener () !!. on Focus Change ( edit Text , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġverify ( on Focus Listener ). on Focus Change ( edit Text , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete Text _ when Zero Length _ calls Delete Listener () Ġ{ ĊĠĠĠĠĠĠĠ ĠView TestUtils . send Delete KeyEvent ( edit Text ) ĊĠĠĠĠĠĠĠ Ġverify ( delete Empty Listener ). onDelete Empty () ĊĠĠĠĠĠĠĠ Ġverify No More Interactions ( after TextChanged Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġadd Text _ calls Appro priate Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġedit Text . append (" 1 ") ĊĠĠĠĠĠĠĠ Ġverify No More Interactions ( delete Empty Listener ) ĊĠĠĠĠĠĠĠ Ġverify ( after TextChanged Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on TextChanged (" 1 ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete Text _ when Non Zero Length _ calls Appro priate Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġedit Text . append (" 1 ") ĊĊĠĠĠĠĠĠĠ ĠView TestUtils . send Delete KeyEvent ( edit Text ) ĊĠĠĠĠĠĠĠ Ġverify No More Interactions ( delete Empty Listener ) ĊĠĠĠĠĠĠĠ Ġverify ( after TextChanged Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on TextChanged ("") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete Text _ when Selection At Beginning But Length Non Zero _ does Not Call Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġedit Text . append (" 1 2 ") ĊĠĠĠĠĠĠĠ Ġverify ( after TextChanged Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on TextChanged (" 1 2 ") ĊĠĠĠĠĠĠĠ Ġedit Text . setSelection ( 0 ) ĊĠĠĠĠĠĠĠ ĠView TestUtils . send Delete KeyEvent ( edit Text ) ĊĠĠĠĠĠĠĠ Ġverify No More Interactions ( delete Empty Listener ) ĊĠĠĠĠĠĠĠ Ġverify No More Interactions ( after TextChanged Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete Text _ when Deleting Multiple Items _ only Calls Listener One Time () Ġ{ ĊĠĠĠĠĠĠĠ Ġedit Text . append (" 1 2 3 ") ĊĠĠĠĠĠĠĠ Ġ// ĠDo ing Ġthis Ġfour Ġtimes Ġbecause Ġwe Ġneed Ġto Ġdelete Ġall Ġthree Ġitems , Ġthen Ġjump Ġback . ĊĊĠĠĠĠĠĠĠ Ġrepeat ( 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView TestUtils . send Delete KeyEvent ( edit Text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġverify ( delete Empty Listener ). onDelete Empty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠgetDefault Error Color Int _ on Dark Theme _ returns Dark Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġedit Text . default Color State List Ġ= ĠColor State List . valueOf ( Context Compat . getColor ( context , Ġandroid . R . color . primary _ text _ dark )) ĊĠĠĠĠĠĠĠ ĠassertThat ( edit Text . default Error Color Int ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( Context Compat . getColor ( context , ĠR . color . stripe _ error _ text _ dark _ theme )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠgetDefault Error Color Int _ on Light Theme _ returns Light Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġedit Text . setTextColor ( Context Compat . getColor ( context , Ġandroid . R . color . primary _ text _ light )) ĊĠĠĠĠĠĠĠ ĠassertThat ( edit Text . default Error Color Int ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( Context Compat . getColor ( context , ĠR . color . stripe _ error _ text _ light _ theme )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠsetError Color _ when In Error _ overrides Default () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠBy Ġdefault , Ġthe Ġtext Ġcolor Ġin Ġthis Ġtest Ġactivity Ġis Ġa Ġlight Ġtheme ĊĠĠĠĠĠĠĠ Ġ@ Color Int Ġval Ġblue Error Ġ= Ġ 0 x 0 0 0 0 ff ĊĠĠĠĠĠĠĠ Ġedit Text . setError Color ( blue Error ) ĊĠĠĠĠĠĠĠ Ġedit Text . should Show Error Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Color Int Ġ= Ġedit Text . text Colors . default Color ĊĠĠĠĠĠĠĠ ĠassertThat ( currentColor Int ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( blue Error ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġset TextColor () Ġ{ ĊĠĠĠĠĠĠĠ Ġedit Text . setTextColor ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColor State List . valueOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . color . holo _ red _ dark ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġfield Ġstate Ġmust Ġbe Ġtoggle d Ġto Ġshow Ġan Ġerror ĊĠĠĠĠĠĠĠ Ġedit Text . should Show Error Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġedit Text . should Show Error Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ ĠassertThat ( edit Text . text Colors ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor State List . valueOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . color . holo _ red _ dark ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget Cached Color State List _ after Init _ returns NotNull () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( edit Text . default Color State List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isNotNull () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġset Should Show Error _ when Error Color Not Set _ should Use Default Error Color () Ġ{ ĊĠĠĠĠĠĠĠ Ġedit Text . should Show Error Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠassertThat ( edit Text . text Colors . default Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( Context Compat . getColor ( context , ĠR . color . stripe _ error _ text _ light _ theme )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġshould Show Error _ when Changed _ changes TextColor () Ġ{ ĊĠĠĠĠĠĠĠ Ġedit Text . errorMessage Ġ= Ġ" There Ġwas Ġan Ġerror !" ĊĊĠĠĠĠĠĠĠ Ġedit Text . should Show Error Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠassertThat ( edit Text . current TextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo (- 1 3 6 9 0 5 0 ) ĊĊĠĠĠĠĠĠĠ Ġedit Text . should Show Error Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠassertThat ( edit Text . current TextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo (- 5 7 0 4 2 5 3 4 4 ) ĊĠĠĠ Ġ} Ċ } Ċ