package Ġcom . bos w el ja . watch connection . we ar os . discovery Ċ Ċ import Ġapp . cash . tur bine . test Ċ import Ġcom . bos w el ja . watch connection . common . discovery . Connection Mode Ċ import Ġcom . google . android . gms . tasks . Tasks Ċ import Ġcom . google . android . gms . we arable . Capability Client Ċ import Ġcom . google . android . gms . we arable . Node Client Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . un mock k All Ċ import Ġio . mock k . verify Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertFalse Ċ import Ġkotlin . test . assertTrue Ċ Ċ public Ġclass ĠW ear OS Discovery Platform Test Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnode Client : ĠNode Client ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcapability Client : ĠCap ability Client ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdiscovery Platform : ĠW ear OS Discovery Platform ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġpublic Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġnode Client Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġcapability Client Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġdiscovery Platform Ġ= ĠW ear OS Discovery Platform ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode Client , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcapability Client , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscan Repeat Interval Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġpublic Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġun mock k All () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġpublic Ġfun Ġall W atches _ flows Changes (): ĠUnit Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġnode Client . connected Nodes Ġ} Ġreturns ĠTasks . for Result ( create Nodes ( count )) ĊĠĠĠĠĠĠĠ Ġdiscovery Platform . all W atches (). test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġinitial Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġawait Item (). count () Ġ== Ġcount Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġreduced Ġcount ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ= Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġnode Client . connected Nodes Ġ} Ġreturns ĠTasks . for Result ( create Nodes ( count )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġawait Item (). count () Ġ== Ġcount Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġincreased Ġcount ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ= Ġ 7 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġnode Client . connected Nodes Ġ} Ġreturns ĠTasks . for Result ( create Nodes ( count )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġawait Item (). count () Ġ== Ġcount Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġpublic Ġfun Ġget Capabilities For _ returns Capabilities For Watch (): ĠUnit Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcapabilities Ġ= ĠlistOf (" capability 1 ", Ġ" capability 2 ", Ġ" capability 3 ") ĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= Ġcreate Nodes ( 1 ). first () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcapability Client . getAll Capabilities ( any ()) ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠTasks . for Result ( create Dummy Capabilities ( capabilities , Ġset Of ( node ))) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdiscovery Platform . get Capabilities For ( node . id ) ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġresult . contains All ( result ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġpublic Ġfun Ġget Capabilities For _ ign ores Capabilities For Other Nodes (): ĠUnit Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcapabilities Ġ= ĠlistOf (" capability 1 ", Ġ" capability 2 ", Ġ" capability 3 ") ĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= Ġcreate Nodes ( 1 ). first () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcapability Client . getAll Capabilities ( any ()) ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠTasks . for Result ( create Dummy Capabilities ( capabilities , Ġset Of ( node ))) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdiscovery Platform . get Capabilities For (" other - node - id ") ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġresult . isEmpty () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġpublic Ġfun Ġwatch Has Capability _ flows True When Watch Has Capability (): ĠUnit Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcapability Ġ= Ġ" capability 1 " ĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= Ġcreate Nodes ( 1 ). first () ĊĊĠĠĠĠĠĠĠ Ġ// ĠMock ĠCap ability Info Ġwithout Ġtarget Ġnode ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcapability Client . get Capability ( capability , Ġany ()) ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠTasks . for Result ( Dummy Capability Info ( capability , Ġmutable Set Of ( node ))) ĊĠĠĠĠĠĠĠ Ġ// ĠMock Ġlisteners ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcapability Client . addListener ( any (), Ġcapability ) ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠTasks . for Result ( null ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcapability Client . remove Listener ( any ()) Ġ} Ġreturns ĠTasks . for Result ( true ) ĊĊĠĠĠĠĠĠĠ Ġdiscovery Platform . watch Has Capability ( node . id , Ġcapability ). test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( await Item ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġpublic Ġfun Ġwatch Has Capability _ flows False When Watch Has No Capability (): ĠUnit Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcapability Ġ= Ġ" capability 1 " ĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= Ġcreate Nodes ( 1 ). first () ĊĊĠĠĠĠĠĠĠ Ġ// ĠMock ĠCap ability Info Ġwithout Ġtarget Ġnode ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcapability Client . get Capability ( capability , Ġany ()) ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠTasks . for Result ( Dummy Capability Info ( capability , Ġmutable Set Of ())) ĊĠĠĠĠĠĠĠ Ġ// ĠMock Ġlisteners ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcapability Client . addListener ( any (), Ġcapability ) ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠTasks . for Result ( null ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcapability Client . remove Listener ( any ()) Ġ} Ġreturns ĠTasks . for Result ( true ) ĊĊĠĠĠĠĠĠĠ Ġdiscovery Platform . watch Has Capability ( node . id , Ġcapability ). test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( await Item ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġpublic Ġfun Ġwatch Has Capability _ re moves Listener On Cancel (): ĠUnit Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcapability Ġ= Ġ" capability 1 " ĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= Ġcreate Nodes ( 1 ). first () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcapability Client . get Capability ( capability , Ġany ()) ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠTasks . for Result ( Dummy Capability Info ( capability , Ġmutable Set Of ())) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcapability Client . addListener ( any (), Ġcapability ) ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠTasks . for Result ( null ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcapability Client . remove Listener ( any ()) Ġ} Ġreturns ĠTasks . for Result ( true ) ĊĊĠĠĠĠĠĠĠ Ġdiscovery Platform . watch Has Capability ( node . id , Ġcapability ). test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġexpect Ġat Ġleast Ġone Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠ Ġawait Item () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcancel () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġcapability Client . remove Listener ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġpublic Ġfun Ġconnection Mode For _ flows Bluetooth When Node Is Near by (): ĠUnit Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= Ġcreate Nodes ( 1 , Ġtrue ). first () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġnode Client . connected Nodes Ġ} Ġreturns ĠTasks . for Result ( listOf ( node )) ĊĠĠĠĠĠĠĠ Ġdiscovery Platform . connection Mode For ( node . id ). test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Connection Mode . Bluetooth , Ġawait Item ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġpublic Ġfun Ġconnection Mode For _ flows Internet When Node IsNot Near by (): ĠUnit Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= Ġcreate Nodes ( 1 , Ġfalse ). first () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġnode Client . connected Nodes Ġ} Ġreturns ĠTasks . for Result ( listOf ( node )) ĊĠĠĠĠĠĠĠ Ġdiscovery Platform . connection Mode For ( node . id ). test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Connection Mode . Internet , Ġawait Item ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġpublic Ġfun Ġconnection Mode For _ flows Disconnected When Node NotFound (): ĠUnit Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġnode Client . connected Nodes Ġ} Ġreturns ĠTasks . for Result ( listOf ()) ĊĠĠĠĠĠĠĠ Ġdiscovery Platform . connection Mode For (" some - node - id "). test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Connection Mode . Disconnected , Ġawait Item ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġpublic Ġfun Ġadd Local Capability _ returns True On Success (): ĠUnit Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcapability Ġ= Ġ" capability 1 " ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcapability Client . add Local Capability ( any ()) Ġ} Ġreturns ĠTasks . for Result ( null ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdiscovery Platform . add Local Capability ( capability ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġpublic Ġfun Ġadd Local Capability _ returns False OnError (): ĠUnit Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcapability Ġ= Ġ" capability 1 " ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcapability Client . add Local Capability ( any ()) Ġ} Ġthrows ĠException () ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdiscovery Platform . add Local Capability ( capability ) ĊĠĠĠĠĠĠĠ ĠassertFalse ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġpublic Ġfun Ġremove Local Capability _ returns True On Success (): ĠUnit Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcapability Ġ= Ġ" capability 1 " ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcapability Client . remove Local Capability ( any ()) Ġ} Ġreturns ĠTasks . for Result ( null ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdiscovery Platform . remove Local Capability ( capability ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġpublic Ġfun Ġremove Local Capability _ returns False OnError (): ĠUnit Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcapability Ġ= Ġ" capability 1 " ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcapability Client . remove Local Capability ( any ()) Ġ} Ġthrows ĠException () ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdiscovery Platform . remove Local Capability ( capability ) ĊĠĠĠĠĠĠĠ ĠassertFalse ( result ) ĊĠĠĠ Ġ} Ċ } Ċ