package Ġaudio . r ab id . k addi Ċ Ċ import Ġaudio . r ab id . k addi . Example . AL og ger Endpoint Ċ import Ġaudio . r ab id . k addi . Example . Activity 1 Ċ import Ġaudio . r ab id . k addi . Example . Activity 1 ViewModel Ċ import Ġaudio . r ab id . k addi . Example . Activity 2 Ċ import Ġaudio . r ab id . k addi . Example . Activity 2 ViewModel Ċ import Ġaudio . r ab id . k addi . Example . App Module Ċ import Ġaudio . r ab id . k addi . Example . Application Ċ import Ġaudio . r ab id . k addi . Example . Database Ċ import Ġaudio . r ab id . k addi . Example . Fragment Ċ import Ġaudio . r ab id . k addi . Example . Fragment ViewModel Ċ import Ġaudio . r ab id . k addi . Example . ID atabase Ċ import Ġaudio . r ab id . k addi . Example . Logger Ċ import Ġaudio . r ab id . k addi . Example . Logger Endpoint Ċ import Ġaudio . r ab id . k addi . dsl . bind Ċ import Ġaudio . r ab id . k addi . dsl . module Ċ import Ġaudio . r ab id . k addi . dsl . to Instance Ċ import Ġcom . w inter be . ex pe kt . expect Ċ import Ġorg . spe k framework . spe k 2 . Spe k Ċ import Ġorg . spe k framework . spe k 2 . style . specification . describe Ċ Ċ class ĠIntegration Spec Ġ: ĠSpe k ({ ĊĊĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠ ĠK addi . Root Scope . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdescribe (" Everything Ġin Ġroot Ġscope ") Ġ{ ĊĊĠĠĠĠĠĠĠ Ġit (" should Ġallow Ġmodules Ġto Ġbe Ġadded Ġon Ġthe Ġfly ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠK addi . Root Scope . add Modules ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Module , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodule (" Inline ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind < Int >( 0 ). to Instance ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( K addi . Root Scope . instance < Int >( 0 )). to . equal ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlogger 1 Ġ= ĠK addi . Root Scope . instance < Logger >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( logger 1 ). to . be . an . instance of ( Logger :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlogger 2 Ġ= ĠK addi . Root Scope . instance < Logger >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( logger 2 ). to . be . an . instance of ( Logger :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( logger 2 ). not . to . equal ( logger 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdatabase 1 Ġ= ĠK addi . Root Scope . instance < ID atabase >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( database 1 ). to . be . an . instance of ( Database :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdatabase 2 Ġ= ĠK addi . Root Scope . instance < ID atabase >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( database 2 ). to . be . an . instance of ( Database :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( database 2 ). to . equal ( database 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlogger Endpoints Ġ= ĠK addi . Root Scope . set Instance < Logger Endpoint >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( logger Endpoints . size ). to . equal ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( logger Endpoints . first ()). to . be . an . instance of ( AL og ger Endpoint :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBecause Ġthe Ġset Ġbinding Ġentry Ġfor ĠA Logger Endpoint Ġis Ġnot Ġa Ġsingleton , ĠLogger Ġshould Ġhave Ġgotten ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġa Ġdifferent Ġset Ġthan Ġwe Ġjust Ġdid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( logger Endpoints . first ()). not . to . equal ( logger 1 . endpoints . first ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠK addi . Root Scope . add Modules ( module (" Inline 2 ") Ġ{ Ġbind < String >(" foo "). to Instance (" bar ") Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( K addi . Root Scope . instance < String >(" foo ")). to . equal (" bar ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( K addi . Root Scope . instance < Int >( 0 )). to . equal ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdescribe (" Dummy Ġscoped ĠApplication ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġapplication Ġby Ġmemoized Ġ{ ĠApplication () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġactivity 1 Ġby Ġmemoized Ġ{ ĠActivity 1 ( application ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfragment 1 Ġby Ġmemoized Ġ{ ĠFragment () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġactivity 2 Ġby Ġmemoized Ġ{ ĠActivity 2 ( application ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfragment 2 Ġby Ġmemoized Ġ{ ĠFragment () Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" should Ġallow Ġthe Ġcreation Ġof Ġchild Ġscopes ") Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġapplication . on Application Create () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapp Scope Ġ= ĠK addi . get Scope ( application ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( app Scope . instance < Logger > ()). to . be . an . instance of ( Logger :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( app Scope . instance < String >(" AppName ")). to . equal (" My App ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect To Throw < IllegalStateException > Ġ{ Ġapp Scope . instance < Activity 1 ViewModel >() Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect To Throw < IllegalStateException > Ġ{ ĠK addi . Root Scope . instance < Logger >() Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity 1 . onCreate () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( activity 1 . logger ). to . be . an . instance of ( Logger :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( activity 1 . viewModel ). to . be . an . instance of ( Activity 1 ViewModel :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( activity 1 . viewModel . appName ). to . equal (" My App ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( activity 1 . viewModel . database ). to . be . an . instance of ( Database :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( activity 1 . viewModel . database ). to . satisf y Ġ{ Ġit Ġ=== Ġapp Scope . instance < ID atabase >() Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment 1 . on Attach ( activity 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( fragment 1 . viewModel ). to . be . an . instance of ( Fragment ViewModel :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( K addi . get Scope ( fragment 1 ). instance < Activity 1 ViewModel > ()). to . satisf y Ġ{ Ġit Ġ=== Ġactivity 1 . viewModel Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect To Throw < IllegalStateException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK addi . get Scope ( activity 1 ). instance < Fragment ViewModel >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( K addi . get Scope ( fragment 1 ). instance < Fragment ViewModel > ()). to . equal ( fragment 1 . viewModel ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity 2 . onCreate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment 2 . on Attach ( activity 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( activity 2 . viewModel ). to . be . an . instance of ( Activity 2 ViewModel :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( fragment 2 . viewModel ). to . be . an . instance of ( Fragment ViewModel :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( fragment 2 . viewModel ). not . to . equal ( fragment 1 . viewModel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( fragment 1 . viewModel . logger ). not . to . satisf y Ġ{ Ġit Ġ=== Ġactivity 1 . logger Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment 1 . on Detach () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect To Throw < IllegalStateException > Ġ{ ĠK addi . get Scope ( fragment 1 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( K addi . get Scope ( activity 1 ). instance < Activity 1 ViewModel > ()). to . equal ( activity 1 . viewModel ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment 2 . on Detach () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity 2 . on Destroy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity 1 . on Destroy () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect To Throw < IllegalStateException > Ġ{ ĠK addi . get Scope ( fragment 2 ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdatabase Ġ= Ġapp Scope . instance < ID atabase >() Ġas ĠDatabase ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( database . is Closed ). to . be .` false ` ĊĠĠĠĠĠĠĠĠĠĠĠ ĠK addi . get Scope ( application ). close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( database . is Closed ). to . be .` true ` ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }) Ċ