/* Ċ ĠCopyright Ġ 2 0 2 1 ĠSpl endo ĠConsult ing ĠB . V . ĠThe ĠNe therlands ĊĊĠĠĠ Ġ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 ĊĊĠĠĠĠĠ Ġhttp :// 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 . spl endo . kal uga . bluetooth Ċ Ċ import Ġcom . spl endo . kal uga . base . utils . first Instance Ċ import Ġcom . spl endo . kal uga . bluetooth . device . Device Action Ċ import Ġcom . spl endo . kal uga . bluetooth . device . Device State Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertFalse Ċ import Ġkotlin . test . assertIs Ċ import Ġkotlin . test . assertNotNull Ċ import Ġkotlin . test . assertNull Ċ import Ġkotlin . test . assertTrue Ċ import Ġkotlin . test . fail Ċ Ċ class ĠBluetooth Characteristic Notification Test Ġ: ĠBluetooth Flow Test < Device State >() Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġflow Ġ= Ġsuspend Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup ( Setup . CHARACTER ISTIC ) ĊĠĠĠĠĠĠĠ Ġconnection Manager . will Action Suc ceed . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġdevice ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Enable Notification () Ġ= Ġtest With Flow Ġ{ ĊĠĠĠĠĠĠĠ Ġconnect () ĊĠĠĠĠĠĠĠ Ġdiscover () ĊĠĠĠĠĠĠĠ Ġenable Notifications () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Enable Notification When Already Enabled () Ġ= Ġtest With Flow Ġ{ ĊĠĠĠĠĠĠĠ Ġconnect () ĊĠĠĠĠĠĠĠ Ġdiscover () ĊĊĠĠĠĠĠĠĠ Ġenable Notifications () ĊĠĠĠĠĠĠĠ Ġval Ġcharacteristic Ġ= Ġcharacteristic ĊĠĠĠĠĠĠĠ Ġaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( character istic . enable Notification ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( character istic . is Notify ing ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Disable Notification () Ġ= Ġtest With Flow Ġ{ ĊĠĠĠĠĠĠĠ Ġconnect () ĊĠĠĠĠĠĠĠ Ġdiscover () ĊĊĠĠĠĠĠĠĠ Ġval Ġcharacteristic Ġ= Ġenable Notifications () ĊĠĠĠĠĠĠĠ Ġaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic . disable Notification () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġhandled Action Ġ= Ġconnection Manager . handled Action ĊĠĠĠĠĠĠĠ Ġtest Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Is < Device State . Connected . Handling Action >( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( handled Action . first Instance < Device Action . Notification . Disable >()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( character istic . is Notify ing ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtest Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Is < Device State . Connected . Idle >( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Failed To Enable Notification () Ġ= Ġtest With Flow Ġ{ ĊĠĠĠĠĠĠĠ Ġconnect () ĊĠĠĠĠĠĠĠ Ġdiscover () ĊĊĠĠĠĠĠĠĠ Ġval Ġcharacteristic Ġ= Ġcharacteristic ĊĠĠĠĠĠĠĠ ĠassertFalse ( character istic . is Notify ing ) ĊĠĠĠĠĠĠĠ Ġconnection Manager . will Action Suc ceed . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic . enable Notification () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġhandled Action Ġ= Ġconnection Manager . handled Action ĊĠĠĠĠĠĠĠ Ġtest Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= Ġhandled Action . first Instance < Device Action . Notification . Enable >() ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( action ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( action . completed Successfully . await ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( character istic . is Notify ing ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġconnect () Ġ{ ĊĠĠĠĠĠĠĠ Ġaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice . take And Change State Ġ{ Ġdevice State Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" state : Ġ$ device State ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( device State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDevice State . Disconnected Ġ-> Ġdevice State . connect ( device State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfail ("$ device State Ġis Ġnot Ġexpected ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġconnect Completed Ġ= Ġconnection Manager . connect Completed . get () ĊĠĠĠĠĠĠĠ Ġtest Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnect Completed . await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Is < Device State . Connecting >( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice . take And Change State Ġ{ Ġdevice State Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( device State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDevice State . Connecting Ġ-> Ġdevice State . did Connect ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġdevice State . remain () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtest Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Is < Device State . Connected . No Services >( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġdiscover () Ġ{ ĊĠĠĠĠĠĠĠ Ġaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice . take And Change State Ġ{ Ġdevice State Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( device State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDevice State . Connected . No Services Ġ-> Ġdevice State . discover Services ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġdevice State . remain () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdiscover Services Completed Ġ= Ġconnection Manager . discover Services Completed . get () ĊĠĠĠĠĠĠĠ Ġtest Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( discover Services Completed . is Completed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Is < Device State . Connected . Discover ing >( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġservices Ġ= ĠlistOf ( service ) ĊĠĠĠĠĠĠĠ Ġaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice . take And Change State Ġ{ Ġdevice State Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( device State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDevice State . Connected . Discover ing Ġ-> Ġdevice State . did Discover Services ( services ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġdevice State . remain () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġservice Ġ= Ġservice ĊĠĠĠĠĠĠĠ Ġtest Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Is < Device State . Connected . Idle >( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( listOf ( service ), Ġit . services ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġenable Notifications (): ĠCharacter istic Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcharacteristic Ġ= Ġcharacteristic ĊĠĠĠĠĠĠĠ ĠassertFalse ( character istic . is Notify ing , Ġ" Notifications Ġalready Ġenabled !") ĊĠĠĠĠĠĠĠ Ġaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic . enable Notification () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġhandled Action Ġ= Ġconnection Manager . handled Action ĊĠĠĠĠĠĠĠ Ġtest Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Is < Device State . Connected . Handling Action >( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( handled Action . first Instance < Device Action . Notification . Enable >()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( character istic . is Notify ing ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtest Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Is < Device State . Connected . Idle >( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcharacteristic ĊĠĠĠ Ġ} Ċ } Ċ