package Ġcz . v ut br . fit . k not . entic ing . index . integration Ċ Ċ import Ġcz . v ut br . fit . k not . entic ing . dto .* Ċ import Ġcz . v ut br . fit . k not . entic ing . dto . format . result . Result Format Ċ import Ġcz . v ut br . fit . k not . entic ing . dto . format . result . to Raw Text Ċ import Ġcz . v ut br . fit . k not . entic ing . dto . format . text . Text Unit Ċ import Ġcz . v ut br . fit . k not . entic ing . index . boundary . Indexed Document Ċ import Ġcz . v ut br . fit . k not . entic ing . index . mg 4 j . init Mg 4 j Collection Manager Ċ import Ġcz . v ut br . fit . k not . entic ing . index . startIndex ing Ċ import Ġcz . v ut br . fit . k not . entic ing . log . Simple Stdout LoggerFactory Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . jupiter . api . Before All Ċ import Ġorg . junit . jupiter . api . DisplayName Ċ import Ġorg . junit . jupiter . api . Nested Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġjava . util .* Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . min Ċ Ċ class ĠIntegration Tests Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġtemplate Query Ġ= ĠSearch Query ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText Metadata . Pre defined (" all "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcz . v ut br . fit . k not . entic ing . dto . Result Format . SN IP PET , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText Format . TEXT _ UNIT _ LIST ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Before All ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġbefore All () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartIndex ing ( builder Config , ĠSimple Stdout LoggerFactory ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcollection Manager Ġ= Ġinit Mg 4 j Collection Manager ( collection Manager Configuration , ĠSimple Stdout LoggerFactory ) ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` the Ġsame Ġnumber Ġof Ġresults Ġis Ġreturned Ġfor Ġvarious Ġsnippet Ġsize Ġof Ġall Ġresults Ġare Ġretrieved `() Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( query Ġin ĠlistOf (" water ", Ġ" is Ġhas ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresults Count Ġ= Ġmutable Set Of < Int >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( snippet Count Ġin ĠlistOf ( 7 5 , Ġ 1 0 0 , Ġ 2 0 0 , Ġ 3 0 0 , Ġ 5 0 0 , Ġ 6 0 0 , Ġ 7 0 0 , Ġ 8 0 0 , Ġ 1 0 0 0 , Ġ 1 0 _ 0 0 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġoffset : ĠOffset ? Ġ= ĠOffset ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcnt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( offset Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcollection Manager . query ( Search Query ( query , Ġsnippet Count ), Ġoffset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcnt Ġ+= Ġresult . search Results . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ= Ġresult . offset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults Count . add ( cnt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( results Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. has Size ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ DisplayName (" water ") ĊĠĠĠ Ġfun Ġone () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcollection Manager . query ( template Query . copy ( query Ġ= Ġ" water ")) ĊĠĠĠĠĠĠĠ Ġresult . check Content Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhighlight s (" water ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ DisplayName (" ground ") ĊĠĠĠ Ġfun Ġtwo () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcollection Manager . query ( template Query . copy ( query Ġ= Ġ" ground ")) ĊĠĠĠĠĠĠĠ Ġresult . check Content Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhighlight s (" ground ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ DisplayName (" is Ġa Ġctx : sent ") ĊĠĠĠ Ġfun Ġ` check Ġsentence Ġcontext `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcollection Manager . query ( template Query . copy ( query Ġ= Ġ" is Ġa Ġctx : sent ")) ĊĠĠĠĠĠĠĠ Ġresult . check Content Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhighlight s (" is ", Ġ" a ", Ġsentence Limit Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠDocument Constraints Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` by Ġtitle `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( title Ġin Ġset Of (" x : ĠNew ĠF air y ĠT ales ĠIssue Ġ 6 ", Ġ" Health ĠNews Ġ- ĠABC ĠNews ĠRadio ", Ġ" Ac commod ation Ġ ĠUpper ĠK ang ar oo ĠV alley Ġ- ĠAc commod ation ĠGold ĠCo ast ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcollection Manager . query ( template Query . copy ( query Ġ= Ġ" water Ġdocument . title :' $ title ' ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . check Content Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhighlight s (" water ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . title Ġ= Ġtitle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` by Ġurl `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( url Ġin Ġset Of (" http :// ann am cker row . blogspot . com / 2 0 1 0 / 1 2 / new - fa iry - ta les - issue - 6 . html ", Ġ" http :// abc news radio online . com / health - news / tag / b vo ", Ġ" http :// ac commod ation gold co ast . net / ac commod ation / upper - k ang ar oo - val ley ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcollection Manager . query ( template Query . copy ( query Ġ= Ġ" water Ġdocument . url :' $ url ' ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . check Content Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhighlight s (" water ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . url Ġ= Ġurl ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` by Ġuuid `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdoc Uuid s Ġ= Ġset Of (" 1 e 0 7 edd 3 - 5 0 4 2 - 5 6 0 5 - 9 d 6 8 - 5 b 5 ee afe 1 e 4 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 3 2 8 a 2 ed 3 - ef 0 5 - 5 b 0 6 - 8 efc - 5 b 8 9 4 0 ed 3 0 da ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 3 2 8 a 2 ed 3 - ef 0 5 - 5 b 0 6 - 8 efc - 5 b 8 9 4 0 ed 3 0 da ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 3 2 8 a 2 ed 3 - ef 0 5 - 5 b 0 6 - 8 efc - 5 b 8 9 4 0 ed 3 0 da ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" c 2 9 9 6 9 d 4 - 2 0 1 4 - 5 c 0 1 - 8 4 4 8 - 0 6 b 1 b 0 5 4 e 2 5 c ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 7 8 ae 9 e 0 1 - 0 ff 7 - 5 4 8 e - a 3 c 8 - 0 5 1 c 6 ca ff 7 6 b ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" d 1 c 4 2 edb - ce 7 9 - 5 cdc - 8 2 7 d - 0 b 3 9 2 ccf 8 2 3 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 e 5 8 1 b 6 5 - 1 e 1 8 - 5 4 e 2 - a 3 1 b - 9 bb 0 9 6 4 df 9 7 8 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 e 5 8 1 b 6 5 - 1 e 1 8 - 5 4 e 2 - a 3 1 b - 9 bb 0 9 6 4 df 9 7 8 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 e 5 8 1 b 6 5 - 1 e 1 8 - 5 4 e 2 - a 3 1 b - 9 bb 0 9 6 4 df 9 7 8 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 e 5 8 1 b 6 5 - 1 e 1 8 - 5 4 e 2 - a 3 1 b - 9 bb 0 9 6 4 df 9 7 8 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" d 2 8 5 0 1 6 6 - 8 8 6 4 - 5 fe 6 - 8 cee - c 0 1 0 6 8 5 eff ad ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" d 2 8 5 0 1 6 6 - 8 8 6 4 - 5 fe 6 - 8 cee - c 0 1 0 6 8 5 eff ad ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( uuid Ġin Ġdoc Uuid s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcollection Manager . query ( template Query . copy ( query Ġ= Ġ" water Ġdocument . uuid :' $ uuid ' ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . check Content Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhighlight s (" water ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . uuid Ġ= Ġuuid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠReal Examples Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġ@ DisplayName ("( in flu encer := n ert ag :( person | artist ) Ġ< Ġ( Ġlemma :( in fluence | impact ) Ġ| Ġ( lemma : paid Ġ< Ġlemma : tribute ) Ġ) Ġ Ġ< Ġinfluence e := n ert ag :( person | artist )) Ġctx : sent Ġdoc . url :' http :// en . wikipedia . org / wiki / 1 9 4 7 âĢĵ 4 8 _ C ivil _ War _ in _ Mandatory _ P ale st ine ' Ġ&& Ġinflu encer . url Ġ!= Ġinfluence e . url ") ĊĠĠĠĠĠĠĠ Ġfun Ġfirst () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcollection Manager . query ( template Query . copy ( query Ġ= Ġ"( in flu encer := n ert ag :( person | artist ) Ġ< Ġ( Ġlemma :( in fluence | impact ) Ġ| Ġ( lemma : paid Ġ< Ġlemma : tribute ) Ġ) Ġ Ġ< Ġinfluence e := n ert ag :( person | artist )) Ġctx : sent Ġdoc . url :' http :// en . wikipedia . org / wiki / 1 9 4 7 âĢĵ 4 8 _ C ivil _ War _ in _ Mandatory _ P ale st ine ' Ġ&& Ġinflu encer . url Ġ!= Ġinfluence e . url ")) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( result . search Results ). isNotEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ data Ġclass ĠRequirements ( ĊĠĠĠĠĠĠĠ Ġval Ġhighlight s : ĠMutable List < String > Ġ= Ġmutable ListOf (), ĊĠĠĠĠĠĠĠ Ġvar Ġtitle : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġvar Ġurl : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġvar Ġuuid : ĠString ? Ġ= Ġnull Ċ ) Ġ{ ĊĊĠĠĠ Ġvar Ġsentence Limit : ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġfun Ġhighlight s ( var arg Ġwords : ĠString , Ġsentence Limit : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . highlight s . addAll ( words . map Ġ{ Ġit . toLowerCase () Ġ}) ĊĠĠĠĠĠĠĠ Ġthis . sentence Limit Ġ= Ġsentence Limit ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġerrors Ġ= Ġmutable ListOf < String >() ĊĊĠĠĠ Ġfun Ġreport Error ( msg : ĠString ) Ġ= Ġerrors . add ( msg ) ĊĊĠĠĠ Ġfun Ġchecker For ( result : ĠIndex Server . SearchResult , Ġblock : Ġ( Document Checker ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchecker Ġ= ĠDocument Checker ( result , Ġthis ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock ( checker ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchecker . validate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġvalidate () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( errors . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerrors . forEach Ġ{ ĠSystem . err . println ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġjava . lang . AssertionError ( errors ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠDocument Checker ( val Ġresult : ĠIndex Server . SearchResult , Ġval Ġrequirements : ĠRequirements ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġhas Errors Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġhighlight s Ġ= Ġrequirements . highlight s . to Mutable Set () ĊĊĠĠĠ Ġprivate Ġval Ġsentence Limit Ġ= Ġrequirements . sentence Limit ĊĊĠĠĠ Ġprivate Ġval Ġparagraph Marks Ġ= Ġmutable Set Of < Int >() ĊĠĠĠ Ġprivate Ġval Ġsentence Marks Ġ= Ġmutable Set Of < Int >() ĊĊĠĠĠ Ġprivate Ġvar Ġmin Highlight Index Ġ= ĠInt . MAX _ VALUE ĊĠĠĠ Ġprivate Ġvar Ġmax Highlight Index Ġ= ĠInt . MIN _ VALUE ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( requirements . title Ġ!= Ġnull Ġ&& Ġrequirements . title Ġ!= Ġresult . document Title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport Error (" Only Ġdocuments Ġwith Ġtitle Ġ'${ requirements . title }' Ġexpected , Ġthis Ġone Ġhad Ġ'${ result . document Title }' ") ĊĠĠĠĠĠĠĠ Ġif Ġ( requirements . url Ġ!= Ġnull Ġ&& Ġrequirements . url Ġ!= Ġresult . url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport Error (" Only Ġdocuments Ġwith Ġurl Ġ'${ requirements . url }' Ġexpected , Ġthis Ġone Ġhad Ġ'${ result . url }' ") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( requirements . uuid Ġ!= Ġnull Ġ&& Ġrequirements . uuid Ġ!= Ġresult . uuid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport Error (" Only Ġdocuments Ġwith Ġuuid Ġ${ requirements . uuid } Ġexpected , Ġthis Ġone Ġhad Ġ'${ result . uuid }' ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreport Error ( msg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequirements . report Error ("${ result . document Title }: Ġ$ msg ") ĊĠĠĠĠĠĠĠ Ġhas Errors Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck Word ( i : ĠInt , Ġword : ĠText Unit . Word ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( word . token ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIndexed Document . PAR AG R APH _ MARK Ġ-> Ġparagraph Marks . add ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIndexed Document . SENT ENCE _ MARK Ġ-> Ġsentence Marks . add ( i ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck Query Match ( i : ĠInt , Ġmatch : ĠText Unit . Query Match ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġqueue Ġ= ĠArray Deque ( match . content ) ĊĊĠĠĠĠĠĠĠ Ġmin Highlight Index Ġ= Ġmin ( min Highlight Index , Ġi ) ĊĠĠĠĠĠĠĠ Ġmax Highlight Index Ġ= Ġmax ( max Highlight Index , Ġi ) ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( queue . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġunit Ġ= Ġqueue . remove First ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠText Unit . Word Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! highlight s . remove ( unit . token . toLowerCase ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport Error (" Word Ġ'${ unit . token }' Ġwas Ġhighlighted , Ġbut Ġit Ġshouldn 't ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠText Unit . Entity Ġ-> Ġunit . words . reversed (). forEach Ġ{ Ġqueue . add First ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Other Ġtypes Ġthan Ġword Ġand Ġentity Ġshould Ġnot Ġbe Ġencountered Ġhere ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck Entity ( i : ĠInt , Ġunit : ĠText Unit . Entity ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġvalidate () Ġ{ ĊĠĠĠĠĠĠĠ Ġhighlight s . forEach Ġ{ Ġreport Error (" Word Ġ$ it Ġshould Ġbe Ġhighlighted , Ġbut Ġwas Ġnot ") Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( sentence Limit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( min Highlight Index Ġ== ĠInt . MAX _ VALUE ) Ġreport Error (" no Ġmatch Ġencountered ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( max Highlight Index Ġ== ĠInt . MIN _ VALUE ) Ġreport Error (" no Ġmatch Ġencountered ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! has Errors ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintersection Ġ= Ġsentence Marks . filter Ġ{ Ġit Ġin Ġmin Highlight Index .. max Highlight Index Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( intersection . isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport Error (" Sentence Ġmarks Ġwere Ġfound Ġon Ġ$ intersection Ġeven Ġthough Ġcontext Ġwas Ġrestricted Ġto Ġonly Ġone Ġsentence ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( has Errors ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġresult . text Unit List . to Raw Text ( token Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport Error ("\ n \ n Text Ġof Ġthe Ġdocument Ġis :\ n $ content \ n ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠIndex Server . SearchResult . text Unit List : ĠList < Text Unit > ĊĠĠĠ Ġget () Ġ= Ġ(( this . payload Ġas ĠResult Format . Snippet ) Ġas ĠResult Format . Snippet . Text Unit List ). content . content ĊĊ Ċ fun Ġwith Requirements ( init : ĠRequirements . () Ġ-> ĠUnit , Ġblock : Ġ( Requirements ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġval Ġrequirements Ġ= ĠRequirements (). apply ( init ) ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġblock ( requirements ) ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠ Ġrequirements . validate () ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠIndex Server . Collection Result List . check Content ( init : ĠRequirements . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġcheck ( this . search Results . isNotEmpty ()) Ġ{ Ġ" cannot Ġiterate Ġover Ġempty Ġresults " Ġ} ĊĠĠĠ Ġwith Requirements ( init ) Ġ{ Ġrequirements Ġ-> ĊĠĠĠĠĠĠĠ Ġfor Ġ( result Ġin Ġthis . search Results ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequirements . checker For ( result ) Ġ{ Ġchecker Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeque Ġ= ĠArray Deque ( result . text Unit List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( i , Ġunit ) Ġin Ġdeque . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( unit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠText Unit . Word Ġ-> Ġchecker . check Word ( i , Ġunit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠText Unit . Entity Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunit . words . reversed (). forEach Ġ{ Ġdeque . add First ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchecker . check Entity ( i , Ġunit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠText Unit . Query Match Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunit . content . reversed (). forEach Ġ{ Ġdeque . add First ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchecker . check Query Match ( i , Ġunit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ } Ċ