package Ġcom . github . che ap mon . bal ala ika . data . db Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . database . sqlite . SQLite Constraint Exception Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġandroidx . room . Room Ċ import Ġandroidx . test . core . app . Application Provider Ċ import Ġcom . github . che ap mon . bal ala ika . data . db . dictionary . Dictionary Entity Ċ import Ġcom . github . che ap mon . bal ala ika . data . db . lex eme . L exe me Entity Ċ import Ġcom . github . che ap mon . bal ala ika . data . db . lex eme . L exe me With Base Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . test . run Blocking Test Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Assert . assertNull Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ Ċ @ Opt In ( Experimental Cor outines Api :: class ) Ċ internal Ġclass ĠL exe me Entity Test Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdb : ĠApp Database ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġrule : ĠInstant Task Executor Rule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġprivate Ġval Ġdictionary A Ġ= ĠDictionary Entity ( ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġ" dic _ a ", ĊĠĠĠĠĠĠĠ Ġversion Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Dictionary ĠA ", ĊĠĠĠĠĠĠĠ Ġsummary Ġ= Ġ"", ĊĠĠĠĠĠĠĠ Ġauthors Ġ= Ġ"", ĊĠĠĠĠĠĠĠ Ġadditional Info Ġ= Ġ"" ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġle xe me A Ġ= ĠL exe me Entity ( ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġ" lex _ a ", ĊĠĠĠĠĠĠĠ Ġdictionary Id Ġ= Ġ" dic _ a ", ĊĠĠĠĠĠĠĠ Ġform Ġ= Ġ" L exe me ĠA ", ĊĠĠĠĠĠĠĠ Ġbase Id Ġ= Ġnull ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġle xe me B Ġ= ĠL exe me Entity ( ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġ" lex _ b ", ĊĠĠĠĠĠĠĠ Ġdictionary Id Ġ= Ġ" dic _ a ", ĊĠĠĠĠĠĠĠ Ġform Ġ= Ġ" L exe me ĠB ", ĊĠĠĠĠĠĠĠ Ġbase Id Ġ= Ġ" lex _ a " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġcreate Db (): ĠUnit Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠApplication Provider . getApplicationContext < Context >() ĊĠĠĠĠĠĠĠ Ġdb Ġ= ĠRoom . in Memory Database Builder ( context , ĠApp Database :: class . java ). build () ĊĠĠĠĠĠĠĠ Ġdb . di ctionaries (). insert All ( listOf ( dictionary A )) ĊĠĠĠĠĠĠĠ Ġdb . lex e mes (). insert All ( listOf ( lex eme A , Ġle xe me B )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun Ġclose Db () Ġ{ ĊĠĠĠĠĠĠĠ Ġdb . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget L exe mes (): ĠUnit Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . lex e mes (). count () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfind L exe me (): ĠUnit Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠL exe me With Base ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġle xe me Ġ= Ġle xe me B , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Ġ= Ġle xe me A ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . lex e mes (). get L exe me ById ( lex eme B . id ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertNull ( db . lex e mes (). get L exe me ById (" garbage ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinsert L exe me (): ĠUnit Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġle xe me C Ġ= ĠL exe me Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ" lex _ c ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdictionary Id Ġ= Ġ" dic _ a ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġform Ġ= Ġ" L exe me ĠC ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Id Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdb . lex e mes (). insert All ( listOf ( lex eme C )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . lex e mes (). count () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( lex eme A , Ġle xe me B , Ġle xe me C ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . lex e mes (). getAll () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠSQLite Constraint Exception :: class ) ĊĠĠĠ Ġfun Ġfail On Insert (): ĠUnit Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġdb . lex e mes (). insert All ( listOf ( lex eme A )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠSQLite Constraint Exception :: class ) ĊĠĠĠ Ġfun Ġfail On Fault y ForeignKey (): ĠUnit Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfault y L exe me Ġ= ĠL exe me Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ" fault y ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdictionary Id Ġ= Ġ" fault y ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġform Ġ= Ġ" fault y ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Id Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdb . lex e mes (). insert All ( listOf ( fault y L exe me )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠSQLite Constraint Exception :: class ) ĊĠĠĠ Ġfun Ġfail On Fault y Base Id (): ĠUnit Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfault y L exe me Ġ= ĠL exe me Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ" fault y ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdictionary Id Ġ= Ġ" dic _ a ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġform Ġ= Ġ" fault y ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Id Ġ= Ġ" garbage " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdb . lex e mes (). insert All ( listOf ( fault y L exe me )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġremove L exe me (): ĠUnit Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdictionary B Ġ= ĠDictionary Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ" dic _ b ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Dictionary ĠB ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsummary Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthors Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Info Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġle xe me C Ġ= ĠL exe me Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ" lex _ c ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdictionary Id Ġ= Ġ" dic _ b ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġform Ġ= Ġ" L exe me ĠC ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Id Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdb . di ctionaries (). insert All ( listOf ( dictionary B )) ĊĠĠĠĠĠĠĠ Ġdb . lex e mes (). insert All ( listOf ( lex eme C )) ĊĠĠĠĠĠĠĠ Ġdb . lex e mes (). remove In Dictionary ( dictionary A . id ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . lex e mes (). count () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( lex eme C ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . lex e mes (). getAll () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdb . lex e mes (). remove In Dictionary (" garbage ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . lex e mes (). count () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( lex eme C ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . lex e mes (). getAll () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ