package Ġinfo . k interest . jvm . filter Ċ Ċ import Ġinfo . k interest . D ON TD OTH IS Ċ import Ġinfo . k interest . DataStore Ċ import Ġinfo . k interest . Meta Provider Ċ import Ġinfo . k interest . core . jvm . filters . parser . parse Ċ import Ġinfo . k interest . jvm . K IJ vm Entity Ċ import Ġinfo . k interest . jvm . K IJ vm Entity Meta Ċ import Ġinfo . k interest . meta . Id Info Ċ import Ġinfo . k interest . meta . KI Entity Meta Ċ import Ġinfo . k interest . meta . KI Property Ċ import Ġmu . Kotlin Logging Ċ import Ġorg . am sh ove . k lu ent .* Ċ import Ġorg . jetbrains . spe k . api . Spe k Ċ import Ġorg . jetbrains . spe k . api . dsl . given Ċ import Ġorg . jetbrains . spe k . api . dsl . it Ċ import Ġorg . jetbrains . spe k . api . dsl . on Ċ import Ġjava . time . LocalDate Ċ import Ġkotlin . reflect . K Class Ċ Ċ val Ġlog Ġ= ĠKotlin Logging . logger Ġ{ Ġ Ġ} Ċ Ċ @ Suppress (" Member Visibility Can Be Private ", Ġ" PropertyName ") Ċ class ĠTest Filter ( id : ĠString , Ġval Ġnumber : ĠLong , Ġval Ġdate : ĠLocalDate ) Ġ: ĠK IJ vm Entity < Test Filter , ĠString >( mock (), Ġid ) Ġ{ ĊĠĠĠ Ġ@ Suppress (" UNUSED _ PARAMETER ", Ġ" unused ") ĊĠĠĠ Ġconstructor ( ds : ĠData Store , Ġid : ĠString ) Ġ: Ġthis ( id , Ġ 0 , ĠLocalDate . now ()) ĊĠĠĠ Ġoverride Ġval Ġ_ meta : ĠK IJ vm Entity Meta ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠMeta ĊĠĠĠ Ġoverride Ġval Ġ_ me : ĠK Class < *> ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠMeta . me ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ", Ġ" IMP LICIT _ CAST _ TO _ ANY ") ĊĠĠĠ Ġoverride Ġfun Ġ< V , ĠP Ġ: ĠK I Property < V >> ĠgetValue ( prop : ĠP ): ĠV ? Ġ= Ġwhen Ġ( prop . name ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" number " Ġ-> Ġnumber ĊĠĠĠĠĠĠĠ Ġ" date " Ġ-> Ġdate ĊĠĠĠĠĠĠĠ Ġ" id " Ġ-> Ġid ĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĠD ON TD OTH IS (" unknown Ġprop Ġ${ prop . name }") ĊĠĠĠ Ġ} Ġas ĠV ? ĊĊĊĠĠĠ Ġoverride Ġfun Ġ< V , ĠP Ġ: ĠK I Property < V >> ĠsetValue ( prop : ĠP , Ġv : ĠV ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠD ON TD OTH IS (" not Ġimplemented ") Ġ// To Ġchange Ġbody Ġof Ġcreated Ġfunctions Ġuse ĠFile Ġ| ĠSettings Ġ| ĠFile ĠTemplates . ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġ< V , ĠP Ġ: ĠK I Property < V >> ĠsetValue ( prop : ĠP , Ġversion : ĠAny , Ġv : ĠV ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠD ON TD OTH IS (" not Ġimplemented ") Ġ// To Ġchange Ġbody Ġof Ġcreated Ġfunctions Ġuse ĠFile Ġ| ĠSettings Ġ| ĠFile ĠTemplates . ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġas Transient (): ĠTest Filter Ġ{ ĊĠĠĠĠĠĠĠ ĠD ON TD OTH IS (" not Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠMeta Ġ: ĠK IJ vm Entity Meta ( Test Filter :: class , ĠTest Filter :: class ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġroot : ĠK Class < *> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= ĠTest Filter :: class ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġparent : ĠK Class < *> ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġversion ed : ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġhierarchy : ĠList < KI Entity Meta > Ġ= ĠlistOf () ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġid Info : ĠId Info Ġ= ĠId Info ( String :: class , Ġfalse , Ġnull , Ġnull , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġ} Ċ } ĊĊĊ Ċ object ĠTest Simple Filter Ġ: ĠSpe k ({ ĊĠĠĠ Ġval Ġmeta Provider Ġ= ĠMeta Provider () ĊĠĠĠ Ġmeta Provider . register ( Test Filter . Meta ) ĊĠĠĠ Ġgiven (" a Ġsimple Ġset Ġof Ġentities ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġentities Ġ= Ġmutable ListOf < Test Filter >() ĊĠĠĠĠĠĠĠ Ġfor ( c Ġin Ġ' A ' .. ' Z ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentities Ġ+= ĠTest Filter ("$ c ", Ġc . to Long ()- ' A '. to Long (), ĠLocalDate . now ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġf ids Ġ= Ġfilter < Test Filter , ĠString >( Test Filter . Meta ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġids (" A "," B "," C ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= entities . filter ( f ids :: matches ) ĊĠĠĠĠĠĠĠ Ġon (" creating Ġa Ġsimple Ġid Ġfilter ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġreturn Ġthe Ġproper Ġresult ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres . size Ġ` should Ġequal ` Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres . map ( Test Filter :: id ). toSet () Ġ` should Ġequal ` Ġ Ġset Of (" A ", Ġ" B ", Ġ" C ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinv Ġ= Ġf ids . inverse () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr inv Ġ= Ġentities . filter ( inv :: matches ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" its Ġinverse Ġshould Ġnot Ġcontain Ġany Ġof Ġthe Ġresult ") Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr inv . size Ġ` should Ġequal ` Ġ 2 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtogether Ġ= Ġ( entities . filter ( f ids :: matches ) Ġ+ Ġentities . filter ( inv :: matches )). toSet () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" adding Ġboth Ġfilter Ġand Ġits Ġinverse Ġshould Ġgive Ġthe Ġoriginal Ġset ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug Ġ{ Ġtogether Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtogether Ġ` should Ġequal ` Ġentities . toSet () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlt Ġ= Ġfilter < Test Filter , ĠString >( Test Filter . Meta ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparse (" Test Filter { number > 2 4 }", ĠTest Filter . Meta ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġl tr Ġ= Ġentities . filter Ġ{ Ġlt . matches ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġon (" filtering Ġon Ġa Ġfield ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġreturn Ġthe Ġproper Ġresult ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl tr . size Ġ` should Ġbe Ġgreater Ġthan ` Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl tr . size Ġ` should Ġbe ` Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl tr . map Ġ{ Ġit . id Ġ}. toSet () Ġ` should Ġequal ` Ġ Ġset Of (" Z ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġids Ġ= Ġfilter < Test Filter , ĠString >( Test Filter . Meta ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparse (" Test Filter { id Ġ> Ġ\" W \" }", ĠTest Filter . Meta ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġon (" filtering Ġon Ġids ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġbe Ġa Ġproperty Ġfilter ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġids Ġ` should Ġbe Ġinstance Ġof ` ĠEntity Filter . Live Filter Wrapper :: class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġids . f Ġ` should Ġbe Ġinstance Ġof ` ĠId Comparison Filter :: class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid f Ġ= Ġids . f Ġas ĠId Comparison Filter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgt Ġ= Ġid f . value Filter Ġas ĠGT Filter < Test Filter , ĠString , ĠString > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgt . prop . name Ġ` should Ġequal ` Ġ" id " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgt . value Ġ` should Ġequal ` Ġ" W " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġnot Ġaccept Ġ' A '") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentities [ 0 ]. id Ġ` should Ġequal ` Ġ" A " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġids . matches ( entities [ 0 ]) Ġ` should Ġnot Ġbe Ġequal Ġto ` Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġfilter ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid F Ġ= Ġentities . filter Ġ{ Ġids . matches ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid F . size Ġ` should Ġequal ` Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġon (" another Ġid Ġfilter ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġids 1 Ġ= Ġfilter < Test Filter , ĠString >( Test Filter . Meta ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse (" Test Filter { id Ġ>= \" W \" }", ĠTest Filter . Meta ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġfilter ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid F Ġ= Ġentities . filter Ġ{ Ġids 1 . matches ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid F . size Ġ` should Ġequal ` Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġon (" reversed Ġid Ġfilter ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġids 1 Ġ= Ġfilter < Test Filter , ĠString >( Test Filter . Meta ) Ġ{ Ġparse (" Test Filter {\" W \" <= id }", ĠTest Filter . Meta ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġfilter ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid F Ġ= Ġentities . filter Ġ{ Ġids 1 . matches ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid F . size Ġ` should Ġequal ` Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ })