/* Ċ Ġ* ĠCopyright Ġ 2 0 2 2 Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttps :// 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 Ġcom . google . android . hor o log ist . audio Ċ Ċ import Ġandroidx . test . annotation . Ui Thread Test Ċ import Ġandroidx . test . platform . app . Instrumentation Registry Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . flow . filter Ċ import Ġkotlinx . coroutines . flow . first Ċ import Ġkotlinx . coroutines . flow . map Ċ import Ġkotlinx . coroutines . test . run Test Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġorg . junit . Test Ċ Ċ @ Opt In ( Experimental Cor outines Api :: class , ĠExperimental H oro log ist Audio Api :: class ) Ċ class ĠSystem Audio Repository Test Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Ui Thread Test ĊĠĠĠ Ġfun Ġtest Audio Output Repository () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠInstrument ation Registry . get Instrumentation (). target Context ĊĊĠĠĠĠĠĠĠ ĠSystem Audio Repository . from Context ( context ). use Ġ{ Ġrepository Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( repository . audio Output . value ). isNotNull () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( repository . available . value ). isNotEmpty () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . close () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( repository . audio Output . value ). isEqualTo ( Audio Output . None ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( repository . available . value ). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Volume Repository () Ġ= Ġrun Test ( dispatch Timeout Ms Ġ= Ġ 1 0 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠInstrument ation Registry . get Instrumentation (). target Context ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Audio Repository . from Context ( context ). use Ġ{ Ġrepository Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( repository . volume State . value . is Max ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . decrease Volume () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstarting Volume Ġ= Ġrepository . volume State . value . current ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . increase Volume () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Volume Ġ= Ġrepository . volume State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . current Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ> Ġstarting Volume Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( new Volume ). is GreaterThan ( starting Volume ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ