package Ġcom . har old admin . luc illa . core Ċ Ċ import Ġcom . har old admin . luc illa . annotations . Id Ċ import Ġio . kot est . assertions . throw ables . should Throw Ċ import Ġio . kot est . core . spec . style . Describe Spec Ċ import Ġio . kot est . matchers . collections . should Contain Exactly In Any Order Ċ import Ġio . kot est . matchers . collections . should Have At Least Size Ċ import Ġio . kot est . matchers . collections . should Have Size Ċ import Ġio . kot est . matchers . maps . should Not Contain Key Ċ import Ġio . kot est . matchers . shouldBe Ċ Ċ class ĠF ts Index Test Ġ: ĠDescribe Spec ({ ĊĠĠĠ Ġdescribe ( F ts Index :: class . java . simple Name ) Ġ{ ĊĠĠĠĠĠĠĠ Ġit (" should Ġreport Ġsize Ġ 0 Ġif Ġdocument Ġis Ġempty ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf ts Ġ= Ġuse F ts < Sentence >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf ts . size ĠshouldBe Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" should Ġadd Ġa Ġdocument Ġto Ġthe Ġindex Ġsuccessfully ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf ts Ġ= Ġuse F ts < Sentence >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( sentence ) Ġ= Ġgenerate Sent ences (). take ( 1 ). toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf ts . add ( sentence ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf ts . size ĠshouldBe Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" should Ġadd Ġa Ġdocument 's Ġtokens Ġto Ġthe Ġindex ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf ts Ġ= Ġuse F ts < Sentence >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( sentence ) Ġ= Ġgenerate Sent ences (). take ( 1 ). toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf ts . add ( sentence ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtokens Ġ= Ġf ts . pipeline . process ( sentence . value ). toSet () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf ts . index . size ĠshouldBe Ġtokens . size ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" should Ġremove Ġa Ġdocument Ġfrom Ġthe Ġindex Ġsuccessfully ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf ts Ġ= Ġuse F ts < Sentence >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( sentence ) Ġ= Ġgenerate Sent ences (). take ( 1 ). toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf ts . add ( sentence ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf ts . remove ( sentence ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf ts . size ĠshouldBe Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" should Ġremove Ġa Ġdocument 's Ġtokens Ġfrom Ġthe Ġindex ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf ts Ġ= Ġuse F ts < Sentence >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( sentence ) Ġ= Ġgenerate Sent ences (). take ( 1 ). toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf ts . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( sentence ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove ( sentence ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġf ts . index . size ĠshouldBe Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" should Ġnot Ġthrow Ġan Ġerror Ġwhen Ġremoving Ġa Ġnon - existent Ġdoc Ġfrom Ġthe Ġindex ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf ts Ġ= Ġuse F ts < Sentence >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( sentence ) Ġ= Ġgenerate Sent ences (). take ( 1 ). toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf ts . remove ( sentence ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf ts . size ĠshouldBe Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" should Ġnot Ġadd Ġa Ġdocument Ġtwice Ġto Ġthe Ġindex ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf ts Ġ= Ġuse F ts < Sentence >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( sentence ) Ġ= Ġgenerate Sent ences (). take ( 1 ). toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf ts . add ( sentence ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf ts . add ( sentence ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġf ts . size ĠshouldBe Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" should Ġnot Ġindex Ġfields Ġmarked Ġwith Ġ@ Ignore ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf ts Ġ= Ġuse F ts < Book >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbook Ġ= ĠBook ( id Ġ= Ġ 0 , Ġtitle Ġ= Ġ" How Ġto ĠBuild Ġa ĠCar ", Ġauthor Ġ= Ġ" Ad rian ĠNew ey ", Ġpublisher Ġ= Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf ts . add ( book ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġf ts . index Ġshould Not Contain Key Ġbook . publisher ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" should Ġindex Ġdocuments Ġwith Ġ'@ Id ' Ġannotated Ġproperty ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf ts Ġ= Ġuse F ts < Book >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbooks Ġ= Ġgenerate Books (). take ( 1 0 ). toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbooks . forEach Ġ{ Ġf ts . add ( it ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġf ts . docs Ġshould Contain Exactly In Any Order Ġbooks . map Ġ{ Ġb Ġ-> Ġb . id Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" should Ġthrow Ġan Ġerror Ġwhen Ġadding Ġa Ġdocument Ġwith Ġno Ġ'@ Id ' Ġannotated Ġelement ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġclass ĠDocument Without ID ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf ts Ġ= Ġuse F ts < Document Without ID >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould Throw < IllegalArgumentException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf ts . add ( Document Without ID (" Test ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" should Ġthrow Ġan Ġerror Ġwhen Ġadding Ġa Ġdocument Ġwith Ġnon - Int Ġ'@ Id '") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġclass ĠDocument With String ID ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf ts Ġ= Ġuse F ts < Document With String ID >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould Throw < IllegalArgumentException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf ts . add ( Document With String ID (" Test ĠID ", Ġ" Test ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" should Ġreturn Ġall Ġdocuments Ġfor Ġa Ġtoken Ġwhen Ġsearching ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġuse F ts < Book >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbooks Ġ= Ġgenerate Books (). toList (). associate By Ġ{ Ġbook Ġ-> Ġbook . id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbooks . values . forEach Ġ{ Ġindex . add ( it ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatched Books Ġ= Ġindex . search (" p ride ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġr Ġ-> Ġbooks [ r . document Id ] Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatched Books Ġshould Have Size Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatched Books . all Ġ{ Ġit . author Ġ== Ġ" J ane ĠA ust en " Ġ} ĠshouldBe Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" should Ġreturn Ġempty Ġset Ġwhen Ġthere Ġare Ġno Ġresults ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf ts Ġ= Ġuse F ts < Book >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf ts . search (" test ") Ġshould Have Size Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcontext (" Autocomplete Ġsuggestions ") Ġ{ ĊĠĠĠĠĠĠĠ Ġit (" should Ġreturn Ġzero Ġresults Ġif Ġthere Ġare Ġno Ġmatches ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġuse F ts < Book >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġindex . autocomplete (" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresults Ġshould Have Size Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" should Ġreturn Ġmatching Ġresults ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġuse F ts < Sentence >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex . add ( Sentence ( 0 , Ġ" foot ball ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex . add ( Sentence ( 1 , Ġ" fo il ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġindex . autocomplete (" fo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresults Ġshould Have Size Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcontext (" Select ĠProps ") Ġ{ ĊĠĠĠĠĠĠĠ Ġit (" should Ġreturn Ġzero Ġresults Ġif Ġno Ġprops Ġare Ġselected ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġgenerate Books (). take ( 1 0 ). toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġuse F ts ( data ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Text Ġ= Ġdata . first (). title . split (" Ġ"). first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġbuild Query ( query Text ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġindex . search ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresults Ġshould Have Size Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" should Ġreturn Ġresults Ġfor Ġall Ġprops Ġif Ġprops Ġaren 't Ġexplicitly Ġselected ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġgenerate Books (). take ( 1 0 ). toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġuse F ts ( data ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ(_, Ġtitle , Ġauthor ) Ġ= Ġdata . first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Results Ġ= Ġindex . search ( build Query ( title )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor Results Ġ= Ġindex . search ( build Query ( author )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Results Ġshould Have At Least Size Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Results Ġshould Have At Least Size Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" should Ġreturn Ġresults Ġonly Ġfor Ġselected Ġprops ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġgenerate Books (). take ( 1 0 ). toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġuse F ts ( data ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ(_, Ġtitle , Ġauthor ) Ġ= Ġdata . first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Results Ġ= Ġindex . search ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Query ( title ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect ( Book :: title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor Results Ġ= Ġindex . search ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Query ( author ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect ( Book :: title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Results Ġshould Have At Least Size Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Results Ġshould Have Size Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" should Ġreturn Ġno Ġresults Ġif Ġselected Ġprops Ġare Ġignored ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġgenerate Books (). take ( 1 0 ). toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġuse F ts ( data ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġignored Field Ġ= Ġdata . first (). publisher ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġindex . search ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Query ( ignored Field ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect ( Book :: publisher ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresults Ġshould Have Size Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" should Ġreturn Ġno Ġresults Ġif Ġselected Ġprops Ġdon 't Ġbelong Ġto Ġthe Ġindex Ġdata Ġtype ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġgenerate Books (). take ( 1 0 ). toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġuse F ts ( data ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ(_, Ġtitle ) Ġ= Ġdata . first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġindex . search ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Query ( title ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect ( Sentence :: value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresults Ġshould Have Size Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }) Ċ