package Ġcom . may ok un ad eni yi . instant weather . kas press o Ċ Ċ import Ġandroid . os . Build Ċ import Ġcom . jr ask a . f alcon . F alcon Ċ import Ġcom . kas per sky . kas press o . device . activities . Activities Ċ import Ġcom . kas per sky . kas press o . device . screenshots . Screenshots Ċ import Ġcom . kas per sky . kas press o . device . screenshots . screenshot files . Screenshots Directory Storage Ċ import Ġjava . io . File Ċ Ċ class ĠScreenshots F alcon ( private Ġval Ġactivities : ĠActiv ities , Ġprivate Ġval Ġscreenshot Dir : ĠFile Ġ= ĠFile (" screenshots ")) Ġ: ĠScreenshots Ġ{ ĊĠĠĠ Ġprivate Ġval ĠTEST _ CASE _ CLASS _ J UNIT _ 3 Ġ= Ġ" android . test . Instrumentation TestCase " ĊĠĠĠ Ġprivate Ġval ĠTEST _ CASE _ METHOD _ J UNIT _ 3 Ġ= Ġ" run Method " ĊĠĠĠ Ġprivate Ġval ĠTEST _ CASE _ CLASS _ J UNIT _ 4 Ġ= Ġ" org . junit . runners . model . Framework Method $ 1 " ĊĠĠĠ Ġprivate Ġval ĠTEST _ CASE _ METHOD _ J UNIT _ 4 Ġ= Ġ" run Reflect ive Call " ĊĠĠĠ Ġprivate Ġval ĠTEST _ CASE _ CLASS _ CU C UM BER _ JVM Ġ= Ġ" cucumber . runtime . model . C ucumber Feature " ĊĠĠĠ Ġprivate Ġval ĠTEST _ CASE _ METHOD _ CU C UM BER _ JVM Ġ= Ġ" run " ĊĠĠĠ Ġprivate Ġval ĠNAME _ SEPARATOR Ġ= Ġ"_" ĊĠĠĠ Ġprivate Ġval ĠEXT ENSION Ġ= Ġ". png " ĊĊĠĠĠ Ġprivate Ġval Ġdirectory Storage Ġ= ĠScreenshots Directory Storage () ĊĊĠĠĠ Ġoverride Ġfun Ġtake ( tag : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres umed Activity Ġ= Ġactivities . get Res umed () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( res umed Activity Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscreenshot File Ġ= Ġget Screenshot File ( tag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF alcon . take Screenshot ( res umed Activity , Ġscreenshot File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. on Success Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Screenshot File ( tag : ĠString ): ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscreenshot Root Directory Ġ= Ġdirectory Storage . getRoot Screenshot Directory ( screenshot Dir ) ĊĊĠĠĠĠĠĠĠ Ġval Ġscreenshot Test Directory Ġ= Ġdirectory Storage . obtain Directory ( get Directory For Test ( screenshot Root Directory )) ĊĠĠĠĠĠĠĠ Ġif Ġ(! screenshot Test Directory . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscreenshot Test Directory . mkdir s () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġscreenshot Name Ġ= Ġtag Ġ+ ĠEXT ENSION ĊĠĠĠĠĠĠĠ Ġreturn Ġscreenshot Test Directory . resolve ( screenshot Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Directory For Test ( screenshot Root Directory : ĠFile ): ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Class Ġ= ĠThread . currentThread (). stack Trace . find TestClass Trace Element () ĊĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= Ġtest Class . className . replace ("[ ^ A - Za - z 0 - 9 ._ - ] ". to Regex (), ĠNAME _ SEPARATOR ) ĊĠĠĠĠĠĠĠ Ġval ĠmethodName Ġ= Ġtest Class . methodName ĊĊĠĠĠĠĠĠĠ Ġreturn Ġscreenshot Root Directory . resolve ( className ). resolve ( methodName ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun ĠArray < StackTrace Element >. find TestClass Trace Element (): ĠStack Trace Element Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . with Index (). reversed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Ġ{ Ġ(_, Ġelement ) Ġ-> Ġelement . is J unit 3 () Ġ|| Ġelement . is J unit 4 () Ġ|| Ġelement . is C ucumber () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġ( i , Ġ_) Ġ-> Ġextract Stack Element ( i ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Could Ġnot Ġfind Ġtest Ġclass ! ĠTrace : Ġ${ this . map Ġ{ Ġit . toString () Ġ}} ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠStack Trace Element . is J unit 3 (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTEST _ CASE _ CLASS _ J UNIT _ 3 Ġ== ĠclassName Ġ&& ĠTEST _ CASE _ METHOD _ J UNIT _ 3 Ġ== ĠmethodName ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠStack Trace Element . is J unit 4 (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTEST _ CASE _ CLASS _ J UNIT _ 4 Ġ== ĠclassName Ġ&& ĠTEST _ CASE _ METHOD _ J UNIT _ 4 Ġ== ĠmethodName ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠStack Trace Element . is C ucumber (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTEST _ CASE _ CLASS _ CU C UM BER _ JVM Ġ== ĠclassName Ġ&& ĠTEST _ CASE _ METHOD _ CU C UM BER _ JVM Ġ== ĠmethodName ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" Magic Number ") ĊĠĠĠ Ġprivate Ġfun ĠArray < StackTrace Element >. extract Stack Element ( i : ĠInt ): ĠStack Trace Element Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠStack trace Ġlength Ġchanged Ġin ĠM ĊĠĠĠĠĠĠĠ Ġval Ġtest Class Trace Index Ġ= Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġi Ġ- Ġ 2 Ġelse Ġi Ġ- Ġ 3 ĊĠĠĠĠĠĠĠ Ġreturn Ġthis [ test Class Trace Index ] ĊĠĠĠ Ġ} Ċ }