package Ġbr . com . simple pass . loading button . presentation Ċ Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Canvas Ċ import Ġbr . com . simple pass . loading button . custom Views . Progress Button Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . any Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . mock Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . never Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . verify Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . verify No More Interactions Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Before Ċ 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 Looper Ċ Ċ @ RunWith ( Ro bo lectric TestRunner :: class ) Ċ class ĠProgress Button Presenter Test Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġview : ĠProgress Button ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcanvas : ĠCanvas ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġview Ġ= Ġmock () ĊĠĠĠĠĠĠĠ Ġcanvas Ġ= Ġmock () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġhandle Ġstate Ġcorrectly `() Ġ{ ĊĠĠĠĠĠĠĠ ĠProgress Button Presenter ( view ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( State . BEFORE _ DRAW , Ġstate ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Draw ( mock ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( State . IDLE , Ġstate ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġshould Ġcall Ġview Ġcorrectly Ġat Ġgiven Ġstate `() Ġ{ ĊĠĠĠĠĠĠĠ ĠProgress Button Presenter ( view ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠState . PROGRESS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Draw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( view ). draw Progress ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠState . DONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Draw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( view ). draw Done Animation ( canvas ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` view Ġshould Ġbe Ġclean Ġbefore Ġmorph Ġstarts `() Ġ{ ĊĠĠĠĠĠĠĠ ĠProgress Button Presenter ( view ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmorph Start () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( State . MOR PH ING , Ġstate ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġverify ( view ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Clickable ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide InitialState () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Compound Draw ables ( null , Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` state Ġshould Ġchange Ġwhen Ġmorph Ġends `() Ġ{ ĊĠĠĠĠĠĠĠ ĠProgress Button Presenter ( view ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmorph End () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( State . PROGRESS , Ġstate ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` reveal Ġanimation Ġshould Ġstart Ġif Ġdone Ġis Ġcalled Ġduring Ġmorph `() Ġ{ ĊĠĠĠĠĠĠĠ ĠProgress Button Presenter ( view ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmorph Start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdone Loading Animation ( 1 , Ġmock ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmorph End () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠShadow Looper . run Ui Thread Tasks In cluding Delayed Tasks () ĊĊĠĠĠĠĠĠĠ Ġverify ( view ). start Re veal Animation () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` morph Ġrevert Ġstart Ġshould Ġbehave Ġcorrectly `() Ġ{ ĊĠĠĠĠĠĠĠ ĠProgress Button Presenter ( view ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmorph Re vert Start () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( State . MOR PH ING , Ġstate ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( view ). set Clickable ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` morph Ġrevert Ġend Ġshould Ġbehave Ġcorrectly `() Ġ{ ĊĠĠĠĠĠĠĠ ĠProgress Button Presenter ( view ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmorph Re vert End () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( State . IDLE , Ġstate ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġverify ( view ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Clickable ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecover InitialState () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` view Ġanimation Ġstart Ġshould Ġonly Ġbe Ġcalled Ġin ĠId le Ġstate `() Ġ{ ĊĠĠĠĠĠĠĠ ĠProgress Button Presenter ( view ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠState . values () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġstate Ġ-> Ġstate Ġ!= ĠState . IDLE Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . state Ġ= Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Animation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( view , Ġnever ()). start Morph Animation () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . state Ġ= ĠState . IDLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Animation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( view ). start Morph Animation () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġanimation Ġis Ġcalled Ġbefore Ġthe Ġon Draw Ġmethod , Ġit Ġshould Ġcall Ġstart Animation Ġon Ġon Draw `() Ġ{ ĊĠĠĠĠĠĠĠ ĠProgress Button Presenter ( view ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠState . BEFORE _ DRAW ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Animation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( view , Ġnever ()). start Morph Animation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Draw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( view ). start Morph Animation () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` stop Ġanimation Ġshould Ġcall Ġview Ġif Ġpresenter Ġis Ġon Ġprogress Ġstate `() Ġ{ ĊĠĠĠĠĠĠĠ ĠProgress Button Presenter ( view ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠState . PROGRESS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Animation () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( State . STOP PED , Ġstate ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġverify ( view ). stop Progress Animation () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` stop Ġanimation Ġshould Ġnot Ġcall Ġview Ġif Ġpresenter Ġis ĠNOT Ġon Ġprogress Ġstate `() Ġ{ ĊĠĠĠĠĠĠĠ ĠProgress Button Presenter ( view ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Animation () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( State . STOP PED , Ġstate ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġverify ( view , Ġnever ()). stop Progress Animation () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` revert Ġanimation Ġshould Ġdo Ġnothing Ġif Ġnot Ġin Ġcorrect Ġstage `() Ġ{ ĊĠĠĠĠĠĠĠ ĠProgress Button Presenter ( view ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠState . values (). filter Not Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ== ĠState . PROGRESS Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ== ĠState . MOR PH ING Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ== ĠState . DONE Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ== ĠState . WAIT ING _ DONE Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ== ĠState . STOP PED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. forEach Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . state Ġ= Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrevert Animation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġverify No More Interactions ( view ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` revert Animation Ġshould Ġcall Ġcorrect Ġmethod Ġof Ġview Ġin Ġmorph ing Ġstate `() Ġ{ ĊĠĠĠĠĠĠĠ ĠProgress Button Presenter ( view ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠState . MOR PH ING ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrevert Animation () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġverify ( view ). stop Morph Animation () ĊĠĠĠĠĠĠĠ Ġverify ( view ). start Morph Re vert Animation () ĊĠĠĠĠĠĠĠ Ġverify No More Interactions ( view ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` revert Animation Ġshould Ġcall Ġcorrect Ġmethod Ġof Ġview Ġin Ġprogress Ġstate `() Ġ{ ĊĠĠĠĠĠĠĠ ĠProgress Button Presenter ( view ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠState . PROGRESS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrevert Animation () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġverify ( view ). stop Progress Animation () ĊĠĠĠĠĠĠĠ Ġverify ( view ). start Morph Re vert Animation () ĊĠĠĠĠĠĠĠ Ġverify No More Interactions ( view ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` revert Animation Ġshould Ġcall Ġcorrect Ġmethod Ġof Ġview Ġin Ġdone Ġstate `() Ġ{ ĊĠĠĠĠĠĠĠ ĠProgress Button Presenter ( view ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠState . DONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrevert Animation () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġverify ( view ). start Morph Re vert Animation () ĊĠĠĠĠĠĠĠ Ġverify No More Interactions ( view ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġshould Ġsave Ġstate Ġon Ġthe Ġfirst Ġon Draw `() Ġ{ ĊĠĠĠĠĠĠĠ ĠProgress Button Presenter ( view ). on Draw ( mock ()) ĊĠĠĠĠĠĠĠ Ġverify ( view ). save InitialState () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` on Draw Ġ- Ġon Ġprogress `() Ġ{ ĊĠĠĠĠĠĠĠ ĠProgress Button Presenter ( view ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠState . PROGRESS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Draw ( mock ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġverify ( view ). draw Progress ( any ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` on Draw Ġ- Ġdone `() Ġ{ ĊĠĠĠĠĠĠĠ ĠProgress Button Presenter ( view ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠState . DONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Draw ( mock ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġverify ( view ). draw Done Animation ( any ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` done Ġanimation Ġshould Ġwork Ġif Ġbutton Ġis Ġon Ġprogress Ġstate `() Ġ{ ĊĠĠĠĠĠĠĠ ĠProgress Button Presenter ( view ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠState . PROGRESS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdone Loading Animation ( 0 , Ġmock ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( State . DONE , Ġstate ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġverify ( view ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Progress Animation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Re veal Animation () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` done Ġanimation Ġshould Ġonly Ġinteract Ġwith Ġview Ġon ĠProgress Ġstate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbitmap Mock : ĠBitmap Ġ= Ġmock () ĊĊĠĠĠĠĠĠĠ ĠProgress Button Presenter ( view ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠState . values () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ!= ĠState . PROGRESS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. forEach Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . state Ġ= Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdone Loading Animation ( 0 , Ġbitmap Mock ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġverify ( view , Ġnever ()). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Progress Animation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Re veal Animation () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` if Ġdone Ġanimation Ġis Ġcalled Ġbefore Ġmorph Ġfinishes , Ġit Ġshould Ġnot Ġshow Ġprogress `() Ġ{ ĊĠĠĠĠĠĠĠ ĠProgress Button Presenter ( view ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Animation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdone Loading Animation ( 0 , Ġmock ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( State . DONE , Ġstate ) Ġ// ĠShould Ġnot Ġbe Ġprogress ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ