/* Ċ Ġ* ĠCopyright Ġ 2 0 1 5 - 2 0 1 6 ĠJ avier ĠD ÃŃ az - Can o ĠMart ÃŃn - Al bo Ġ( jav ier dia z can om @ gmail . com ) Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . j dia z can o . cfg 4 k Ċ Ċ import Ġcom . j dia z can o . cfg 4 k . core . Config Context Ċ import Ġcom . j dia z can o . cfg 4 k . core . Config Object Ċ import Ġcom . j dia z can o . cfg 4 k . loaders . Property Config Loader Ċ import Ġcom . j dia z can o . cfg 4 k . parsers . Parser Ċ import Ġcom . j dia z can o . cfg 4 k . parsers . Parsers Ċ import Ġcom . j dia z can o . cfg 4 k . providers . Cached Config Provider Ċ import Ġcom . j dia z can o . cfg 4 k . providers . Proxy Config Provider Ċ import Ġcom . j dia z can o . cfg 4 k . providers . get Ċ import Ġcom . j dia z can o . cfg 4 k . sources . URL Config Source Ċ import Ġcom . j dia z can o . cfg 4 k . utils . Parser Class NotFound Ċ import Ġcom . j dia z can o . cfg 4 k . utils . Type Structure Ċ import Ġcom . w inter be . ex pe kt . should Ċ import Ġorg . jetbrains . spe k . api . Spe k Ċ import Ġorg . jetbrains . spe k . api . dsl . describe Ċ import Ġorg . jetbrains . spe k . api . dsl . it Ċ import Ġkotlin . test . assert Fails With Ċ Ċ class ĠRegister New Parsers Test Ġ: ĠSpe k ({ ĊĊĠĠĠ Ġdescribe (" a Ġproperty Ġconfig Ġloader ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġload ers Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProperty Config Loader ( URL Config Source ( java Class . class Loader . getResource (" book . properties "))) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġload ers . forEach Ġ{ Ġloader Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproviders Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProxy Config Provider ( loader ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCached Config Provider ( Proxy Config Provider ( loader )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproviders . forEach Ġ{ Ġprovider Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" a Ġclass Ġis Ġnot Ġregistered ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Fails With < Parser Class NotFound > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovider . get (" h arr ypot ter ", ĠBook :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" class Ġhas Ġbeen Ġregistered Ġand Ġnow Ġeverything Ġis Ġcool ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPar sers . add Parser ( Book :: class . java , ĠBook Parser ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovider . get < Book >(" h arr ypot ter "). should . be . equal ( Book ( 1 , Ġ" Pr isoner Ġof Ġaz k aban ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }) Ċ Ċ data Ġclass ĠBook ( val Ġid : ĠLong , Ġval Ġtitle : ĠString ) Ċ object ĠBook Parser Ġ: ĠParser < Book > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġparse ( context : ĠConfig Context , Ġvalue : ĠConfig Object , Ġtype Structure : ĠType Structure ): ĠBook Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= Ġvalue . as Object () ĊĠĠĠĠĠĠĠ Ġreturn ĠBook ( obj [" id "] !!. asString (). to Long (), Ġobj [" title "] !!. asString ()) ĊĠĠĠ Ġ} Ċ Ċ }