/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 4 Ġy vol k Ġ( Y uri ĠVol kov ), Ġhttp :// y ur iv olk ov . com Ċ Ġ* Ċ Ġ* Ġ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 Ġorg . and status . app . timeline Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . test . espress o . Esp ress o Ċ import Ġandroidx . test . espress o . action . Replace Text Action Ċ import Ġandroidx . test . espress o . action . View Actions Ċ import Ġandroidx . test . espress o . matcher . View Matchers Ċ import Ġorg . and status . app . Activity TestHelper Ċ import Ġorg . and status . app . R Ċ import Ġorg . and status . app . activity . Activity View Item Ċ import Ġorg . and status . app . context . Demo Data Ċ import Ġorg . and status . app . context . My Context Holder Ċ import Ġorg . and status . app . context . TestSuite Ċ import Ġorg . and status . app . data . Db Utils Ċ import Ġorg . and status . app . net . social . Actor Ċ import Ġorg . and status . app . net . social . Visibility Ċ import Ġorg . and status . app . note . Base Note View Item Ċ import Ġorg . and status . app . origin . Origin Ċ import Ġorg . and status . app . service . My Service Manager Ċ import Ġorg . and status . app . timeline . meta . Timeline Type Ċ import Ġorg . and status . app . util . Esp ress o Utils Ċ import Ġorg . and status . app . util . My Log Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Test Ċ Ċ /** Ċ Ġ* Ġ@ author Ġy vol k @ y ur iv olk ov . com Ċ Ġ*/ Ċ class ĠPublic Timeline Activity Test Ġ: ĠTimeline Activity Test < Activity View Item >() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠgetActivity Intent (): ĠIntent Ġ{ ĊĠĠĠĠĠĠĠ ĠMy Log . i ( this , Ġ" setUp Ġstarted ") ĊĠĠĠĠĠĠĠ ĠTest Suite . initialize WithData ( this ) ĊĠĠĠĠĠĠĠ Ġval Ġmy Context Ġ= ĠMy Context Holder . my Context Holder . get Blocking () ĊĠĠĠĠĠĠĠ Ġval Ġorigin : ĠOrigin Ġ= Ġ Ġmy Context . orig ins . from Name ( Demo Data . demo Data . gn us ocial Test Origin Name ) ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( origin . toString (), Ġorigin . isValid ) ĊĠĠĠĠĠĠĠ ĠMy Log . i ( this , Ġ" setUp Ġended ") ĊĠĠĠĠĠĠĠ Ġval Ġtimeline Ġ= Ġmy Context . time lines . get ( Timeline Type . PUBLIC , ĠActor . EMPTY , Ġorigin ) ĊĠĠĠĠĠĠĠ Ġtimeline . save ( my Context ) ĊĠĠĠĠĠĠĠ Ġreturn ĠIntent ( Intent . ACTION _ VIEW , Ġ Ġtimeline . get Uri ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Global Search In Options Menu () Ġ{ ĊĠĠĠĠĠĠĠ Ġone Search Test (" test Global Search In Options Menu ", ĠDemo Data . demo Data . global Public Note Text , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Search () Ġ{ ĊĠĠĠĠĠĠĠ Ġone Search Test (" test Search ", ĠDemo Data . demo Data . public Note Text , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġone Search Test ( method : ĠString , Ġnote Text : ĠString , Ġinternet Search : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmenu _ id : ĠInt Ġ= ĠR . id . search _ menu _ id ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue (" My Service Ġis Ġavailable ", ĠMy Service Manager . Companion . is Service Available ()) ĊĠĠĠĠĠĠĠ ĠTest Suite . waitFor List Loaded ( activity , Ġ 2 ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( Timeline Type . PUBLIC , Ġactivity . getTime line (). timeline Type ) ĊĠĠĠĠĠĠĠ ĠAssert . assertFalse (" Screen Ġis Ġlocked ", ĠTest Suite . is Screen Locked ( activity )) ĊĠĠĠĠĠĠĠ Ġval Ġhelper Ġ= ĠActivity TestHelper < Timeline Activity < *> >( activity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimeline Activity :: class . java ) ĊĠĠĠĠĠĠĠ Ġhelper . click MenuItem ( method , Ġmenu _ id ) ĊĠĠĠĠĠĠĠ ĠE sp ress o . on View ( View Matchers . with Id ( R . id . internet _ search )). perform ( Esp ress o Utils . setChecked ( internet Search )) ĊĠĠĠĠĠĠĠ ĠE sp ress o . on View ( View Matchers . with ResourceName (" search _ text ")). perform ( Replace Text Action ( note Text ), ĠView Actions . press I me ActionButton ()) ĊĠĠĠĠĠĠĠ Ġval Ġnext Activity Ġ= Ġhelper . waitFor Next Activity ( method , Ġ 4 0 0 0 0 ) Ġas ĠTimeline Activity < *> ĊĠĠĠĠĠĠĠ ĠwaitFor Button Clicked Evidence ( next Activity , Ġmethod , Ġnote Text ) ĊĠĠĠĠĠĠĠ Ġassert Notes Are Public ( next Activity , Ġnote Text ) ĊĠĠĠĠĠĠĠ Ġnext Activity . finish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Volatile ĊĠĠĠ Ġprivate Ġvar Ġstring Found : ĠString Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġfun ĠwaitFor Button Clicked Evidence ( timeline Activity : ĠTimeline Activity <* >, Ġcaption : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠqueryString : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġ" waitFor Button Clicked Evidence " ĊĠĠĠĠĠĠĠ Ġvar Ġfound Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠAssert . assertNotNull (" Timeline Ġactivity Ġis Ġnull ", Ġtimeline Activity ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( attempt Ġin Ġ 0 .. 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠE sp ress o Utils . waitFor Idle Sync () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprobe Ġ= ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġtimeline Activity . findViewById < TextView ? >( R . id . timeline Type Button ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring Found Ġ= Ġitem . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimeline Activity . run On Ui Thread ( probe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( string Found . contains ( queryString )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfound Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDb Utils . wait Ms ( method , Ġ 1 0 0 0 Ġ* Ġ( attempt Ġ+ Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( caption Ġ+ Ġ", Ġquery :' " Ġ+ ĠqueryString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"', Ġfound :' " Ġ+ Ġstring Found Ġ+ Ġ"'", Ġfound ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert Notes Are Public ( timeline Activity : ĠTimeline Activity <* >, Ġpublic Note Text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġ" assert Notes Are Public " ĊĠĠĠĠĠĠĠ Ġvar Ġmsg Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( attempt Ġin Ġ 0 .. 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠE sp ress o Utils . waitFor Idle Sync () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Count Ġ= Ġone Attempt ( timeline Activity , Ġpublic Note Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( msg Count Ġ> Ġ 0 Ġ|| ĠDb Utils . wait Ms ( method , Ġ 2 0 0 0 Ġ* Ġ( attempt Ġ+ Ġ 1 ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue (" Notes Ġshould Ġbe Ġfound ", Ġmsg Count Ġ> Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġone Attempt ( timeline Activity : ĠTimeline Activity <* >, Ġpublic Note Text : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġtimeline Activity . findViewById < ViewGroup ? >( android . R . id . list ) ĊĠĠĠĠĠĠĠ Ġvar Ġmsg Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġlist . child Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnote View Ġ= Ġlist . getChild At ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody View Ġ= Ġnote View . findViewById < TextView ? >( R . id . note _ body ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Item : ĠBase Note View Item < *> Ġ= ĠList Activity TestHelper . to Base Note View Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimeline Activity . getList Adapter (). getItem ( note View )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( body View Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue (""" Note Ġ# ${ view Item . getId ()} Ġ'${ view Item . getContent () }' Ġcontains Ġ'$ public Note Text ' Ċ $ view Item """, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Item . getContent (). toString (). contains ( public Note Text )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertNot Equals (""" Note Ġ# ${ view Item . getId ()} Ġ'${ view Item . getContent () }' Ġis Ġprivate Ċ $ view Item """, ĠVisibility . PRIVATE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVisibility . Companion . from Note Id ( view Item . getId ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠMy Log . v ( this , Ġ" Public Ġnotes Ġwith Ġ'$ public Note Text ' Ġfound : Ġ$ msg Count ") ĊĠĠĠĠĠĠĠ Ġreturn Ġmsg Count ĊĠĠĠ Ġ} Ċ } Ċ