/* Ċ Ġ* Ġ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 . note Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . test . espress o . Esp ress o . on View Ċ import Ġandroidx . test . espress o . action . Replace Text Action Ċ import Ġandroidx . test . espress o . assertion . View Assertions Ċ import Ġandroidx . test . espress o . matcher . View Matchers Ċ import Ġorg . and status . app . Activity Request Code Ċ import Ġorg . and status . app . Activity TestHelper Ċ import Ġorg . and status . app . Help Activity Ċ import Ġorg . and status . app . R Ċ import Ġorg . and status . app . account . My Account Ċ 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 . My Preferences Ċ import Ġorg . and status . app . context . TestSuite Ċ import Ġorg . and status . app . data . Db Utils Ċ import Ġorg . and status . app . data . Download Status Ċ import Ġorg . and status . app . data . My ContentType Ċ import Ġorg . and status . app . data . My Query Ċ import Ġorg . and status . app . data . Oid Enum Ċ import Ġorg . and status . app . data . Text MediaType Ċ import Ġorg . and status . app . database . table . Activity Table Ċ import Ġorg . and status . app . database . table . Note Table Ċ import Ġorg . and status . app . net . social . Audience Ċ import Ġorg . and status . app . net . social . Audience . Companion . from Note Id Ċ import Ġorg . and status . app . origin . Origin Ċ import Ġorg . and status . app . service . My Service Manager Ċ import Ġorg . and status . app . timeline . List Activity TestHelper Ċ import Ġorg . and status . app . timeline . Timeline Activity Ċ import Ġorg . and status . app . timeline . Timeline Activity Test Ċ import Ġorg . and status . app . timeline . meta . Timeline Ċ 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 Html Ċ import Ġorg . and status . app . util . My Html Test Ċ import Ġorg . and status . app . util . My Log Ċ import Ġorg . and status . app . util . Screenshot On Failure Ċ import Ġorg . hamcrest . Core Matchers Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Assert . assertNotNull Ċ import Ġorg . junit . Assert . assertTrue Ċ import Ġorg . junit . Test Ċ import Ġjava . util . concurrent . atomic . Atomic Integer Ċ import Ġkotlin . properties . Deleg ates Ċ Ċ /** Ċ Ġ* ĠOn Ġactivity Ġtesting : Ġhttp :// developer . android . com / tools / testing / activity _ testing . html Ċ Ġ* Ġ@ author Ġy vol k @ y ur iv olk ov . com Ċ Ġ*/ Ċ class ĠNote Editor Test Ġ: ĠTimeline Activity Test < Activity View Item >() Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġdata : ĠNote Editor Data Ġby ĠDeleg ates . notNull () ĊĊĠĠĠ Ġoverride Ġfun ĠgetActivity Intent (): ĠIntent Ġ{ ĊĠĠĠĠĠĠĠ ĠMy Log . i ( this , Ġ" setUp Ġstarted ") ĊĠĠĠĠĠĠĠ ĠTest Suite . initialize WithData ( this ) ĊĠĠĠĠĠĠĠ Ġif Ġ( editing Step . get () Ġ!= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMy Preferences . set Being Edited Note Id ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġma : ĠMy Account Ġ= ĠDemo Data . demo Data . get My Account ( Demo Data . demo Data . conversation AccountName ) ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( ma . isValid ) ĊĠĠĠĠĠĠĠ ĠMy Context Holder . my Context Holder . get Now (). accounts . setCurrent Account ( ma ) ĊĠĠĠĠĠĠĠ Ġdata Ġ= ĠgetStatic Data ( ma ) ĊĠĠĠĠĠĠĠ Ġval Ġtimeline : ĠTimeline Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMy Context Holder . my Context Holder . get Now (). time lines . get ( Timeline Type . HOME , Ġma . actor , ĠOrigin . EMPTY ) ĊĠĠĠĠĠĠĠ ĠMy Log . i ( this , Ġ" setUp Ġended , Ġ$ timeline ") ĊĠĠĠĠĠĠĠ Ġreturn ĠIntent ( Intent . ACTION _ VIEW , Ġtimeline . get Uri ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetStatic Data ( ma : ĠMy Account ): ĠNote Editor Data Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠNote Editor Data . Companion . new Reply To ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMy Query . oid To Id ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠO id Enum . NOTE _ OID , Ġma . origin . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDemo Data . demo Data . conversation Entry Note Oid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġma ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo Audience ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMy Query . oid To Id ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠO id Enum . ACT OR _ OID , Ġma . origin . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDemo Data . demo Data . conversation Entry Author Oid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Ment ions ToText () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent ( My Html Test . twitter Body Typed Plain Ġ+ Ġ" Ġ" Ġ+ ĠDemo Data . demo Data . test Run Uid , ĠText MediaType . PLAIN ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Editing 1 () Ġ{ ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue (" My Service Ġis Ġavailable ", ĠMy Service Manager . Companion . is Service Available ()) ĊĠĠĠĠĠĠĠ Ġediting Tester () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Editing 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġediting Tester () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġediting Tester () Ġ{ ĊĠĠĠĠĠĠĠ ĠTest Suite . waitFor List Loaded ( activity , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( editing Step . increment AndGet ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġediting Step 2 () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġediting Step . set ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity TestHelper . open Editor < Activity View Item >(" default ", Ġactivity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġediting Step 1 () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠMy Log . v ( this , Ġ" After Ġstep Ġ" Ġ+ Ġediting Step Ġ+ Ġ" Ġended ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġediting Step 1 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġ" editing Step 1 " ĊĠĠĠĠĠĠĠ ĠMy Log . v ( this , Ġ"$ method Ġstarted ") ĊĠĠĠĠĠĠĠ Ġval Ġeditor View : ĠView Ġ= ĠActivity TestHelper . hide Editor And Save Draft < Activity View Item >( method , Ġactivity ) ĊĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġactivity . get Note Editor () Ġ?: Ġthrow ĠIllegalStateException (" No Ġeditor ") ĊĠĠĠĠĠĠĠ Ġget Instrumentation (). run On Main Sync Ġ{ Ġeditor . start Editing Note ( data ) Ġ} ĊĠĠĠĠĠĠĠ ĠE sp ress o Utils . waitFor Idle Sync () ĊĠĠĠĠĠĠĠ ĠActivity TestHelper . wait View Visible ( method , Ġeditor View ) ĊĠĠĠĠĠĠĠ Ġassert Initial Text (" Initial Ġtext ") ĊĠĠĠĠĠĠĠ ĠMy Log . v ( this , Ġ"$ method Ġended ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġediting Step 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġ" editing Step 2 " ĊĠĠĠĠĠĠĠ ĠMy Log . v ( this , Ġ"$ method Ġstarted ") ĊĠĠĠĠĠĠĠ Ġval Ġhelper Ġ= ĠActivity TestHelper < Timeline Activity < *> >( activity ) ĊĠĠĠĠĠĠĠ Ġval Ġeditor View Ġ= Ġactivity . findViewById < View ? >( R . id . note _ editor ) ĊĠĠĠĠĠĠĠ ĠActivity TestHelper . wait View Visible ("$ method ; ĠRe stored Ġnote Ġis Ġvisible ", Ġeditor View ) ĊĠĠĠĠĠĠĠ Ġassert Initial Text (" Note Ġrestored ") ĊĠĠĠĠĠĠĠ ĠActivity TestHelper . hide Editor And Save Draft ( method , Ġactivity ) ĊĠĠĠĠĠĠĠ ĠActivity TestHelper . open Editor < Activity View Item >( method , Ġactivity ) ĊĠĠĠĠĠĠĠ Ġassert Text Cle ared ( this ) ĊĠĠĠĠĠĠĠ Ġhelper . click MenuItem ("$ method Ġclick ĠDis card ", ĠR . id . discard Button ) ĊĠĠĠĠĠĠĠ ĠActivity TestHelper . wait View In visible ("$ method ; ĠEditor Ġhidden Ġafter Ġdiscard ", Ġeditor View ) ĊĠĠĠĠĠĠĠ ĠMy Log . v ( this , Ġ"$ method Ġended ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġattach One Image () Ġ{ ĊĠĠĠĠĠĠĠ Ġattach Images ( this , Ġ 1 , Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġattach Two Images () Ġ{ ĊĠĠĠĠĠĠĠ Ġattach Images ( this , Ġ 2 , Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert Initial Text ( description : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġactivity . get Note Editor () Ġ?: Ġthrow ĠIllegalStateException (" No Ġeditor ") ĊĠĠĠĠĠĠĠ Ġval ĠtextView Ġ= Ġactivity . findViewById < TextView ? >( R . id . note Body EditText ) ĊĠĠĠĠĠĠĠ ĠActivity TestHelper . wait Text In A View ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription , ĠtextView , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMy Html . from Content Stored ( data . getContent (), ĠText MediaType . PLAIN ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( description , Ġdata . to Test Summary (), Ġeditor . getData (). to Test Summary ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġedit Loaded Note () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġ" edit Loaded Note " ĊĠĠĠĠĠĠĠ ĠTest Suite . waitFor List Loaded ( activity , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġhelper Ġ= ĠList Activity TestHelper < Timeline Activity < *> >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCon versation Activity :: class . java ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġlist ItemId Ġ= Ġhelper . find ListItem Id ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" My Ġloaded Ġnote , Ġactor Id :" Ġ+ Ġdata . get My Account (). actor Id ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġitem : ĠBase Note View Item < *> Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( item . author . get Actor Id () Ġ== Ġdata . get My Account (). actor Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġitem . note Status Ġ== ĠDownload Status . LOADED ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnote Id Ġ= ĠMy Query . activity Id To Long Column Value ( Activity Table . NOTE _ ID , Ġlist ItemId ) ĊĠĠĠĠĠĠĠ Ġvar Ġlog Msg Ġ= Ġ(" itemId =" Ġ+ Ġlist ItemId Ġ+ Ġ", Ġnote Id =" Ġ+ Ġnote Id Ġ+ Ġ" Ġtext ='" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ ĠMy Query . note Id ToString Column Value ( Note Table . CONTENT , Ġnote Id ) Ġ+ Ġ"' ") ĊĠĠĠĠĠĠĠ Ġval Ġinvoked Ġ= Ġhelper . invoke ContextMenu Action 4 ListItem Id ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod , Ġlist ItemId , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNote Context MenuItem . EDIT , ĠR . id . note _ wrapper ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġlog Msg Ġ+= Ġ";" Ġ+ Ġif Ġ( inv oked ) Ġ"" Ġelse Ġ" Ġfailed Ġto Ġinvoke ĠEdit Ġmenu Ġitem ," ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( log Msg , Ġinvoked ) ĊĠĠĠĠĠĠĠ ĠActivity TestHelper . close ContextMenu ( activity ) ĊĠĠĠĠĠĠĠ Ġval Ġeditor View Ġ= Ġactivity . findViewById < View ? >( R . id . note _ editor ) ĊĠĠĠĠĠĠĠ ĠActivity TestHelper . wait View Visible ("$ method Ġ$ log Msg ", Ġeditor View ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Loaded Ġnote Ġshould Ġbe Ġin ĠD RA FT Ġstate Ġon ĠEdit Ġstart : Ġ$ log Msg ", ĠDownload Status . DR AFT , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Download Status ( note Id ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġhelper 2 Ġ= ĠActivity TestHelper < Timeline Activity < *> >( activity ) ĊĠĠĠĠĠĠĠ Ġhelper 2 . click MenuItem ("$ method Ġclick er ĠDis card Ġ$ log Msg ", ĠR . id . discard Button ) ĊĠĠĠĠĠĠĠ ĠActivity TestHelper . wait View In visible ("$ method Ġ$ log Msg ", Ġeditor View ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Loaded Ġnote Ġshould Ġbe Ġunchanged Ġafter ĠDis card : Ġ$ log Msg ", ĠDownload Status . LOADED , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwaitFor Download Status ( note Id , ĠDownload Status . LOADED ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠwaitFor Download Status ( note Id : ĠLong , Ġexpected : ĠDownload Status ): ĠDownload Status Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdownload Status : ĠDownload Status Ġ= ĠDownload Status . UNKNOWN ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 2 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Status Ġ= Ġget Download Status ( note Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( download Status Ġ== Ġexpected ) Ġreturn Ġdownload Status ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDb Utils . wait Ms ( this , Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdownload Status ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Download Status ( note Id : ĠLong ): ĠDownload Status Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDownload Status . Companion . load ( My Query . note Id To Long Column Value ( Note Table . NOTE _ STATUS , Ġnote Id )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreply ing () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġ" reply ing " ĊĠĠĠĠĠĠĠ ĠTest Suite . waitFor List Loaded ( activity , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġeditor View : ĠView Ġ= ĠActivity TestHelper . hide Editor And Save Draft < Activity View Item >( method , Ġactivity ) ĊĠĠĠĠĠĠĠ Ġval Ġhelper Ġ= ĠList Activity TestHelper < Timeline Activity < *> >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCon versation Activity :: class . java ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġview Item Ġ= Ġhelper . find ListItem ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Some Ġothers Ġloaded Ġnote " ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġitem : ĠBase Note View Item < *> Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( item . author . get Actor Id () Ġ!= Ġdata . get My Account (). actor Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġitem . note Status Ġ== ĠDownload Status . LOADED ) ĊĠĠĠĠĠĠĠ Ġ} Ġas ĠActivity View Item ĊĠĠĠĠĠĠĠ Ġval Ġlist ItemId Ġ= Ġview Item . getId () ĊĠĠĠĠĠĠĠ Ġval Ġnote Id Ġ= ĠMy Query . activity Id To Long Column Value ( Activity Table . NOTE _ ID , Ġlist ItemId ) ĊĠĠĠĠĠĠĠ Ġvar Ġlog Msg Ġ= Ġ(" itemId =" Ġ+ Ġlist ItemId Ġ+ Ġ", Ġnote Id =" Ġ+ Ġnote Id Ġ+ Ġ" Ġtext ='" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ ĠMy Query . note Id ToString Column Value ( Note Table . CONTENT , Ġnote Id ) Ġ+ Ġ"' ") ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( log Msg , Ġview Item . note View Item . getId (), Ġnote Id ) ĊĠĠĠĠĠĠĠ Ġval Ġinvoked Ġ= Ġhelper . invoke ContextMenu Action 4 ListItem Id ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod , Ġlist ItemId , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNote Context MenuItem . REPLY , ĠR . id . note _ wrapper ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġlog Msg Ġ+= Ġ";" Ġ+ Ġif Ġ( inv oked ) Ġ"" Ġelse Ġ" Ġfailed Ġto Ġinvoke ĠReply Ġmenu Ġitem ," ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( log Msg , Ġinvoked ) ĊĠĠĠĠĠĠĠ ĠActivity TestHelper . close ContextMenu ( activity ) ĊĠĠĠĠĠĠĠ ĠActivity TestHelper . wait View Visible ("$ method Ġ$ log Msg ", Ġeditor View ) ĊĠĠĠĠĠĠĠ Ġon View ( View Matchers . with Id ( R . id . note Body EditText )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. check ( View Assertions . matches ( View Matchers . with Text ( Core Matchers . startsWith ("@ ")) )) ĊĠĠĠĠĠĠĠ ĠE sp ress o Utils . waitFor Idle Sync () ĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġ" Reply ing Ġto Ġyou Ġduring Ġ" Ġ+ ĠDemo Data . demo Data . test Run Uid ĊĠĠĠĠĠĠĠ Ġval Ġbody Text Ġ= Ġeditor View . findViewById < EditText ? >( R . id . note Body EditText ) ĊĠĠĠĠĠĠĠ Ġ// ĠE sp ress o Ġtypes Ġin Ġthe Ġcentre , Ġunfortunately , Ġso Ġwe Ġneed Ġto Ġre type Ġtext ĊĠĠĠĠĠĠĠ Ġon View ( View Matchers . with Id ( R . id . note Body EditText )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform ( Replace Text Action ( body Text . text . toString (). trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" Ġ" Ġ+ Ġcontent )) ĊĠĠĠĠĠĠĠ ĠE sp ress o Utils . waitFor Idle Sync () ĊĠĠĠĠĠĠĠ ĠActivity TestHelper . hide Editor And Save Draft < Activity View Item >(" $ method ĠSave Ġdraft Ġ$ log Msg ", Ġactivity ) ĊĠĠĠĠĠĠĠ Ġval Ġdraft Note Id : ĠLong Ġ= ĠActivity TestHelper . wait AndGet Id Of Stored Note ("$ method Ġ$ log Msg ", Ġcontent ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Saved Ġnote Ġshould Ġbe Ġin ĠD RA FT Ġstate : Ġ$ log Msg ", ĠDownload Status . DR AFT , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Download Status ( draft Note Id ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Wrong Ġid Ġof Ġin Reply To Ġnote Ġof Ġ'$ content ': Ġ$ log Msg ", Ġnote Id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMy Query . note Id To Long Column Value ( Note Table . IN _ REPLY _ TO _ NOTE _ ID , Ġdraft Note Id ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġaudience : ĠAud ience Ġ= Ġfrom Note Id ( data . get My Account (). origin , Ġdraft Note Id ) ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Audience Ġof Ġa Ġreply Ġto Ġ$ view Item \ n Ġ$ audience ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaudience . find Same ( view Item . note View Item . author . actor ). is Success ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġediting Step : ĠAtomicInteger Ġ= ĠAtomicInteger () ĊĊĠĠĠĠĠĠĠ Ġfun Ġattach Images ( test : ĠTimeline Activity Test < Activity View Item >, Ġto Add : ĠInt , Ġto Expect : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠScreen shot On Failure . screenshot Wrapper ( test . activity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattach Images Internal ( test , Ġto Add , Ġto Expect ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġattach Images Internal ( test : ĠTimeline Activity Test < Activity View Item >, Ġto Add : ĠInt , Ġto Expect : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġ" attach Images $ to Add " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMy Log . v ( test , Ġ"$ method Ġstarted ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity TestHelper . hide Editor And Save Draft ( method , Ġtest . activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeditor View : ĠView Ġ= ĠActivity TestHelper . open Editor ( method , Ġtest . activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Text Cle ared ( test ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠE sp ress o Utils . waitFor Editor Unlock ed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnote Name Ġ= Ġ" A Ġnote Ġ" Ġ+ Ġto Add Ġ+ Ġ" Ġ" Ġ+ Ġtest :: class . simple Name Ġ+ Ġ" Ġcan Ġhave Ġa Ġtitle Ġ( name )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġ" Note Ġwith Ġ" Ġ+ Ġto Expect Ġ+ Ġ" Ġattachment " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( if Ġ( to Expect Ġ== Ġ 1 ) Ġ"" Ġelse Ġ" s ") Ġ+ Ġ" Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDemo Data . demo Data . test Run Uid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon View ( View Matchers . with Id ( R . id . note _ name _ edit )). perform ( Replace Text Action ( note Name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon View ( View Matchers . with Id ( R . id . note Body EditText )). perform ( Replace Text Action ( content )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon View ( View Matchers . with Id ( R . id . note _ name _ edit )). check ( View Assertions . matches ( View Matchers . with Text ( note Name ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon View ( View Matchers . with Id ( R . id . note Body EditText )). check ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Assertions . matches ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Matchers . with Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattach Image ( test , Ġeditor View , ĠDemo Data . demo Data . local Image Test Uri 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( to Add Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattach Image ( test , Ġeditor View , ĠDemo Data . demo Data . local Gif Test Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġtest . activity . get Note Editor () Ġ?: Ġthrow ĠIllegalStateException (" No Ġeditor ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" All Ġimage Ġattached Ġ" Ġ+ Ġeditor . getData (). get Attached Image Files (), Ġto Expect . to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . getData (). get Attached Image Files (). list . size . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( to Add Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmedia File Ġ= Ġeditor . getData (). get Attached Image Files (). list [ if Ġ( to Expect Ġ== Ġ 1 ) Ġ 0 Ġelse Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Should Ġbe Ġanimated Ġ$ media File ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMy ContentType . ANIM ATED _ IMAGE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia File . contentType ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon View ( View Matchers . with Id ( R . id . note Body EditText )). check ( View Assertions . matches ( View Matchers . with Text ("$ content Ġ" ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon View ( View Matchers . with Id ( R . id . note _ name _ edit )). check ( View Assertions . matches ( View Matchers . with Text ( note Name ))) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity TestHelper . hide Editor And Save Draft ( method , Ġtest . activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠE sp ress o Utils . waitFor Idle Sync () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMy Log . v ( test , Ġ"$ method Ġended ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġattach Image ( test : ĠTimeline Activity Test < Activity View Item >, Ġeditor View : ĠView , Ġimage Uri : ĠUri ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġ" attach Image " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠE sp ress o Utils . waitFor Editor Unlock ed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhelper Ġ= ĠActivity TestHelper < Timeline Activity < *> >( test . activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest . activity . set Selector Activity Stub ( helper ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhelper . click MenuItem ("$ method Ġclick er Ġattach _ menu _ id ", ĠR . id . attach _ menu _ id ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( helper . waitFor Selector Start ( method , ĠActivity Request Code . ATTACH . id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest . activity . set Selector Activity Stub ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Monitor Ġ= Ġtest . get Instrumentation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Monitor ( Help Activity :: class . java . name , Ġnull , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent 1 Ġ= ĠIntent ( test . activity , ĠHelp Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent 1 . add Flags ( Intent . FLAG _ ACTIVITY _ NEW _ TASK ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest . activity . application Context . startActivity ( intent 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselector Activity Ġ= Ġtest . get Instrumentation (). waitFor Monitor WithTimeout ( activity Monitor , Ġ 2 5 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( selector Activity Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity TestHelper . wait View In visible ( method , Ġeditor View ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠE sp ress o Utils . waitFor Editor Unlock ed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselector Activity . finish () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠE sp ress o Utils . waitFor Editor Unlock ed () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMy Log . i ( method , Ġ" Callback Ġfrom Ġa Ġselector ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent 2 Ġ= ĠIntent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent 2 . setData And Type ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Uri , ĠMy ContentType . Companion . uri 2 MimeType ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest . activity . content Resolver , Ġimage Uri , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMy ContentType . IMAGE . general MimeType ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest . activity . run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest . activity . on Activity Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Request Code . ATTACH . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity . RESULT _ OK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġtest . activity . get Note Editor () Ġ?: Ġthrow ĠIllegalStateException (" No Ġeditor ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( attempt Ġin Ġ 0 .. 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity TestHelper . wait View Visible ( method , Ġeditor View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDue Ġto Ġa Ġrace Ġthe Ġeditor Ġmay Ġopen Ġbefore Ġthis Ġchange Ġfirst . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( editor . getData (). get Attached Image Files (). for Uri ( image Uri ). isPresent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠE sp ress o Utils . waitFor Editor Unlock ed () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Image Ġattached ", Ġeditor . getData (). get Attached Image Files () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. for Uri ( image Uri ). isPresent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġassert Text Cle ared ( test : ĠTimeline Activity Test < Activity View Item >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġtest . activity . get Note Editor () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue (" Editor Ġis Ġnot Ġnull ", Ġeditor Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Editor Ġdata Ġshould Ġbe Ġcleared ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNote Editor Data . Companion . new Empty ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest . activity . my Context . accounts . current Account ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). to Test Summary (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor ?. getData ()?. to Test Summary () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ