package Ġorg . e health in novation . android . bluetooth . parser Ċ Ċ import Ġandroid . bluetooth . Bluetooth GattCharacteristic Ċ import Ġcom . n ha ar man . mockito _ kotlin . do Answer Ċ import Ġcom . n ha ar man . mockito _ kotlin . do Call Real Method Ċ import Ġcom . n ha ar man . mockito _ kotlin . mock Ċ import Ġcom . n ha ar man . mockito _ kotlin . verify Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Test Ċ import Ġorg . mockito . Mockito . any Ċ import Ġkotlin . Exception Ċ Ċ class ĠBluetooth Gatt Data Writer Test Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġcreates Ġa Ġmocked Ġbluetooth g att character istic Ġthat Ġreturns Ġthe Ġpost - offset Ġresult Ġupon Ġset value ĊĠĠĠĠ Ġ* Ġassert s Ġthat Ġthe Ġrequested Ġformat Ġmatches Ġthe Ġspecified Ġformat . ĊĠĠĠĠ Ġ* Ġassert s Ġthat Ġthe Ġoffset Ġmatches Ġthe Ġaccumulated Ġoffset Ġof Ġprevious Ġcalls Ġwith Ġthe Ġspecified Ġformat Ġlength . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmock Gatt ( var arg Ġformat Results : ĠPair < Int Format , ĠBoolean >): ĠBluetooth GattCharacteristic Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġoffset Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmock Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Ġ{ ĠsetValue ( any ( Int :: class . java ), Ġany ( Int :: class . java ), Ġany ( Int :: class . java )) Ġ} Ġdo Answer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġformat Ġ= Ġformat Results [ index ]. first ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġformat Results [ index ]. second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( format . format Code , Ġit . get Argument ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( offset , Ġit . get Argument ( 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ+= Ġformat . length Bytes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ++ index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġcreates Ġa Ġmocked Ġbluetooth g att character istic Ġthat Ġreturns Ġthe Ġpost - offset Ġresult Ġupon Ġset value ĊĠĠĠĠ Ġ* Ġassert s Ġthat Ġthe Ġrequested Ġformat Ġmatches Ġthe Ġspecified Ġformat . ĊĠĠĠĠ Ġ* Ġassert s Ġthat Ġthe Ġoffset Ġmatches Ġthe Ġaccumulated Ġoffset Ġof Ġprevious Ġcalls Ġwith Ġthe Ġspecified Ġformat Ġlength . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmock Float Gatt ( var arg Ġformat Results : ĠPair < Float Format , ĠBoolean >): ĠBluetooth GattCharacteristic Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġoffset Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmock Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Ġ{ ĠsetValue ( any ( Int :: class . java ), Ġany ( Int :: class . java ), Ġany ( Int :: class . java ), Ġany ( Int :: class . java )) Ġ} Ġdo Answer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġformat Ġ= Ġformat Results [ index ]. first ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġformat Results [ index ]. second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( format . format Code , Ġit . get Argument ( 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( offset , Ġit . get Argument ( 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ+= Ġformat . length Bytes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ++ index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġcreates Ġa Ġmocked Ġbluetooth g att character istic Ġthat Ġreturns Ġthe Ġpost - offset Ġresult Ġupon Ġset value ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmock String Gatt ( output : ĠBoolean ): ĠBluetooth GattCharacteristic Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġoffset Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġreturn Ġmock Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Ġ{ ĠsetValue ( any ( String :: class . java )) Ġ} Ġdo Answer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġput Int () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Gatt Ġ= Ġmock Gatt ( Pair ( Int Format . FORMAT _ UINT 8 , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Int Format . FORMAT _ UINT 1 6 , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Int Format . FORMAT _ UINT 3 2 , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Int Format . FORMAT _ S INT 8 , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Int Format . FORMAT _ S INT 1 6 , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Int Format . FORMAT _ S INT 3 2 , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠBluetooth Gatt Data Writer ( mock Gatt ) ĊĊĠĠĠĠĠĠĠ Ġwriter . put Int ( 0 x 1 2 , ĠInt Format . FORMAT _ UINT 8 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġwriter . offset ) ĊĠĠĠĠĠĠĠ Ġverify ( mock Gatt ). setValue ( 0 x 1 2 , ĠInt Format . FORMAT _ UINT 8 . format Code , Ġ 0 ) ĊĊĊĠĠĠĠĠĠĠ Ġwriter . put Int ( 0 x 3 4 , ĠInt Format . FORMAT _ UINT 1 6 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 Ġ+ Ġ 2 , Ġwriter . offset ) ĊĠĠĠĠĠĠĠ Ġverify ( mock Gatt ). setValue ( 0 x 3 4 , ĠInt Format . FORMAT _ UINT 1 6 . format Code , Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġwriter . put Int ( 0 x 5 6 , ĠInt Format . FORMAT _ UINT 3 2 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 Ġ+ Ġ 2 Ġ+ Ġ 4 , Ġwriter . offset ) ĊĠĠĠĠĠĠĠ Ġverify ( mock Gatt ). setValue ( 0 x 5 6 , ĠInt Format . FORMAT _ UINT 3 2 . format Code , Ġ 3 ) ĊĊĠĠĠĠĠĠĠ Ġwriter . put Int (- 1 , ĠInt Format . FORMAT _ S INT 8 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 Ġ+ Ġ 2 Ġ+ Ġ 4 Ġ+ Ġ 1 , Ġwriter . offset ) ĊĠĠĠĠĠĠĠ Ġverify ( mock Gatt ). setValue (- 1 , ĠInt Format . FORMAT _ S INT 8 . format Code , Ġ 1 Ġ+ Ġ 2 Ġ+ Ġ 4 ) ĊĊĠĠĠĠĠĠĠ Ġwriter . put Int (- 3 , ĠInt Format . FORMAT _ S INT 1 6 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 Ġ+ Ġ 2 Ġ+ Ġ 4 Ġ+ Ġ 1 Ġ+ Ġ 2 , Ġwriter . offset ) ĊĠĠĠĠĠĠĠ Ġverify ( mock Gatt ). setValue (- 3 , ĠInt Format . FORMAT _ S INT 1 6 . format Code , Ġ 1 Ġ+ Ġ 2 Ġ+ Ġ 4 Ġ+ Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġwriter . put Int (- 5 , ĠInt Format . FORMAT _ S INT 3 2 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 Ġ+ Ġ 2 Ġ+ Ġ 4 Ġ+ Ġ 1 Ġ+ Ġ 2 Ġ+ Ġ 4 , Ġwriter . offset ) ĊĠĠĠĠĠĠĠ Ġverify ( mock Gatt ). setValue (- 5 , ĠInt Format . FORMAT _ S INT 3 2 . format Code , Ġ 1 Ġ+ Ġ 2 Ġ+ Ġ 4 Ġ+ Ġ 1 Ġ+ Ġ 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTest Ġif Ġan Ġout Ġof Ġrange Ġinteger Ġinput Ġis Ġcaught ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test Ġ( expected Ġ= ĠException :: class ) ĊĠĠĠ Ġfun Ġput Int 2 (){ ĊĠĠĠĠĠĠĠ Ġval Ġmock Gatt Ġ= Ġmock Gatt ( Pair ( Int Format . FORMAT _ UINT 8 , Ġtrue )) ĊĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠBluetooth Gatt Data Writer ( mock Gatt ) ĊĊĠĠĠĠĠĠĠ Ġwriter . put Int (( Int Format . FORMAT _ UINT 8 . max Value + 1 ). toInt (), ĠInt Format . FORMAT _ UINT 8 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠNegative Ġcase Ġwhen Ġcalling Ġthe ĠsetValue Ġfunction Ġreturns Ġfalse ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ( expected Ġ= ĠRuntimeException :: class ) ĊĠĠĠ Ġfun Ġtest Put Int Failed Case () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Gatt Ġ= Ġmock Gatt ( Pair ( Int Format . FORMAT _ UINT 8 , Ġfalse )) ĊĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠBluetooth Gatt Data Writer ( mock Gatt ) ĊĊĠĠĠĠĠĠĠ Ġwriter . put Int ( 0 x 1 2 , ĠInt Format . FORMAT _ UINT 8 ) ĊĠĠĠĠĠĠĠ Ġverify ( mock Gatt ). setValue ( 0 x 1 2 , ĠInt Format . FORMAT _ S INT 3 2 . format Code , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġput Float () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Gatt Ġ= Ġmock Float Gatt ( Pair ( Float Format . FORMAT _ S FLOAT , Ġtrue ), ĠPair ( Float Format . FORMAT _ FLOAT , Ġtrue )) ĊĊĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠBluetooth Gatt Data Writer ( mock Gatt ) ĊĊĠĠĠĠĠĠĠ Ġwriter . put Float ( 1 . 2 f , Ġ- 1 , ĠFloat Format . FORMAT _ S FLOAT ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġwriter . offset ) ĊĠĠĠĠĠĠĠ Ġverify ( mock Gatt ). setValue ( 1 2 , Ġ- 1 , ĠFloat Format . FORMAT _ S FLOAT . format Code , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġwriter . put Float ( 1 . 2 f , Ġ- 2 , ĠFloat Format . FORMAT _ FLOAT ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 Ġ+ Ġ 4 , Ġwriter . offset ) ĊĠĠĠĠĠĠĠ Ġverify ( mock Gatt ). setValue ( 1 2 0 , Ġ- 2 , ĠFloat Format . FORMAT _ FLOAT . format Code , Ġ 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠNegative Ġcase Ġwhen Ġcalling Ġthe ĠsetValue Ġfunction Ġreturns Ġfalse ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ( expected Ġ= ĠRuntimeException :: class ) ĊĠĠĠ Ġfun Ġtest Put Float Failed Case () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Gatt Ġ= Ġmock Float Gatt ( Pair ( Float Format . FORMAT _ S FLOAT , Ġfalse )) ĊĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠBluetooth Gatt Data Writer ( mock Gatt ) ĊĠĠĠĠĠĠĠ Ġwriter . put Float ( 1 . 2 f , Ġ- 1 , ĠFloat Format . FORMAT _ S FLOAT ) ĊĠĠĠĠĠĠĠ Ġverify ( mock Gatt ). setValue ( 1 2 , Ġ- 1 , ĠFloat Format . FORMAT _ S FLOAT . format Code , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġput String () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Gatt Ġ= Ġmock String Gatt ( true ) ĊĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠBluetooth Gatt Data Writer ( mock Gatt ) ĊĊĠĠĠĠĠĠĠ Ġwriter . putString (" JK SL W Ġtested ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 3 , Ġwriter . offset ) ĊĠĠĠĠĠĠĠ Ġverify ( mock Gatt ). setValue (" JK SL W Ġtested ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠNegative Ġcase Ġwhen Ġcalling Ġthe ĠsetValue Ġfunction Ġreturns Ġfalse ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ( expected Ġ= ĠRuntimeException :: class ) ĊĠĠĠ Ġfun Ġtest Put String Failed Case () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Gatt Ġ= Ġmock String Gatt ( false ) ĊĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠBluetooth Gatt Data Writer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock Gatt ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġwriter . putString (" I Ġnever Ġget Ġwritten ") ĊĠĠĠĠĠĠĠ Ġverify ( mock Gatt ). setValue (" I Ġnever Ġget Ġwritten ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Int IsValid (){ ĊĠĠĠĠĠĠĠ Ġval Ġmock Gatt Ġ= Ġmock String Gatt ( false ) ĊĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠBluetooth Gatt Data Writer ( mock Gatt ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( format Ġin ĠInt Format . values ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Data Ġ: ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( format Ġ== ĠInt Format . FORMAT _ S INT 3 2 Ġ|| Ġformat Ġ== ĠInt Format . FORMAT _ UINT 3 2 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// this Ġis Ġthe Ġmax Ġvalue Ġcan Ġbe Ġheld Ġby Ġan Ġjava Ġsigned Ġinteger ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Data Ġ= ĠInt . MAX _ VALUE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( true , Ġwriter . int IsValid ( input Data , Ġformat )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Data Ġ= Ġ( format . max Value + 1 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( false , Ġwriter . int IsValid ( input Data , Ġformat )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfind M antis sa () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Test Ġcases Ġare Ġtri pple Ġof Ġthe Ġfollowing Ġformat Ġ( value Ġin Ġfloat , Ġexponent , Ġexpected Ġoutput Ġof Ġthe Ġfunction ) ĊĠĠĠĠĠĠĠ Ġval Ġtest Cases : ĠList < Triple < Float , ĠInt , ĠInt >> Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrip le ( 5 . 3 f , Ġ- 1 , Ġ 5 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrip le ( 5 . 3 f , Ġ- 2 , Ġ 5 3 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrip le ( 5 . 3 f , Ġ 0 , Ġ 5 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrip le ( 5 . 3 f , Ġ 1 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( testcase Ġin Ġtest Cases ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( testcase . third , Ġfind M antis sa ( testcase . first , Ġtest case . second )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĊ Ċ }