/* Ċ Ġ* ĠUnless Ġexplicitly Ġstated Ġotherwise Ġall Ġfiles Ġin Ġthis Ġrepository Ġare Ġlicensed Ġunder Ġthe ĠApache ĠLicense ĠVersion Ġ 2 . 0 . Ċ Ġ* ĠThis Ġproduct Ġincludes Ġsoftware Ġdeveloped Ġat ĠDat adog Ġ( https :// www . datadog hq . com /). Ċ Ġ* ĠCopyright Ġ 2 0 1 6 - Present ĠDat adog , ĠInc . Ċ Ġ*/ Ċ Ċ package Ġcom . datadog . android . core . internal . lifecycle Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . work . Existing Work Policy Ċ import Ġandroidx . work . One Time Work Request Ċ import Ġandroidx . work . impl . Work ManagerImpl Ċ import Ġcom . datadog . android . core . internal . data . upload . Upload Worker Ċ import Ġcom . datadog . android . core . internal . net . info . Network Info Ċ import Ġcom . datadog . android . core . internal . net . info . Network Info Provider Ċ import Ġcom . datadog . android . core . internal . utils . TAG _ DAT ADO G _ UPLOAD Ċ import Ġcom . datadog . android . core . internal . utils . UPLOAD _ WORK ER _ NAME Ċ import Ġcom . datadog . android . utils . mock Context Ċ import Ġcom . datadog . tools . unit . set FieldValue Ċ import Ġcom . datadog . tools . unit . set Static Value Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . arg That Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . eq Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . verify Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . verify Zero Interactions Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . wh enever Ċ import Ġjava . lang . ref . Weak Reference Ċ import Ġorg . junit . jupiter . api . After Each Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . extension . Extend With Ċ import Ġorg . junit . jupiter . api . extension . Extensions Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . junit . jupiter . Mockito Extension Ċ import Ġorg . mockito . junit . jupiter . Mockito Settings Ċ import Ġorg . mockito . quality . Strict ness Ċ Ċ @ Extensions ( ĊĠĠĠ ĠExtend With ( Mockito Extension :: class ) Ċ ) Ċ @ Mockito Settings ( strict ness Ġ= ĠStrict ness . LEN IENT ) Ċ internal Ġclass ĠProcess Lifecycle Callback Test Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġmock Context : ĠContext ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġlateinit Ġvar Ġmock Work Manager : ĠWork ManagerImpl ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġlateinit Ġvar Ġmock Network Info Provider : ĠNetwork Info Provider ĊĊĠĠĠ Ġlateinit Ġvar Ġunder Test : ĠProcess Lifecycle Callback ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun Ġ` set Ġup `() Ġ{ ĊĠĠĠĠĠĠĠ Ġmock Context Ġ= Ġmock Context () ĊĠĠĠĠĠĠĠ Ġunder Test Ġ= ĠProcess Lifecycle Callback ( mock Network Info Provider , Ġmock Context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After Each ĊĠĠĠ Ġfun Ġ` te ar Ġdown `() Ġ{ ĊĠĠĠĠĠĠĠ ĠWork ManagerImpl :: class . java . set Static Value (" s Default Instance ", Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġprocess Ġstopped Ġand Ġnetwork Ġis Ġdisconnected Ġwill Ġschedule Ġan Ġupload Ġworker `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ ĠWork ManagerImpl :: class . java . set Static Value (" s Default Instance ", Ġmock Work Manager ) ĊĠĠĠĠĠĠĠ Ġwhenever ( mock Network Info Provider . get Latest Network Info ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork Info . Connectivity . NETWORK _ NOT _ CONNECTED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġunder Test . on Stopped () ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġverify ( mock Work Manager ). enqueue Unique Work ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( UPLOAD _ WORK ER _ NAME ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( Existing Work Policy . REPLACE ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarg That < One Time Work Request > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . work Spec . worker ClassName Ġ== ĠUpload Worker :: class . java . canonical Name Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . tags . contains ( TAG _ DAT ADO G _ UPLOAD ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġprocess Ġstopped Ġand Ġwork Ġmanager Ġis Ġnot Ġpresent Ġwill Ġnot Ġthrow Ġexception `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġwhenever ( mock Network Info Provider . get Latest Network Info ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork Info . Connectivity . NETWORK _ NOT _ CONNECTED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġunder Test . on Stopped () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġprocess Ġstopped Ġand Ġnetwork Ġis Ġconnected Ġwill Ġdo Ġnothing `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ ĠWork ManagerImpl :: class . java . set Static Value (" s Default Instance ", Ġmock Work Manager ) ĊĠĠĠĠĠĠĠ Ġwhenever ( mock Network Info Provider . get Latest Network Info ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork Info . Connectivity . NETWORK _ WIFI ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġunder Test . on Stopped () ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġverify Zero Interactions ( mock Work Manager ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġprocess Ġstopped Ġand Ġcontext Ġref Ġis Ġnull Ġwill Ġdo Ġnothing `() Ġ{ ĊĠĠĠĠĠĠĠ Ġunder Test . set FieldValue (" context Weak Ref ", ĠWeak Reference < Context >( null )) ĊĠĠĠĠĠĠĠ ĠWork ManagerImpl :: class . java . set Static Value (" s Default Instance ", Ġmock Work Manager ) ĊĠĠĠĠĠĠĠ Ġwhenever ( mock Network Info Provider . get Latest Network Info ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork Info . Connectivity . NETWORK _ WIFI ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġunder Test . on Stopped () ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġverify Zero Interactions ( mock Work Manager ) ĊĠĠĠ Ġ} Ċ } Ċ