/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 Ġandroidx . fragment . app Ċ Ċ import Ġandroidx . fragment . app . test . Fragment Test Activity Ċ import Ġandroidx . fragment . test . R Ċ import Ġandroidx . test . ext . junit . runners . Android JUnit 4 Ċ import Ġandroidx . test . filters . Large Test Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġcom . google . common . truth . Truth . assert With Message Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġjava . util . concurrent . Count DownLatch Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ @ Large Test Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ class ĠFragment Animated Container Test Ġ{ ĊĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġvar Ġactivity Rule Ġ= Ġandroidx . test . rule . Activity Test Rule ( Fragment Test Activity :: class . java ) ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup Container () Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Rule . set ContentView ( R . layout . animated _ container ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠIf Ġcontainer Ġhas Ġa Ġset ĠTransition , Ġcancel Ġthe ĠAnimation ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcancel Animation For Container Transition () Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Rule . set ContentView ( R . layout . animated _ container ) ĊĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġactivity Rule . activity ĊĠĠĠĠĠĠĠ Ġval Ġfm Ġ= Ġactivity . support FragmentManager ĊĊĠĠĠĠĠĠĠ Ġval Ġfragment 1 Ġ= ĠAnimated Container Fragment () ĊĠĠĠĠĠĠĠ Ġfm . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Custom Animations ( R . anim . fade _ in , ĠR . anim . fade _ out , ĠR . anim . fade _ in , ĠR . anim . fade _ out ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( R . id . animated Fragment Container , Ġfragment 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit () ĊĠĠĠĠĠĠĠ Ġactivity Rule . run On Ui Thread Ġ{ Ġfm . execute Pending Transactions () Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfragment 2 Ġ= ĠAnimated Container Fragment () ĊĠĠĠĠĠĠĠ Ġfm . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Custom Animations ( R . anim . fade _ in , ĠR . anim . fade _ out , ĠR . anim . fade _ in , ĠR . anim . fade _ out ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( R . id . animated Fragment Container , Ġfragment 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit () ĊĊĠĠĠĠĠĠĠ Ġassert With Message (" Fragment Ġshould Ġbe Ġdestroyed Ġafter Ġcontainer Ġanimation Ġcompletes ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. that ( fragment 1 . on Destroy Latch . await ( 1 0 0 0 , ĠTimeUnit . MILLISECONDS )). isTrue () ĊĠĠĠĠĠĠĠ ĠassertThat ( fragment 1 . on Detach Latch . await ( 1 0 0 0 , ĠTimeUnit . MILLISECONDS )). isTrue () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠIf Ġcontainer Ġhas Ġa Ġset ĠTransition , Ġcancel Ġthe ĠTransition ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcancel Transition For Container Transition () Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Rule . set ContentView ( R . layout . animated _ container ) ĊĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġactivity Rule . activity ĊĠĠĠĠĠĠĠ Ġval Ġfm Ġ= Ġactivity . support FragmentManager ĊĊĠĠĠĠĠĠĠ Ġval Ġfragment 1 Ġ= ĠAnimated Container Fragment () ĊĠĠĠĠĠĠĠ Ġfm . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Transition ( Fragment Transaction . TRANS IT _ FRAGMENT _ FA DE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( R . id . animated Fragment Container , Ġfragment 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit () ĊĠĠĠĠĠĠĠ Ġactivity Rule . run On Ui Thread Ġ{ Ġfm . execute Pending Transactions () Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfragment 2 Ġ= ĠAnimated Container Fragment () ĊĠĠĠĠĠĠĠ Ġfm . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Transition ( Fragment Transaction . TRANS IT _ FRAGMENT _ FA DE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( R . id . animated Fragment Container , Ġfragment 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit () ĊĊĠĠĠĠĠĠĠ Ġassert With Message (" Fragment Ġshould Ġbe Ġdestroyed Ġafter Ġcontainer Ġanimation Ġcompletes ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. that ( fragment 1 . on Destroy Latch . await ( 1 0 0 0 , ĠTimeUnit . MILLISECONDS )). isTrue () ĊĠĠĠĠĠĠĠ ĠassertThat ( fragment 1 . on Detach Latch . await ( 1 0 0 0 , ĠTimeUnit . MILLISECONDS )). isTrue () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠAnimated Container Fragment Ġ: ĠStrict View Fragment () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġon Destroy Latch Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġon Detach Latch Ġ= ĠCount DownLatch ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Destroy Latch . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Detach () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Detach () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Detach Latch . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }