/* Ċ Ġ* Ġ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 . persistence . file . advanced Ċ Ċ import Ġandroid . util . Log Ċ import Ġcom . datadog . android . core . internal . persistence . Data Writer Ċ import Ġcom . datadog . android . log . Logger Ċ import Ġcom . datadog . android . log . internal . logger . Log Handler Ċ import Ġcom . datadog . android . utils . forge . Configurator Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . any Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . argument Captor Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . do Throw Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . verify Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . verify No More Interactions Ċ 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 Ġfr . xg ou chet . el my r . annotation . String F org ery Ċ import Ġfr . xg ou chet . el my r . junit 5 . Forge Configuration Ċ import Ġfr . xg ou chet . el my r . junit 5 . Forge Extension Ċ import Ġjava . util . concurrent . ExecutorService Ċ import Ġjava . util . concurrent . Rejected ExecutionException Ċ 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 ), ĊĠĠĠ ĠExtend With ( Forge Extension :: class ) Ċ ) Ċ @ Mockito Settings ( strict ness Ġ= ĠStrict ness . LEN IENT ) Ċ @ Forge Configuration ( Configurator :: class ) Ċ internal Ġclass ĠScheduled Writer Test Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġtested Writer : ĠData Writer < String > ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġlateinit Ġvar Ġmock Delegate Writer : ĠData Writer < String > ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġlateinit Ġvar Ġmock ExecutorService : ĠExecutor Service ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġlateinit Ġvar Ġmock Log Handler : ĠLog Handler ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun Ġ` set Ġup `() Ġ{ ĊĠĠĠĠĠĠĠ Ġtested Writer Ġ= ĠScheduled Writer < String >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Delegate Writer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock ExecutorService , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger ( mock Log Handler ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` ðĿ ķ Ħ Ġschedule Ġwrite Ġ ðĿ ķ İ Ġwrite ( T )` ( ĊĠĠĠĠĠĠĠ Ġ@ String F org ery Ġdata : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġtested Writer . write ( data ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġverify Zero Interactions ( mock Delegate Writer ) ĊĠĠĠĠĠĠĠ Ġargument Captor < Runnable > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( mock ExecutorService ). submit ( capture ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Value . run () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( mock Delegate Writer ). write ( data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġverify No More Interactions ( mock Delegate Writer , Ġmock ExecutorService ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` ðĿ ķ Ħ Ġdrop Ġdata Ġand Ġwarn Ġ ðĿ ķ İ Ġwrite ( T ) Ġ{ submit Ġrejected }` ( ĊĠĠĠĠĠĠĠ Ġ@ String F org ery Ġdata : ĠString , ĊĠĠĠĠĠĠĠ Ġ@ String F org ery ĠerrorMessage : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠReject ed ExecutionException ( errorMessage ) ĊĠĠĠĠĠĠĠ Ġwhenever ( mock ExecutorService . submit ( any ())) Ġdo Throw Ġexception ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġtested Writer . write ( data ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġverify Zero Interactions ( mock Delegate Writer ) ĊĠĠĠĠĠĠĠ Ġverify ( mock Log Handler ). handle Log ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . ERROR , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠScheduled Writer . ERROR _ RE JECT ED , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable Ġ= Ġexception ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` ðĿ ķ Ħ Ġschedule Ġwrite Ġ ðĿ ķ İ Ġwrite ( List )` ( ĊĠĠĠĠĠĠĠ Ġ@ String F org ery Ġdata : ĠList < String > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġtested Writer . write ( data ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġverify Zero Interactions ( mock Delegate Writer ) ĊĠĠĠĠĠĠĠ Ġargument Captor < Runnable > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( mock ExecutorService ). submit ( capture ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Value . run () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( mock Delegate Writer ). write ( data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġverify No More Interactions ( mock Delegate Writer , Ġmock ExecutorService ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` ðĿ ķ Ħ Ġdrop Ġdata Ġand Ġwarn Ġ ðĿ ķ İ Ġwrite ( List ) Ġ{ submit Ġrejected }` ( ĊĠĠĠĠĠĠĠ Ġ@ String F org ery Ġdata : ĠList < String >, ĊĠĠĠĠĠĠĠ Ġ@ String F org ery ĠerrorMessage : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠReject ed ExecutionException ( errorMessage ) ĊĠĠĠĠĠĠĠ Ġwhenever ( mock ExecutorService . submit ( any ())) Ġdo Throw Ġexception ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġtested Writer . write ( data ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġverify Zero Interactions ( mock Delegate Writer ) ĊĠĠĠĠĠĠĠ Ġverify ( mock Log Handler ). handle Log ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . ERROR , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠScheduled Writer . ERROR _ RE JECT ED , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable Ġ= Ġexception ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ