package Ġcom . re venue cat . p urchases Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . os . Handler Ċ import Ġandroid . support . test . runner . Android JUnit 4 Ċ import Ġcom . android . billing client . api . Billing Client Ċ import Ġcom . android . billing client . api . Billing Client State Listener Ċ import Ġcom . android . billing client . api . Billing Flow Params Ċ import Ġcom . android . billing client . api . Purchase Ċ import Ġcom . android . billing client . api . Purchase History Response Listener Ċ import Ġcom . android . billing client . api . P urchases Updated Listener Ċ import Ġcom . android . billing client . api . Sku Details Ċ import Ġcom . android . billing client . api . Sku Details Response Listener Ċ import Ġio . mock k . Runs Ċ import Ġio . mock k . every Ċ import Ġio . mock k . just Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . slot Ċ import Ġio . mock k . verify Ċ import Ġjunit . framework . Assert . assertEquals Ċ import Ġjunit . framework . Assert . assertNotNull Ċ import Ġjunit . framework . Assert . assertNull Ċ import Ġorg . assertj . core . api . Assertions For Class Types . assertThat Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . ro bo lectric . annotation . Config Ċ import Ġjava . util .* Ċ Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ @ Config ( manifest Ġ= ĠConfig . NONE ) Ċ class ĠBilling Wrapper Test Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġmock Client Factory : ĠBilling Wrapper . Client Factory Ġ= Ġmock k () ĊĠĠĠ Ġprivate Ġvar Ġmock Client : ĠBilling Client Ġ= Ġmock k () ĊĠĠĠ Ġprivate Ġvar Ġpurch ases Updated Listener : ĠP urchases Updated Listener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġbilling Client State Listener : ĠBilling Client State Listener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġbilling Client Purchase History Listener : ĠPurchase History Response Listener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġhandler : ĠHandler Ġ= Ġmock k () ĊĊĠĠĠ Ġprivate Ġvar Ġmock P urchases Listener : ĠBilling Wrapper . P urchases Updated Listener Ġ= Ġmock k () ĊĠĠĠ Ġprivate Ġvar Ġmock Purchase History Listener : ĠBilling Wrapper . Purchase History Response Listener Ġ= ĊĠĠĠĠĠĠĠ Ġmock k () ĊĊĠĠĠ Ġprivate Ġvar Ġwrapper : ĠBilling Wrapper ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġmock Details List Ġ= ĠArrayList < Sku Details >() ĊĊĠĠĠ Ġprivate Ġvar Ġsku Details List : ĠList < Sku Details >? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġsku Details Response Called Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġslot Ġ= Ġslot < Runnable >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post ( capture ( slot )) ĊĠĠĠĠĠĠĠ Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslot . captured . run () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlistener Slot Ġ= Ġslot < P urchases Updated Listener >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Client Factory . build Client ( capture ( listener Slot )) ĊĠĠĠĠĠĠĠ Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpurch ases Updated Listener Ġ= Ġlistener Slot . captured ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Client ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbilling Client State Listener Slot Ġ= Ġslot < Billing Client State Listener >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Client . start Connection ( capture ( billing Client State Listener Slot )) ĊĠĠĠĠĠĠĠ Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbilling Client State Listener Ġ= Ġbilling Client State Listener Slot . captured ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbilling Client Purchase History Listener Slot Ġ= Ġslot < Purchase History Response Listener >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Client . query Purchase History Async ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapture ( billing Client Purchase History Listener Slot ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbilling Client Purchase History Listener Ġ= Ġbilling Client Purchase History Listener Slot . captured ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmock Details : ĠSk u Details Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġmock Details List . add ( mock Details ) ĊĊĠĠĠĠĠĠĠ Ġwrapper Ġ= ĠBilling Wrapper ( mock Client Factory , Ġhandler ) ĊĠĠĠĠĠĠĠ Ġwrapper !!. set Listener ( mock P urchases Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcan Be Created () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠĠĠĠĠ ĠassertNotNull ( wrapper ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalls Build On The Factory () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Client Factory . build Client ( p urchases Updated Listener !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġconnect sTo Play Billing () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Client . start Connection ( billing Client State Listener !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmock Standard Sku Details Response () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġslot Ġ= Ġslot < Sku Details Response Listener >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Client . query Sku Details Async ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapture ( slot ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslot . captured . on Sku Details Response ( Billing Client . Billing Response . OK , Ġmock Details List ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdef ers Calling Sku Query Until Connected () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup () ĊĊĠĠĠĠĠĠĠ Ġmock Standard Sku Details Response () ĊĊĠĠĠĠĠĠĠ Ġval Ġproduct IDs Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġproduct IDs . add (" product _ a ") ĊĊĠĠĠĠĠĠĠ Ġwrapper !!. query Sku Details Async ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBilling Client . Sku Type . SUB S , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct IDs , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠBilling Wrapper . Sku Details Response Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive Sku Details ( sku Details : ĠList < Sku Details >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Billing Wrapper Test . sku Details List Ġ= Ġsku Details ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠassertNull ( sku Details List ) ĊĊĠĠĠĠĠĠĠ Ġbilling Client State Listener !!. on Billing Setup Finished ( Billing Client . Billing Response . OK ) ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( sku Details List ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcan De fer Multiple Calls () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠĠĠĠĠ Ġmock Standard Sku Details Response () ĊĊĠĠĠĠĠĠĠ Ġval Ġproduct IDs Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġproduct IDs . add (" product _ a ") ĊĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= Ġobject Ġ: ĠBilling Wrapper . Sku Details Response Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive Sku Details ( sku Details : ĠList < Sku Details >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Billing Wrapper Test . sku Details Response Called Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwrapper !!. query Sku Details Async ( Billing Client . Sku Type . SUB S , Ġproduct IDs , Ġlistener ) ĊĠĠĠĠĠĠĠ Ġwrapper !!. query Sku Details Async ( Billing Client . Sku Type . SUB S , Ġproduct IDs , Ġlistener ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġsku Details Response Called ) ĊĊĠĠĠĠĠĠĠ Ġbilling Client State Listener !!. on Billing Setup Finished ( Billing Client . Billing Response . OK ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġsku Details Response Called ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmaking A Request Triggers A Connection Attempt () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠĠĠĠĠ Ġmock Standard Sku Details Response () ĊĊĠĠĠĠĠĠĠ Ġval Ġproduct IDs Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġproduct IDs . add (" product _ a ") ĊĊĠĠĠĠĠĠĠ Ġwrapper !!. query Sku Details Async ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBilling Client . Sku Type . SUB S , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct IDs , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠBilling Wrapper . Sku Details Response Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive Sku Details ( sku Details : ĠList < Sku Details >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDO ĠNOT H ING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġverify Ġ( exact ly Ġ= Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Client . start Connection ( billing Client State Listener !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcan Make AP urchase () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Client . launch Billing Flow ( any (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠBilling Client . Billing Response . OK ĊĊĠĠĠĠĠĠĠ Ġval Ġsku Ġ= Ġ" product _ a " ĊĊĠĠĠĠĠĠĠ Ġval Ġold Sk us Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġold Sk us . add (" product _ b ") ĊĊĠĠĠĠĠĠĠ Ġval Ġactivity : ĠActivity Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġbilling Client State Listener !!. on Billing Setup Finished ( Billing Client . Billing Response . OK ) ĊĠĠĠĠĠĠĠ Ġwrapper !!. make Purchase Async ( activity , Ġ" j erry ", Ġsku , Ġold Sk us , ĠBilling Client . Sku Type . SUB S ) ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Client . launch Billing Flow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( activity ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġproperly Sets Billing Flow Params () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠĠĠĠĠ Ġval Ġapp UserID Ġ= Ġ" j erry " ĊĠĠĠĠĠĠĠ Ġval Ġsku Ġ= Ġ" product _ a " ĊĠĠĠĠĠĠĠ Ġ@ Billing Client . Sku Type Ġval Ġsku Type Ġ= ĠBilling Client . Sku Type . SUB S ĊĊĠĠĠĠĠĠĠ Ġval Ġold Sk us Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġold Sk us . add (" product _ b ") ĊĊĠĠĠĠĠĠĠ Ġval Ġactivity : ĠActivity Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġval Ġslot Ġ= Ġslot < Billing Flow Params >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Client . launch Billing Flow ( eq ( activity ), Ġcapture ( slot )) ĊĠĠĠĠĠĠĠ Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġslot . captured ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( sku , Ġparams . sku ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( sku Type , Ġparams . sku Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( old Sk us , Ġparams . old Sk us ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( app UserID , Ġparams . accountId ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBilling Client . Billing Response . OK ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbilling Client State Listener !!. on Billing Setup Finished ( Billing Client . Billing Response . OK ) ĊĠĠĠĠĠĠĠ Ġwrapper !!. make Purchase Async ( activity , Ġapp UserID , Ġsku , Ġold Sk us , Ġsku Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdef ers Billing Flow IfNot Connected () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠĠĠĠĠ Ġval Ġapp UserID Ġ= Ġ" j erry " ĊĠĠĠĠĠĠĠ Ġval Ġsku Ġ= Ġ" product _ a " ĊĠĠĠĠĠĠĠ Ġ@ Billing Client . Sku Type Ġval Ġsku Type Ġ= ĠBilling Client . Sku Type . SUB S ĊĊĠĠĠĠĠĠĠ Ġval Ġold Sk us Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġold Sk us . add (" product _ b ") ĊĊĠĠĠĠĠĠĠ Ġval Ġactivity : ĠActivity Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġwrapper !!. make Purchase Async ( activity , Ġapp UserID , Ġsku , Ġold Sk us , Ġsku Type ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Client . launch Billing Flow ( eq ( activity ), Ġany ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalls Launch Flow From MainThread () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Client . launch Billing Flow ( any (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġ} Ġ Ġreturns ĠBilling Client . Billing Response . OK ĊĊĠĠĠĠĠĠĠ Ġval Ġapp UserID Ġ= Ġ" j erry " ĊĠĠĠĠĠĠĠ Ġval Ġsku Ġ= Ġ" product _ a " ĊĠĠĠĠĠĠĠ Ġ@ Billing Client . Sku Type Ġval Ġsku Type Ġ= ĠBilling Client . Sku Type . SUB S ĊĊĠĠĠĠĠĠĠ Ġval Ġold Sk us Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġold Sk us . add (" product _ b ") ĊĊĠĠĠĠĠĠĠ Ġval Ġactivity : ĠActivity Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġwrapper !!. make Purchase Async ( activity , Ġapp UserID , Ġsku , Ġold Sk us , Ġsku Type ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post ( any ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbilling Client State Listener !!. on Billing Setup Finished ( Billing Client . Billing Response . OK ) ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post ( any ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġpurch ases Updated Calls Are Forwarded () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠĠĠĠĠ Ġval Ġpurch ases Ġ= ĠArrayList < Purchase >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock P urchases Listener . on P urchases Updated ( any ()) ĊĠĠĠĠĠĠĠ Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠ Ġpurch ases Updated Listener !!. on P urchases Updated ( Billing Client . Billing Response . OK , Ġpurch ases ) ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock P urchases Listener . on P urchases Updated ( p urchases ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġpurch ases Updated Calls Are Forwarded With Empty If Ok Null () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock P urchases Listener . on P urchases Failed ToUpdate ( any (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġ} Ġjust ĠRuns ĊĊĠĠĠĠĠĠĠ Ġpurch ases Updated Listener !!. on P urchases Updated ( Billing Client . Billing Response . OK , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock P urchases Listener . on P urchases Failed ToUpdate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( Billing Client . Billing Response . ERROR ), Ġany () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġpurchase Update Failed Called IfNot OK () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock P urchases Listener . on P urchases Failed ToUpdate ( any (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠ Ġpurch ases Updated Listener !!. on P urchases Updated ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBilling Client . Billing Response . FEATURE _ NOT _ SUPPORTED , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock P urchases Listener . on P urchases Updated ( any ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock P urchases Listener . on P urchases Failed ToUpdate ( any (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġquery History Calls Listener If Ok () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Purchase History Listener . on Receive Purchase History ( any ()) ĊĠĠĠĠĠĠĠ Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠ Ġbilling Client State Listener !!. on Billing Setup Finished ( Billing Client . Billing Response . OK ) ĊĠĠĠĠĠĠĠ Ġwrapper !!. query Purchase History Async ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBilling Client . Sku Type . SUB S , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Purchase History Listener ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġbilling Client Purchase History Listener !!. on Purchase History Response ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBilling Client . Billing Response . OK , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArrayList () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Purchase History Listener . on Receive Purchase History ( any ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġquery History Not Called IfNot OK () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Purchase History Listener . on Receive Purchase History Error ( any (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġ} Ġjust ĠRuns ĊĊĠĠĠĠĠĠĠ Ġbilling Client State Listener !!. on Billing Setup Finished ( Billing Client . Billing Response . OK ) ĊĠĠĠĠĠĠĠ Ġwrapper !!. query Purchase History Async ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBilling Client . Sku Type . SUB S , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Purchase History Listener ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġbilling Client Purchase History Listener !!. on Purchase History Response ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBilling Client . Billing Response . FEATURE _ NOT _ SUPPORTED , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArrayList () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Purchase History Listener . on Receive Purchase History ( any ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Purchase History Listener . on Receive Purchase History Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( Billing Client . Billing Response . FEATURE _ NOT _ SUPPORTED ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcan Consume A Token () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġ" mock Token " ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Client . consume Async ( eq ( token ), Ġany ()) ĊĠĠĠĠĠĠĠ Ġ} Ġjust ĠRuns ĊĊĠĠĠĠĠĠĠ Ġbilling Client State Listener !!. on Billing Setup Finished ( Billing Client . Billing Response . OK ) ĊĠĠĠĠĠĠĠ Ġwrapper !!. consume Purchase ( token ) ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Client . consume Async ( eq ( token ), Ġany ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġremoving Listener Disconnect s () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Client . end Connection () ĊĠĠĠĠĠĠĠ Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Client . is Ready ĊĠĠĠĠĠĠĠ Ġ} Ġreturns Ġtrue ĊĊĠĠĠĠĠĠĠ Ġwrapper !!. set Listener ( null ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Client . end Connection () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( wrapper !!. p urchases Updated Listener ). isNull () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen Setting Listener Start Connection () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Client . start Connection ( eq ( wrapper !! )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( wrapper !!. p urchases Updated Listener ). isNotNull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen Executing Request And There Is No Listener DoNot Try To Start Connection () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclient Factory : ĠBilling Wrapper . Client Factory Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġval Ġbilling Client : ĠBilling Client Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient Factory . build Client ( any ()) ĊĠĠĠĠĠĠĠ Ġ} Ġreturns Ġbilling Client ĊĊĠĠĠĠĠĠĠ Ġval Ġbilling Wrapper Ġ= ĠBilling Wrapper ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient Factory , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock k () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġbilling Wrapper . set Listener ( null ) ĊĠĠĠĠĠĠĠ Ġbilling Wrapper . consume Purchase (" token ") ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbilling Client . start Connection ( eq ( billing Wrapper )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen Sku Details IsNull Pass An Empty List To The Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠĠĠĠĠ Ġmock Null Sku Details Response () ĊĊĠĠĠĠĠĠĠ Ġval Ġproduct IDs Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġproduct IDs . add (" product _ a ") ĊĊĠĠĠĠĠĠĠ Ġwrapper !!. query Sku Details Async ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBilling Client . Sku Type . SUB S , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct IDs , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠBilling Wrapper . Sku Details Response Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive Sku Details ( sku Details : ĠList < Sku Details >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( sku Details ). isNotNull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( sku Details . size ). isEqualTo ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġnull ify Billing Client After Ending Connection () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Client . end Connection () ĊĠĠĠĠĠĠĠ Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Client . is Ready ĊĠĠĠĠĠĠĠ Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġwrapper !!. set Listener ( null ) ĊĊĠĠĠĠĠĠĠ ĠassertThat < Billing Client >( wrapper !!. billing Client ). isNull () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġnew Billing Client Is Created When Setting Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠĠĠĠĠ Ġwrapper !!. set Listener ( mock P urchases Listener ) ĊĊĠĠĠĠĠĠĠ ĠassertThat < Billing Client >( wrapper !!. billing Client ). isNotNull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdo Not End Connection IfNot Connected And Removing New Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Client . is Ready ĊĠĠĠĠĠĠĠ Ġ} Ġreturns Ġfalse ĊĊĠĠĠĠĠĠĠ Ġwrapper !!. set Listener ( null ) ĊĠĠĠĠĠĠĠ Ġverify Ġ( exact ly Ġ= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Client . end Connection () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmock Null Sku Details Response () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġslot Ġ= Ġslot < Sku Details Response Listener >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Client . query Sku Details Async ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapture ( slot ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslot . captured . on Sku Details Response ( Billing Client . Billing Response . OK , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ