// ĠCopyright Ġ 2 0 0 0 - 2 0 1 9 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ package Ġcom . intellij . test Framework . utils . in lay s Ċ Ċ import Ġcom . intellij . code Insight . hints . Collector With Settings Ċ import Ġcom . intellij . code Insight . hints . In lay Hints Provider Ċ import Ġcom . intellij . code Insight . hints . In lay Hints Sink Impl Ċ import Ġcom . intellij . code Insight . hints . presentation . Presentation Renderer Ċ import Ġcom . intellij . openapi . editor . Document Ċ import Ġcom . intellij . openapi . editor . In lay Ċ import Ġcom . intellij . test Framework . fixtures . Base Platform TestCase Ċ import Ġjava . util . regex . Pattern Ċ Ċ abstract Ġclass ĠIn lay Hints Provider TestCase Ġ: ĠBase Platform TestCase () Ġ{ ĊĠ Ġfun Ġ< T Ġ: ĠAny > Ġtest Provider ( fileName : ĠString , Ġexpected Text : ĠString , Ġprovider : ĠIn lay Hints Provider < T >, Ġsettings : ĠT Ġ= Ġprovider . create Settings ()) Ġ{ ĊĠĠĠ Ġval Ġsource Text Ġ= ĠIn lay Data . pattern . matcher ( expected Text ). replaceAll ("") ĊĠĠĠ Ġmy Fixture . configure By Text ( fileName , Ġsource Text ) ĊĊĠĠĠ Ġval Ġfile Ġ= Ġmy Fixture . file ĊĠĠĠ Ġval Ġeditor Ġ= Ġmy Fixture . editor ĊĠĠĠ Ġval Ġsink Ġ= ĠIn lay Hints Sink Impl ( provider . key ) ĊĠĠĠ Ġval Ġcollector Ġ= Ġprovider . get Collector For ( file , Ġeditor , Ġsettings , Ġsink ) Ġ?: Ġerror (" Collector Ġis Ġexpected ") ĊĠĠĠ Ġval Ġcollector With Settings Ġ= ĠCollector With Settings ( collector , Ġprovider . key , Ġfile . language , Ġsink ) ĊĠĠĠ Ġcollector With Settings . collect Tra ver sing And Apply ( editor , Ġfile ) ĊĠĠĠ Ġval Ġmodel Ġ= Ġeditor . in lay Model ĊĠĠĠ Ġval Ġrange Ġ= Ġfile . text Range ĊĠĠĠ Ġval Ġinline Elements Ġ= Ġmodel . get Inline Elements InRange ( range . start Offset , Ġrange . end Offset ) ĊĠĠĠ Ġval Ġblock Elements Ġ= Ġmodel . getBlock Elements InRange ( range . start Offset , Ġrange . end Offset ) ĊĠĠĠ Ġval Ġin lay s Ġ= Ġmutable ListOf < In lay Data >() ĊĠĠĠ Ġinline Elements . map To ( in lay s ) Ġ{ ĠIn lay Data ( it , ĠIn lay Type . Inline ) Ġ} ĊĠĠĠ Ġblock Elements . map To ( in lay s ) Ġ{ ĠIn lay Data ( it , ĠIn lay Type . Block ) Ġ} ĊĠĠĠ Ġval Ġdocument Ġ= Ġmy Fixture . getDocument ( file ) ĊĠĠĠ Ġin lay s . sortBy Ġ{ Ġit . effective Offset ( document ) Ġ} ĊĠĠĠ Ġval Ġactual Text Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠ Ġvar Ġcurrent Offset Ġ= Ġ 0 ĊĠĠĠĠĠ Ġfor Ġ( in lay Ġin Ġin lay s ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnext Offset Ġ= Ġin lay . effective Offset ( document ) ĊĠĠĠĠĠĠĠ Ġappend ( source Text . sub Sequence ( current Offset , Ġnext Offset )) ĊĠĠĠĠĠĠĠ Ġappend ( in lay ) ĊĠĠĠĠĠĠĠ Ġcurrent Offset Ġ= Ġnext Offset ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġappend ( source Text . substring ( current Offset , Ġsource Text . length )) ĊĠĠĠ Ġ} ĊĠĠĠ ĠassertEquals ( expected Text , Ġactual Text ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġdata Ġclass ĠIn lay Data ( val Ġin lay : ĠIn lay <* >, Ġval Ġtype : ĠIn lay Type ) Ġ{ ĊĠĠĠ Ġfun Ġeffective Offset ( document : ĠDocument ) Ġ: ĠInt Ġ{ ĊĠĠĠĠĠ Ġreturn Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠ ĠIn lay Type . Inline Ġ-> Ġin lay . offset ĊĠĠĠĠĠĠĠ ĠIn lay Type . Block Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġin lay . offset ĊĠĠĠĠĠĠĠĠĠ Ġval ĠlineNumber Ġ= Ġdocument . get LineNumber ( offset ) ĊĠĠĠĠĠĠĠĠĠ Ġdocument . getLine Start Offset ( line Number ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠ Ġval Ġrenderer Ġ= Ġin lay . renderer Ġas ? ĠPresentation Renderer Ġ?: Ġerror (" Only ĠIn lay Presentation Ġbased Ġin lay s Ġsupported ") ĊĠĠĠĠĠ Ġreturn Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠ Ġappend ("< # Ġ") ĊĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠIn lay Type . Block ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġappend (" block Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġappend ( renderer . presentation . toString ()) ĊĠĠĠĠĠĠĠ Ġappend (" Ġ# >") ĊĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠIn lay Type . Block ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġappend ('\ n ') ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠ Ġval Ġpattern : ĠPattern Ġ= ĠPattern . compile ("< # Ġblock Ġ( .* )# >( \ r \ n |\ r |\ n )| <# (.* )# >") ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġenum Ġclass ĠIn lay Type Ġ{ ĊĠĠĠ ĠInline , ĊĠĠĠ ĠBlock ĊĠ Ġ} Ċ }