package Ġmo e . mip a . agent Ċ Ċ import Ġandroidx . test . platform . app . Instrumentation Registry Ċ import Ġmo e . mip a . M ipa Agent Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġkotlin . system . measure Time Millis Ċ Ċ class ĠM ipa Action Test Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġagent : ĠM ipa Agent ĊĠĠĠ Ġprivate Ġval Ġctx Ġ= ĠInstrument ation Registry . get Instrumentation (). context ĊĠĠĠ Ġprivate Ġval Ġinit Script Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunction Ġgen Arr ( size ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġarr Ġ= Ġ[] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( let Ġi = 0 ; i < size ; i ++){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarr . push ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġarr ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunction * Ġf (){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyield * Ġgen Arr ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġgen Ġ= Ġf () ĊĠĠĠĠĠĠĠ Ġ""" ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġbefore () Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun Ġafter () Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtap () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġbase Ġtest ĊĠĠĠĠĠĠĠ Ġagent Ġ= ĠM ipa Agent ( ctx , ĠlistOf ( M ipa Console :: class . java , ĠM ipa Action :: class . java )) ĊĠĠĠĠĠĠĠ Ġvar Ġres : ĠString ĊĠĠĠĠĠĠĠ Ġval Ġduration Ġ= Ġmeasure Time Millis Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres Ġ= Ġagent . run Script (" tap ( 2 0 0 , 3 0 0 )") Ġas ĠString ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġduration Ġtest ĊĠĠĠĠĠĠĠ Ġassert ( duration Ġin Ġ 1 0 0 0 .. 2 0 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġposition Ġrange Ġtest ĊĠĠĠĠĠĠĠ Ġval Ġ( x , Ġy ) Ġ= Ġres . split (",") ĊĠĠĠĠĠĠĠ Ġassert ( x . toInt () Ġin Ġ 1 9 5 .. 2 0 5 Ġ&& Ġy . toInt () Ġin Ġ 2 9 5 .. 3 0 5 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtap Full Args () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġfull Ġargument Ġtest ĊĠĠĠĠĠĠĠ Ġagent Ġ= ĠM ipa Agent ( ctx , ĠlistOf ( M ipa Console :: class . java , ĠM ipa Action :: class . java )) ĊĠĠĠĠĠĠĠ Ġvar Ġres : ĠString ĊĠĠĠĠĠĠĠ Ġval Ġduration Ġ= Ġmeasure Time Millis Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres Ġ= Ġagent . run Script (" tap ([ 2 0 0 , 3 0 0 ], 2 0 0 0 , 1 0 0 0 , 1 0 )") Ġas ĠString ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġduration Ġtest ĊĠĠĠĠĠĠĠ Ġassert ( duration Ġin Ġ 3 0 0 0 .. 4 0 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġposition Ġrange Ġtest ĊĠĠĠĠĠĠĠ Ġval Ġ( x , Ġy ) Ġ= Ġres . split (",") ĊĠĠĠĠĠĠĠ Ġassert ( x . toInt () Ġin Ġ 1 9 0 .. 2 1 0 Ġ&& Ġy . toInt () Ġin Ġ 2 9 0 .. 3 1 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtap Until () Ġ{ ĊĠĠĠĠĠĠĠ Ġagent Ġ= ĠM ipa Agent ( ctx , ĠlistOf ( M ipa Action :: class . java , ĠM ipa Console :: class . java )) ĊĠĠĠĠĠĠĠ Ġagent . lazy Init Scripts Ġ= Ġinit Script Ġ+ Ġ""" Ċ function Ġtap Until () Ġ{ ĊĠĠĠ Ġconst Ġargs Ġ= Ġ[] ĊĠĠĠ Ġfor ( const Ġi Ġof Ġarguments ){ ĊĠĠĠĠĠĠĠ Ġargs . push ( i ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfoo Ġ= Ġargs . shift () ĊĠĠĠ Ġwhile (! foo ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġtap . apply ( this , args ) ĊĠĠĠ Ġ} Ċ } ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġstr Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtap Until (() =>{ return Ġgen . next (). done }, 1 0 0 , 2 0 0 ) ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġval Ġduration Ġ= Ġmeasure Time Millis Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġagent . run Script ( str ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġassert ( duration Ġin Ġ 3 0 0 0 .. 4 0 0 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtap After () Ġ{ ĊĠĠĠĠĠĠĠ Ġagent Ġ= ĠM ipa Agent ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( M ipa Action :: class . java , ĠM ipa Console :: class . java , ĠM ipa Thread :: class . java ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġagent . lazy Init Scripts Ġ= Ġinit Script Ġ+ Ġ""" Ċ function Ġtap After () Ġ{ ĊĠĠĠ Ġconst Ġargs Ġ= Ġ[] ĊĠĠĠ Ġfor ( const Ġi Ġof Ġarguments ){ ĊĠĠĠĠĠĠĠ Ġargs . push ( i ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfoo Ġ= Ġargs . shift () ĊĠĠĠ Ġwhile (! foo ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġsleep ( 1 0 0 0 ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġtap . apply ( this , args ) Ċ } ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġval Ġstr Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtap After (() =>{ return Ġgen . next (). done }, 1 0 0 , 2 0 0 ) ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġval Ġduration Ġ= Ġmeasure Time Millis Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġagent . run Script ( str ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġassert ( duration Ġin Ġ 4 0 0 0 .. 5 0 0 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġswipe () Ġ{ ĊĠĠĠĠĠĠĠ Ġagent Ġ= ĠM ipa Agent ( ctx , ĠlistOf ( M ipa Console :: class . java , ĠM ipa Action :: class . java )) ĊĠĠĠĠĠĠĠ Ġval Ġduration Ġ= Ġmeasure Time Millis Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġagent . run Script (" swipe ([ 2 0 0 , 3 0 0 ],[ 4 0 0 , 5 0 0 ], 2 0 0 0 )") Ġas ĠString ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġduration Ġtest ĊĠĠĠĠĠĠĠ Ġassert ( duration Ġin Ġ 2 0 0 0 .. 3 0 0 0 ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġswipe After () Ġ{ ĊĠĠĠĠĠĠĠ Ġagent Ġ= ĠM ipa Agent ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( M ipa Action :: class . java , ĠM ipa Console :: class . java , ĠM ipa Thread :: class . java ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġagent . lazy Init Scripts Ġ= Ġinit Script Ġ+ Ġ""" Ċ function Ġswipe After () Ġ{ ĊĠĠĠ Ġconst Ġargs Ġ= Ġ[] ĊĠĠĠ Ġfor ( const Ġi Ġof Ġarguments ){ ĊĠĠĠĠĠĠĠ Ġargs . push ( i ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfoo Ġ= Ġargs . shift () ĊĠĠĠ Ġwhile (! foo ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġsleep ( 1 0 0 0 ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġswipe . apply ( this , args ) Ċ } ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġval Ġstr Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġswipe After (() =>{ return Ġgen . next (). done }, [ 2 0 0 , 2 0 0 ],[ 3 0 0 , 3 0 0 ]) ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġval Ġduration Ġ= Ġmeasure Time Millis Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġagent . run Script ( str ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġassert ( duration Ġin Ġ 4 0 0 0 .. 5 0 0 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġswipe Until () Ġ{ ĊĠĠĠĠĠĠĠ Ġagent Ġ= ĠM ipa Agent ( ctx , ĠlistOf ( M ipa Action :: class . java , ĠM ipa Console :: class . java )) ĊĠĠĠĠĠĠĠ Ġagent . lazy Init Scripts Ġ= Ġinit Script Ġ+ Ġ""" Ċ function Ġswipe Until () Ġ{ ĊĠĠĠ Ġconst Ġargs Ġ= Ġ[] ĊĠĠĠ Ġfor ( const Ġi Ġof Ġarguments ){ ĊĠĠĠĠĠĠĠ Ġargs . push ( i ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfoo Ġ= Ġargs . shift () ĊĠĠĠ Ġwhile (! foo ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġswipe . apply ( this , args ) ĊĠĠĠ Ġ} Ċ } ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġstr Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Until (() =>{ return Ġgen . next (). done }, [ 2 0 0 , 2 0 0 ],[ 3 0 0 , 3 0 0 ]) ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġval Ġduration Ġ= Ġmeasure Time Millis Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġagent . run Script ( str ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġassert ( duration Ġin Ġ 3 0 0 0 .. 4 0 0 0 ) ĊĠĠĠ Ġ} Ċ Ċ }