package Ġorg . jl le its ch uh . gu ice Ċ Ċ import Ġcom . google . inject . Abstract Module Ċ import Ġcom . google . inject . Creation Exception Ċ import Ġcom . google . inject . Gu ice Ċ import Ġcom . nat pr y ce . ham k rest . and Ċ import Ġcom . nat pr y ce . ham k rest . assertion . assertThat Ċ import Ġcom . nat pr y ce . ham k rest . contains Substring Ċ import Ġorg . junit . jupiter . api . Assertions . assertNot Same Ċ import Ġorg . junit . jupiter . api . Assertions . assertSame Ċ import Ġorg . junit . jupiter . api . Assertions . assertTrue Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . assert Throws Ċ Ċ class ĠModule Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` simple Ġmodule `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsimple Module Ġ= Ġmodule Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind ( key < Interface > ()). to ( key < Implementation >()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġinjector Ġ= ĠGu ice . create Injector ( simple Module ) ĊĠĠĠĠĠĠĠ Ġval Ġthe Interface Ġ= Ġinjector . getInstance ( key < Interface >()) ĊĠĠĠĠĠĠĠ ĠassertTrue ( the Interface Ġis ĠImplementation ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` simple Ġmodule Ġre ified Ġbinding Ġmethods `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsimple Module Ġ= Ġmodule Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind < Interface >(). to < Implementation >() ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġinjector Ġ= ĠGu ice . create Injector ( simple Module ) ĊĠĠĠĠĠĠĠ Ġval Ġthe Interface Ġ= Ġinjector . getInstance ( key < Interface >()) ĊĠĠĠĠĠĠĠ ĠassertTrue ( the Interface Ġis ĠImplementation ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` module Ġnot Ġusing Ġkey `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsimple Module Ġ= Ġmodule Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind ( Interface :: class ). to ( Implementation :: class ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġinjector Ġ= ĠGu ice . create Injector ( simple Module ) ĊĠĠĠĠĠĠĠ Ġval Ġthe Interface Ġ= Ġinjector . getInstance ( key < Interface >()) ĊĠĠĠĠĠĠĠ ĠassertTrue ( the Interface Ġis ĠImplementation ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` module Ġusing Ġinstance `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinstance Ġ= ĠImplementation () ĊĠĠĠĠĠĠĠ Ġval Ġsimple Module Ġ= Ġmodule Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind ( Interface :: class ). to Instance ( instance ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġinjector Ġ= ĠGu ice . create Injector ( simple Module ) ĊĠĠĠĠĠĠĠ Ġval Ġthe Interface Ġ= Ġinjector . getInstance ( key < Interface >()) ĊĠĠĠĠĠĠĠ ĠassertSame ( instance , Ġthe Interface ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` comp licated Ġmodule `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcomplicated Ġ= Ġobject Ġ: ĠAbstract Module () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconfigure () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind ( key < Interface > ()). to ( key < Implementation >()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġinjector Ġ= ĠGu ice . create Injector ( comp licated ) ĊĠĠĠĠĠĠĠ Ġinjector . getInstance ( key < Interface >()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` module Ġbinding Ġto Ġprovider Ġusing Ġre ified Ġmethods `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmodule Ġ= Ġmodule Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind < Interface >(). to Provider < Interface Provider >() ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġinjector Ġ= ĠGu ice . create Injector ( module ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfirst Ġ= Ġinjector . getInstance ( key < Interface >()) ĊĠĠĠĠĠĠĠ Ġval Ġsecond Ġ= Ġinjector . getInstance ( key < Interface >()) ĊĠĠĠĠĠĠĠ Ġassert Not Same ( first , Ġsecond ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` module Ġbinding Ġexceptions Ġprovide Ġmeaningful Ġexceptions `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmodule Ġ= Ġmodule Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind < Interface >(). to Provider < Interface Provider >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind < Interface >(). to Provider < Interface Provider 2 >() ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < Creation Exception > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGu ice . create Injector ( module ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected String 1 Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 ) ĠA Ġbinding Ġto Ġorg . jl le its ch uh . gu ice . Interface Ġwas Ġalready Ġconfigured Ġat Ġorg . jl le its ch uh . gu ice . Module Test ${ '$ '} module Ġbinding Ġexceptions Ġprovide Ġmeaningful Ġexceptions ${ '$ '} module ${ '$ '} 1 . invoke ( Module Test . kt :" ĊĠĠĠĠĠĠĠ Ġval Ġexpected String 2 Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" at Ġorg . jl le its ch uh . gu ice . Module Test ${ '$ '} module Ġbinding Ġexceptions Ġprovide Ġmeaningful Ġexceptions ${ '$ '} module ${ '$ '} 1 . invoke ( Module Test . kt :" ĊĊĠĠĠĠĠĠĠ ĠassertThat ( exception . message !! , Ġcontains Substring ( expected String 1 ) Ġand Ġcontains Substring ( expected String 2 )) ĊĠĠĠ Ġ} Ċ }