/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠX iz hi ĠZ hu Ċ Ġ* Ċ Ġ* Ġ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 Ġme . x iz zh u . android . ask . db Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . database . Cursor Index OutOfBoundsException Ċ import Ġandroid . database . sqlite . SQLite Database Ċ import Ġandroid . database . sqlite . SQLite Open Helper Ċ import Ġandroidx . test . core . app . Application Provider Ċ import Ġkotlinx . coroutines . flow . collect Indexed Ċ import Ġkotlinx . coroutines . test . run Blocking Test Ċ import Ġme . x iz zh u . android . ask . tests . Base UnitTest Ċ import Ġme . x iz zh u . android . ask . tests . assert List Equals Ċ import Ġme . x iz zh u . android . ask . tests . assert Map Equals Ċ import Ġorg . junit . Assert . assertArrayEquals Ċ import Ġkotlin . test .* Ċ Ċ class ĠCursor Test Ġ: ĠBase UnitTest () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDB _ NAME Ġ= Ġ" db " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTABLE _ NAME Ġ= Ġ" test Table " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOLUMN _ BLOB Ġ= Ġ" blob Column " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOLUMN _ FLOAT Ġ= Ġ" float Column " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOLUMN _ INTEGER Ġ= Ġ" integer Column " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOLUMN _ STRING Ġ= Ġ" string Column " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠDatabase Open Helper Ġ: ĠSQLite Open Helper ( Application Provider . getApplicationContext (), ĠDB _ NAME , Ġnull , Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ( db : ĠSQLite Database ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . exec SQL (" CREATE ĠTABLE Ġ$ TABLE _ NAME Ġ($ COLUMN _ BLOB ĠBLOB , Ġ$ COLUMN _ FLOAT ĠREAL , Ġ$ COLUMN _ INTEGER ĠINTEGER , Ġ$ COLUMN _ STRING ĠTEXT ); ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Upgrade ( db : ĠSQLite Database , Ġold Version : ĠInt , Ġnew Version : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdatabase : ĠSQLite Database ĊĊĠĠĠ Ġ@ Before Test ĊĠĠĠ Ġoverride Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . setup () ĊĠĠĠĠĠĠĠ ĠApplication Provider . getApplicationContext < Context >(). delete Database ( DB _ NAME ) ĊĠĠĠĠĠĠĠ Ġdatabase Ġ= ĠDatabase Open Helper (). writable Database ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After Test ĊĠĠĠ Ġoverride Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase . close () ĊĠĠĠĠĠĠĠ ĠApplication Provider . getApplicationContext < Context >(). delete Database ( DB _ NAME ) ĊĠĠĠĠĠĠĠ Ġsuper . te ar Down () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Cursor Get ters () Ġ{ ĊĠĠĠĠĠĠĠ Ġprepare Database () ĊĊĠĠĠĠĠĠĠ Ġdatabase . select ( TABLE _ NAME ). limit ( 1 L ). as Cursor (). use Ġ{ Ġcursor Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . moveTo First () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Cursor . FIELD _ TYPE _ BLOB , Ġcursor . getType ( COLUMN _ BLOB )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Cursor . FIELD _ TYPE _ FLOAT , Ġcursor . getType ( COLUMN _ FLOAT )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Cursor . FIELD _ TYPE _ INTEGER , Ġcursor . getType ( COLUMN _ INTEGER )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Cursor . FIELD _ TYPE _ STRING , Ġcursor . getType ( COLUMN _ STRING )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ArrayEquals ( byte ArrayOf ( 1 , Ġ 2 , Ġ 3 ), Ġcursor . get Blob ( COLUMN _ BLOB )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 4 . 5 6 , Ġcursor . getDouble ( COLUMN _ FLOAT )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 4 . 5 6 F , Ġcursor . get Float ( COLUMN _ FLOAT )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 7 8 9 , Ġcursor . getInt ( COLUMN _ INTEGER )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 7 8 9 L , Ġcursor . getLong ( COLUMN _ INTEGER )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 7 8 9 , Ġcursor . get Short ( COLUMN _ INTEGER )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" string ", Ġcursor . getString ( COLUMN _ STRING )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Map Get ters () Ġ{ ĊĠĠĠĠĠĠĠ Ġprepare Database () ĊĊĠĠĠĠĠĠĠ Ġdatabase . select ( TABLE _ NAME ). limit ( 1 L ). forEach Ġ{ Ġrow Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ArrayEquals ( byte ArrayOf ( 1 , Ġ 2 , Ġ 3 ), Ġrow . get Blob ( COLUMN _ BLOB )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Fails With ( NoSuch ElementException :: class ) Ġ{ Ġrow . get Blob (" non _ exist ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Fails With ( NoSuch ElementException :: class ) Ġ{ Ġrow . get Blob ( COLUMN _ FLOAT ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 4 . 5 6 , Ġrow . getDouble ( COLUMN _ FLOAT )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Fails With ( NoSuch ElementException :: class ) Ġ{ Ġrow . getDouble (" non _ exist ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Fails With ( NoSuch ElementException :: class ) Ġ{ Ġrow . getDouble ( COLUMN _ BLOB ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 4 . 5 6 F , Ġrow . get Float ( COLUMN _ FLOAT )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Fails With ( NoSuch ElementException :: class ) Ġ{ Ġrow . get Float (" non _ exist ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Fails With ( NoSuch ElementException :: class ) Ġ{ Ġrow . get Float ( COLUMN _ BLOB ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 7 8 9 , Ġrow . getInt ( COLUMN _ INTEGER )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Fails With ( NoSuch ElementException :: class ) Ġ{ Ġrow . getInt (" non _ exist ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Fails With ( NoSuch ElementException :: class ) Ġ{ Ġrow . getInt ( COLUMN _ BLOB ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 7 8 9 L , Ġrow . getLong ( COLUMN _ INTEGER )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Fails With ( NoSuch ElementException :: class ) Ġ{ Ġrow . getLong (" non _ exist ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Fails With ( NoSuch ElementException :: class ) Ġ{ Ġrow . getLong ( COLUMN _ BLOB ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 7 8 9 , Ġrow . get Short ( COLUMN _ INTEGER )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Fails With ( NoSuch ElementException :: class ) Ġ{ Ġrow . get Short (" non _ exist ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Fails With ( NoSuch ElementException :: class ) Ġ{ Ġrow . get Short ( COLUMN _ BLOB ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" string ", Ġrow . getString ( COLUMN _ STRING )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Fails With ( NoSuch ElementException :: class ) Ġ{ Ġrow . getString (" non _ exist ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Fails With ( NoSuch ElementException :: class ) Ġ{ Ġrow . getString ( COLUMN _ BLOB ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprepare Database () Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase . insert ( TABLE _ NAME ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit [ COLUMN _ BLOB ] Ġ= Ġbyte ArrayOf ( 1 , Ġ 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit [ COLUMN _ FLOAT ] Ġ= Ġ 4 . 5 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit [ COLUMN _ INTEGER ] Ġ= Ġ 7 8 9 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit [ COLUMN _ STRING ] Ġ= Ġ" string " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdatabase . insert ( TABLE _ NAME ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit [ COLUMN _ BLOB ] Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit [ COLUMN _ FLOAT ] Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit [ COLUMN _ INTEGER ] Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit [ COLUMN _ STRING ] Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest As Iterable () Ġ{ ĊĠĠĠĠĠĠĠ Ġprepare Database () ĊĠĠĠĠĠĠĠ Ġquery All (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġit . count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . as Iterable (). forEach Indexed Ġ{ Ġindex , Ġrow Ġ-> ĠassertEquals ( index , Ġrow ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġquery All () Ġ= Ġdatabase . raw Query (" SELECT Ġ* Ġfrom Ġ$ TABLE _ NAME ;", Ġnull ) ĊĊĠĠĠ Ġprivate Ġfun ĠassertEquals ( index : ĠInt , Ġrow : ĠMap < String , ĠAny ?> ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Map Equals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( COLUMN _ BLOB , Ġbyte ArrayOf ( 1 , Ġ 2 , Ġ 3 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( COLUMN _ FLOAT , Ġ 4 . 5 6 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( COLUMN _ INTEGER , Ġ 7 8 9 L ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( COLUMN _ STRING , Ġ" string ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Map Equals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( COLUMN _ BLOB , Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( COLUMN _ FLOAT , Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( COLUMN _ INTEGER , Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( COLUMN _ STRING , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfail () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest As Sequence () Ġ{ ĊĠĠĠĠĠĠĠ Ġprepare Database () ĊĠĠĠĠĠĠĠ Ġquery All (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġit . count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . as Sequence (). forEach Indexed Ġ{ Ġindex , Ġrow Ġ-> ĠassertEquals ( index , Ġrow ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest As Flow () Ġ= Ġtest Dispatcher . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġprepare Database () ĊĠĠĠĠĠĠĠ Ġquery All (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġit . count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . as Flow (). collect Indexed Ġ{ Ġindex , Ġrow Ġ-> ĠassertEquals ( index , Ġrow ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest ForEach () Ġ{ ĊĠĠĠĠĠĠĠ Ġprepare Database () ĊĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġquery All (). forEach Ġ{ Ġrow Ġ-> ĠassertEquals ( index ++, Ġrow ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest ForEach Indexed () Ġ{ ĊĠĠĠĠĠĠĠ Ġprepare Database () ĊĠĠĠĠĠĠĠ Ġquery All (). forEach Indexed Ġ{ Ġindex , Ġrow Ġ-> ĠassertEquals ( index , Ġrow ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest ToList () Ġ{ ĊĠĠĠĠĠĠĠ Ġprepare Database () ĊĊĠĠĠĠĠĠĠ Ġassert List Equals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( COLUMN _ BLOB , Ġbyte ArrayOf ( 1 , Ġ 2 , Ġ 3 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( COLUMN _ FLOAT , Ġ 4 . 5 6 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( COLUMN _ INTEGER , Ġ 7 8 9 L ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( COLUMN _ STRING , Ġ" string ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( COLUMN _ BLOB , Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( COLUMN _ FLOAT , Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( COLUMN _ INTEGER , Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( COLUMN _ STRING , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery All (). toList () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġassert List Equals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" string " Ġto Ġ 7 8 9 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġto Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery All (). toList Ġ{ Ġ( it [ COLUMN _ STRING ] Ġas ĠString ?) Ġto Ġ( it [ COLUMN _ INTEGER ] Ġas ĠLong ?) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest ToList Indexed () Ġ{ ĊĠĠĠĠĠĠĠ Ġprepare Database () ĊĊĠĠĠĠĠĠĠ Ġassert List Equals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġto Ġ 7 8 9 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġto Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery All (). toList Indexed Ġ{ Ġindex , Ġrow Ġ-> Ġindex Ġto Ġ( row [ COLUMN _ INTEGER ] Ġas ĠLong ?) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest First () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Fails With ( Cursor Index OutOfBoundsException :: class ) Ġ{ Ġquery All (). first () Ġ} ĊĊĠĠĠĠĠĠĠ Ġprepare Database () ĊĊĠĠĠĠĠĠĠ Ġassert Map Equals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( COLUMN _ BLOB , Ġbyte ArrayOf ( 1 , Ġ 2 , Ġ 3 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( COLUMN _ FLOAT , Ġ 4 . 5 6 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( COLUMN _ INTEGER , Ġ 7 8 9 L ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( COLUMN _ STRING , Ġ" string ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery All (). first () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" string " Ġto Ġ 7 8 9 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery All (). first Ġ{ Ġ( it [ COLUMN _ STRING ] Ġas ĠString ) Ġto Ġ( it [ COLUMN _ INTEGER ] Ġas ĠLong ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest FirstOrDefault () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertTrue ( query All (). first OrDefault ( empty Map ()). isEmpty ()) ĊĠĠĠĠĠĠĠ ĠassertTrue ( query All (). first OrDefault Ġ{ Ġempty Map () Ġ}. isEmpty ()) ĊĊĠĠĠĠĠĠĠ Ġprepare Database () ĊĊĠĠĠĠĠĠĠ Ġassert Map Equals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( COLUMN _ BLOB , Ġbyte ArrayOf ( 1 , Ġ 2 , Ġ 3 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( COLUMN _ FLOAT , Ġ 4 . 5 6 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( COLUMN _ INTEGER , Ġ 7 8 9 L ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( COLUMN _ STRING , Ġ" string ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery All (). first OrDefault ( empty Map ()) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" string " Ġto Ġ 7 8 9 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery All (). first OrDefault ("" Ġto Ġ 0 L ) Ġ{ Ġ( it [ COLUMN _ STRING ] Ġas ĠString ) Ġto Ġ( it [ COLUMN _ INTEGER ] Ġas ĠLong ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġassert Map Equals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( COLUMN _ BLOB , Ġbyte ArrayOf ( 1 , Ġ 2 , Ġ 3 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( COLUMN _ FLOAT , Ġ 4 . 5 6 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( COLUMN _ INTEGER , Ġ 7 8 9 L ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( COLUMN _ STRING , Ġ" string ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery All (). first OrDefault Ġ{ Ġempty Map () Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" string " Ġto Ġ 7 8 9 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery All (). first OrDefault ({ Ġ"" Ġto Ġ 0 L Ġ}) Ġ{ Ġ( it [ COLUMN _ STRING ] Ġas ĠString ) Ġto Ġ( it [ COLUMN _ INTEGER ] Ġas ĠLong ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ