/* Ċ Ġ* Ġ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 Ċ Ċ import Ġandroid . app . Application Ċ import Ġcom . datadog . android . core . configuration . Configuration Ċ import Ġcom . datadog . android . core . internal . data . upload . Data Flush er Ċ import Ġcom . datadog . android . core . internal . data . upload . Data Upload Scheduler Ċ import Ġcom . datadog . android . core . internal . data . upload . No Op Upload Scheduler Ċ import Ġcom . datadog . android . core . internal . data . upload . Upload Scheduler Ċ import Ġcom . datadog . android . core . internal . net . Data Uploader Ċ import Ġcom . datadog . android . core . internal . persistence . DataReader Ċ import Ġcom . datadog . android . core . internal . persistence . No Op Persistence Strategy Ċ import Ġcom . datadog . android . core . internal . persistence . Persistence Strategy Ċ import Ġcom . datadog . android . plugin . Dat adog Plugin Config Ċ import Ġcom . datadog . android . privacy . Tracking Consent Ċ import Ġcom . datadog . android . utils . config . ApplicationContext Test Configuration Ċ import Ġcom . datadog . android . utils . config . Core Feature Test Configuration Ċ import Ġcom . datadog . android . utils . forge . Configurator Ċ import Ġcom . datadog . tools . unit . annotations . Test Configurations Provider Ċ import Ġcom . datadog . tools . unit . extensions . Api Level Extension Ċ import Ġcom . datadog . tools . unit . extensions . Test Configuration Extension Ċ import Ġcom . datadog . tools . unit . extensions . config . Test Configuration Ċ 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 . capture Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . do Return Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . eq Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . mock Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . times Ċ 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 . wh enever Ċ import Ġfr . xg ou chet . el my r . Forge Ċ import Ġfr . xg ou chet . el my r . annotation . F org ery Ċ 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 . io . File Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . jupiter . api . After Each Ċ import Ġorg . junit . jupiter . api . Ass umptions . assume True Ċ 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 ), ĊĠĠĠ ĠExtend With ( Api Level Extension :: class ), ĊĠĠĠ ĠExtend With ( Test Configuration Extension :: class ) Ċ ) Ċ @ Mockito Settings ( strict ness Ġ= ĠStrict ness . LEN IENT ) Ċ @ Forge Configuration ( Configurator :: class ) Ċ internal Ġabstract Ġclass ĠS dk Feature Test < T Ġ: ĠAny , ĠC Ġ: ĠConfiguration . Feature , ĠF Ġ: ĠS dk Feature < T , ĠC >> Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġtested Feature : ĠF ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġlateinit Ġvar Ġmock Persistence Strategy : ĠPersistence Strategy < T > ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġlateinit Ġvar Ġmock Reader : ĠData Reader ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġlateinit Ġvar Ġmock Uploader : ĠData Uploader ĊĊĠĠĠ Ġlateinit Ġvar Ġfake Configuration Feature : ĠC ĊĊĠĠĠ Ġ@ F org ery ĊĠĠĠ Ġlateinit Ġvar Ġfake Consent : ĠTracking Consent ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun Ġ` set Ġup `( forge : ĠFor ge ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( mock Persistence Strategy . get Reader ()) Ġdo Return Ġmock Reader ĊĠĠĠĠĠĠĠ Ġwhenever ( core Feature . mock Tracking Consent Provider . get Consent ()) Ġdo Return Ġfake Consent ĊĊĠĠĠĠĠĠĠ Ġfake Configuration Feature Ġ= Ġfor ge Configuration ( forge ) ĊĠĠĠĠĠĠĠ Ġtested Feature Ġ= Ġcreate Tested Feature () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After Each ĊĠĠĠ Ġfun Ġ` te ar Ġdown `() Ġ{ ĊĠĠĠĠĠĠĠ Ġtested Feature . stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġcreate Tested Feature (): ĠF ĊĊĠĠĠ Ġabstract Ġfun Ġfor ge Configuration ( forge : ĠFor ge ): ĠC ĊĊĠĠĠ Ġabstract Ġfun Ġfeature Dir Name (): ĠString ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` ðĿ ķ Ħ Ġmark Ġitself Ġas Ġinitialized Ġ ðĿ ķ İ Ġinitialize ()` () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġtested Feature . initialize ( app Context . mock Instance , Ġfake Configuration Feature ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertThat ( tested Feature . isInitialized ()). isTrue () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` ðĿ ķ Ħ Ġinitialize Ġup loader Ġ ðĿ ķ İ Ġinitialize ()` () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġtested Feature . initialize ( app Context . mock Instance , Ġfake Configuration Feature ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertThat ( tested Feature . upload Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isInstanceOf ( Data Upload Scheduler :: class . java ) ĊĠĠĠĠĠĠĠ Ġargument Captor < Runnable > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( core Feature . mock Upload Executor ). schedule ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( TimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` ðĿ ķ Ħ Ġregister Ġplugins Ġ ðĿ ķ İ Ġinitialize ()` () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġassume True ( fake Configuration Feature . plugins . isNotEmpty ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġtested Feature . initialize ( app Context . mock Instance , Ġfake Configuration Feature ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġargument Captor < Dat adog Plugin Config > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfake Configuration Feature . plugins . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( it ). register ( capture ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Values . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( it . context ). isEqualTo ( app Context . mock Instance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( it . serviceName ). isEqualTo ( core Feature . fake ServiceName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( it . env Name ). isEqualTo ( core Feature . fake Env Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( it . context ). isEqualTo ( app Context . mock Instance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( it . tracking Consent ). isEqualTo ( fake Consent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` ðĿ ķ Ħ Ġregister Ġplugins Ġas ĠTracking Consent Callback Ġ ðĿ ķ İ Ġinitialize ()` () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġassume True ( fake Configuration Feature . plugins . isNotEmpty ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġtested Feature . initialize ( app Context . mock Instance , Ġfake Configuration Feature ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġfake Configuration Feature . plugins . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( core Feature . mock Tracking Consent Provider ). register Callback ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` ðĿ ķ Ħ Ġunregister Ġplugins Ġ ðĿ ķ İ Ġstop ()` () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġassume True ( fake Configuration Feature . plugins . isNotEmpty ()) ĊĠĠĠĠĠĠĠ Ġtested Feature . initialize ( app Context . mock Instance , Ġfake Configuration Feature ) ĊĠĠĠĠĠĠĠ Ġfake Configuration Feature . plugins . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( it ). register ( any ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġtested Feature . stop () ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġfake Configuration Feature . plugins . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( it ). unregister () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify No More Interactions ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` ðĿ ķ Ħ Ġstop Ġscheduler Ġ ðĿ ķ İ Ġstop ()` () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġtested Feature . initialize ( app Context . mock Instance , Ġfake Configuration Feature ) ĊĠĠĠĠĠĠĠ Ġval Ġmock Upload Scheduler : ĠUpload Scheduler Ġ= Ġmock () ĊĠĠĠĠĠĠĠ Ġtested Feature . upload Scheduler Ġ= Ġmock Upload Scheduler ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġtested Feature . stop () ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġverify ( mock Upload Scheduler ). stop Scheduling () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` ðĿ ķ Ħ Ġcleanup Ġdata Ġ ðĿ ķ İ Ġstop ()` () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġtested Feature . initialize ( app Context . mock Instance , Ġfake Configuration Feature ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġtested Feature . stop () ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertThat ( tested Feature . persistence Strategy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isInstanceOf ( No Op Persistence Strategy :: class . java ) ĊĠĠĠĠĠĠĠ ĠassertThat ( tested Feature . upload Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isInstanceOf ( No Op Upload Scheduler :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` ðĿ ķ Ħ Ġmark Ġitself Ġas Ġnot Ġinitialized Ġ ðĿ ķ İ Ġstop ()` () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġtested Feature . initialize ( app Context . mock Instance , Ġfake Configuration Feature ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġtested Feature . stop () ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertThat ( tested Feature . isInitialized ()). isFalse () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` ðĿ ķ Ħ Ġinitialize Ġonly Ġonce Ġ ðĿ ķ İ Ġinitialize () Ġtwice `( ĊĠĠĠĠĠĠĠ Ġfor ge : ĠFor ge ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġother Config Ġ= Ġfor ge Configuration ( forge ) ĊĠĠĠĠĠĠĠ Ġtested Feature . initialize ( app Context . mock Instance , Ġfake Configuration Feature ) ĊĠĠĠĠĠĠĠ Ġval Ġpersistence Strategy Ġ= Ġtested Feature . persistence Strategy ĊĠĠĠĠĠĠĠ Ġval Ġupload Scheduler Ġ= Ġtested Feature . upload Scheduler ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġtested Feature . initialize ( app Context . mock Instance , Ġother Config ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertThat ( tested Feature . persistence Strategy ). is Same As ( persistence Strategy ) ĊĠĠĠĠĠĠĠ ĠassertThat ( tested Feature . upload Scheduler ). is Same As ( upload Scheduler ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` ðĿ ķ Ħ Ġnot Ġsetup Ġup loader Ġ ðĿ ķ İ Ġinitialize () Ġin Ġsecondary Ġprocess `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ ĠCore Feature . is Main Process Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġtested Feature . initialize ( app Context . mock Instance , Ġfake Configuration Feature ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertThat ( tested Feature . upload Scheduler ). isInstanceOf ( No Op Upload Scheduler :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` ðĿ ķ Ħ Ġclear Ġlocal Ġstorage Ġ ðĿ ķ İ Ġclear All Data ()` () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġtested Feature . persistence Strategy Ġ= Ġmock Persistence Strategy ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġtested Feature . clear All Data () ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġverify ( mock Reader ). drop All () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` M Ġcall Ġthe ĠData Flush er ĠW Ġflush Data `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġmock Data Flush er : ĠData Flush er Ġ= Ġmock () ĊĠĠĠĠĠĠĠ Ġwhenever ( mock Persistence Strategy . get Flush er ()). thenReturn ( mock Data Flush er ) ĊĠĠĠĠĠĠĠ Ġtested Feature . persistence Strategy Ġ= Ġmock Persistence Strategy ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġtested Feature . flush Stored Data () ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġverify ( mock Data Flush er ). flush ( tested Feature . uploader ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` ðĿ ķ Ħ Ġmigrate Ġbatch Ġfiles Ġ ðĿ ķ İ Ġinitialize ()` ( ĊĠĠĠĠĠĠĠ Ġ@ String F org ery Ġmessage : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= ĠSystem . currentTimeMillis (). toString () ĊĠĠĠĠĠĠĠ Ġval Ġold Files Dir Ġ= ĠFile ( app Context . fake Files Dir , Ġ" dd -${ feature Dir Name ()} - v 1 ") ĊĠĠĠĠĠĠĠ Ġold Files Dir . mkdir s () ĊĠĠĠĠĠĠĠ Ġval Ġold Batch File Ġ= ĠFile ( old Files Dir , ĠfileName ) ĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġ"{\" message \":\" $ message \" }" ĊĠĠĠĠĠĠĠ Ġold Batch File . write Text ( content ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġtested Feature . initialize ( app Context . mock Instance , Ġfake Configuration Feature ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġval Ġnew Files Dir Ġ= ĠFile ( app Context . fake Cache Dir , Ġ" dd -${ feature Dir Name ()} - v 1 ") ĊĠĠĠĠĠĠĠ Ġval Ġnew Batch File Ġ= ĠFile ( new Files Dir , ĠfileName ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcapt or Ġ= Ġargument Captor < Runnable >() ĊĠĠĠĠĠĠĠ Ġ// Ġwe Ġexpect Ġone Ġoperation Ġfor Ġthe ĠCon sent Aware Ġmechanism , Ġand Ġtwo Ġfor Ġthis Ġmigration ĊĠĠĠĠĠĠĠ Ġverify ( core Feature . mock Persistence Executor , Ġtimes ( 3 )). submit ( capt or . capture ()) ĊĠĠĠĠĠĠĠ ĠassertThat ( new Batch File ). does NotExist () ĊĠĠĠĠĠĠĠ Ġcapt or . second Value . run () ĊĠĠĠĠĠĠĠ ĠassertThat ( new Batch File ). exists (). has Content ( content ) ĊĠĠĠĠĠĠĠ ĠassertThat ( old Batch File ). does NotExist () ĊĠĠĠĠĠĠĠ ĠassertThat ( old Files Dir ). exists () ĊĠĠĠĠĠĠĠ Ġcapt or . third Value . run () ĊĠĠĠĠĠĠĠ ĠassertThat ( old Files Dir ). does NotExist () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġapp Context Ġ= ĠApplication Context Test Configuration ( Application :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġcore Feature Ġ= ĠCore Feature Test Configuration ( app Context ) ĊĊĠĠĠĠĠĠĠ Ġ@ Test Configurations Provider ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġget Test Configurations (): ĠList < Test Configuration > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( app Context , Ġcore Feature ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ