/** Ċ Ġ* ĠĠĠĠĠ ĠRed in Ġ- ĠDependency Ġinjection Ġbuilt Ġon Ġtop Ġof ĠK ores Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠ ĠThe ĠMIT ĠLicense Ġ( MIT ) Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠJon athan xD Ġ< https :// github . com / Jon athan xD / Red in > Ċ Ġ* ĠĠĠĠĠ ĠCopyright Ġ( c ) Ġcontributors Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* ĠĠĠĠĠ Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* ĠĠĠĠĠ Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* ĠĠĠĠĠ Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* ĠĠĠĠĠ Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* ĠĠĠĠĠ Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ Ġ* ĠĠĠĠĠ Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠĠĠĠĠ ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠĠĠĠĠ ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠĠĠĠĠ ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠĠĠĠĠ ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠĠĠĠĠ ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN Ċ Ġ* ĠĠĠĠĠ ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ package Ġcom . github . jon athan xd . red in . test Ċ Ċ import Ġcom . github . jon athan xd . i utils . kt . Try Ċ import Ġcom . github . jon athan xd . red in .* Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Test Ċ import Ġjava . util .* Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠContext Provider Test Ġ{ ĊĊĠĠĠ Ġclass ĠMy Ġ@ Inject Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġ@ Access (" users ", ĠMode . READ _ ONLY ) Ġval Ġaccessed : ĠMap < String , ĠString > ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcontext () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġservice Ġ= ĠMy Service Manager () ĊĊĠĠĠĠĠĠĠ Ġservice . register Service Data (" users ", Ġmutable Map Of (" example " Ġto Ġ"@ 8 9 5 1 3 ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġinjector Ġ= ĠRed in Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind Re ified < Map < String , ĠString >>() Ġqualified With ĠAnnot ated With < Access >() Ġto Provider Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccess Ġ= Ġit . qual ifier < Access >(). last () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . getService Data ( access . getAs (" name ")). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( access . getAs < Mode >(" mode ") Ġ== ĠMode . READ _ ONLY ) ĠCollections . unmodifiable Map ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmy Ġ= Ġinjector . get < My >() ĊĊĠĠĠĠĠĠĠ Ġval Ġtry Modify Ġ= ĠTry < Unit , Ġjava . lang . Unsupported OperationException > Ġ{ Ġ( my . ac cessed Ġas ĠMutable Map < String , ĠString >) [" A "] Ġ= Ġ" B " Ġ} ĊĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( try Modify . isError ) ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( try Modify . error OrNull () Ġis ĠUnsupportedOperationException ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( map Of (" example " Ġto Ġ"@ 8 9 5 1 3 "), Ġmy . ac cessed ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠMy Service Manager Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġservice DataMap Ġ= Ġmutable Map Of < String , ĠMap < String , ĠString >>() ĊĊĠĠĠĠĠĠĠ Ġfun Ġregister Service Data ( name : ĠString , Ġmap : ĠMap < String , ĠString >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . service DataMap [ name ] Ġ= Ġmap ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Service Data ( name : ĠString ): ĠMap < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . service DataMap [ name ] !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }