/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 5 - 2 0 2 0 ĠV lad im ir ĠSch ne ider Ġ< vl ad im ir . sch ne ider @ gmail . com >, Ġall Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠThis Ġcode Ġis Ġprivate Ġproperty Ġof Ġthe Ġcopyright Ġholder Ġand Ġcannot Ġbe Ġused Ġwithout Ċ Ġ* Ġhaving Ġobtained Ġa Ġlicense Ġor Ġprior Ġwritten Ġpermission Ġof Ġthe Ġcopyright Ġholder . Ċ Ġ* Ċ Ġ* Ġ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 . vl ad sch . md . nav . util Ċ Ċ import Ġcom . vl ad sch . md . nav . test Util . TestCase Utils . assertEquals Message Ċ import Ġcom . vl ad sch . md . nav . test Util . TestCase Utils . compare Un ordered Lists Ċ import Ġcom . vl ad sch . md . nav . vcs . GitHub Link Resolver Ċ import Ġcom . vl ad sch . plugin . util . prefix With Ċ import Ġcom . vl ad sch . plugin . util . startsWith Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . Parameterized Ċ import Ġjava . util .* Ċ Ċ @ RunWith ( value Ġ= ĠParameter ized :: class ) Ċ class ĠTest Link Resolver _ Basic _ wiki _ normal _ file Ġconstructor ( ĊĠĠĠ Ġval Ġlocation : ĠString ĊĠĠĠ Ġ, Ġval Ġfull Path : ĠString ĊĠĠĠ Ġ, Ġval Ġlink Ref Type : Ġ( containing File : ĠFile Ref , Ġlink Ref : ĠString , Ġanchor : ĠString ?, Ġtarget Ref : ĠFile Ref ?, Ġis Normalized : ĠBoolean ) Ġ-> ĠLink Ref ĊĠĠĠ Ġ, Ġval Ġlink Text : ĠString ĊĠĠĠ Ġ, Ġval Ġlink Address : ĠString ĊĠĠĠ Ġ, Ġval Ġlink Anchor : ĠString ? ĊĠĠĠ Ġ, Ġval Ġlink Title : ĠString ? ĊĠĠĠ Ġ, Ġresolves Local Rel : ĠString ? ĊĠĠĠ Ġ, Ġresolves External Rel : ĠString ? ĊĠĠĠ Ġ, Ġval Ġlink Address Text : ĠString ? ĊĠĠĠ Ġ, Ġval Ġremote Address Text : ĠString ? ĊĠĠĠ Ġ, Ġval Ġuri Text : ĠString ? ĊĠĠĠ Ġ, Ġmulti Resolve Partial : ĠArray < String > ĊĠĠĠ Ġ, Ġval Ġinspection Results : ĠArrayList < Inspection Result >? ĊĠĠĠ Ġ, Ġval Ġinspection Ext Results : ĠArrayList < Inspection Result >? Ċ ) Ġ{ ĊĊĠĠĠ Ġval Ġresolves Local : ĠString ? ĊĠĠĠ Ġval Ġresolves External : ĠString ? ĊĠĠĠ Ġval ĠfilePath Info Ġ= ĠFile Ref ( fullPath ) ĊĠĠĠ Ġval Ġresolver Ġ= ĠGitHub Link Resolver ( Markdown TestData , ĠfilePath Info ) ĊĠĠĠ Ġval Ġlink Ref Ġ= ĠLink Ref . parse Link Ref ( filePath Info , Ġlink Address Ġ+ Ġlink Anchor . prefix With ('# '), Ġnull , Ġlink Ref Type ) ĊĠĠĠ Ġval Ġlink Ref No Ext Ġ= ĠLink Ref . parse Link Ref ( filePath Info , Ġlink Ref . filePath No Ext Ġ+ Ġlink Anchor . prefix With ('# '), Ġnull , Ġlink Ref Type ) ĊĠĠĠ Ġval Ġfile List Ġ= ĠArrayList < File Ref >( Markdown TestData . file Paths . size ) ĊĠĠĠ Ġval Ġmulti Resolve : ĠArray < String > ĊĠĠĠ Ġval Ġlocal Link Ref Ġ= Ġresolves Local Rel ĊĠĠĠ Ġval Ġexternal Link Ref Ġ= Ġresolves External Rel ĊĠĠĠ Ġval Ġskip Test Ġ= Ġlink Ref . is External Ġ&& Ġ! link Ref . filePath . startsWith ( Markdown TestData . main GitHub Repo . baseUrl Ġ?: Ġ"/", Ġignore Case Ġ= Ġtrue ) ĊĊĠĠĠ Ġprivate Ġfun Ġresolve RelativePath ( filePath : ĠString ?): ĠPath Info ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( filePath Ġ== Ġnull ) Ġnull Ġelse Ġif Ġ( filePath . startsWith (" http :// ", Ġ" https :// ")) ĠPath Info ( filePath ) Ġelse ĠPath Info . append Parts ( filePath Info . path , ĠfilePath ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġresolves Local Ġ= Ġresolve RelativePath ( resolves Local Rel )?. filePath ĊĠĠĠĠĠĠĠ Ġresolves External Ġ= Ġresolve RelativePath ( resolves External Rel )?. filePath ĊĊĠĠĠĠĠĠĠ Ġval Ġmulti Resolve Abs Ġ= ĠArrayList < String >() ĊĊĠĠĠĠĠĠĠ Ġif Ġ( multi Resolve Partial . isEmpty () Ġ&& Ġresolves Local Ġ!= Ġnull ) Ġmulti Resolve Abs . add ( resolves Local ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( path Ġin Ġmulti Resolve Partial ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresolved Path Ġ= Ġresolve RelativePath ( path )?. filePath . or Empty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Resolve Abs . add ( resolved Path ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmulti Resolve Ġ= Ġmulti Resolve Abs . toArray ( Array ( 0 ) Ġ{ Ġ"" Ġ}) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( path Ġin ĠMarkdown TestData . file Paths ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile List . add ( File Ref ( path )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ Resolve Local () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( skip Test ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġlocal Ref Ġ= Ġresolver . resolve ( link Ref , ĠW ant ( Local . REF , ĠRemote . REF ), Ġfile List ) ĊĠĠĠĠĠĠĠ ĠassertEquals Message ( location Ġ+ Ġ"\ n Local Ġdoes Ġnot Ġmatch Ġ${ resolver . get Matcher ( link Ref ). link All Match }", Ġresolves Local , Ġlocal Ref ?. filePath ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ Resolve External () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( skip Test ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġlocal Ref Ġ= Ġresolver . resolve ( link Ref , ĠW ant ( Local . NONE , ĠRemote . REF , ĠLinks . NONE ), Ġfile List ) ĊĠĠĠĠĠĠĠ ĠassertEquals Message ( location Ġ+ Ġ"\ n External Ġdoes Ġnot Ġmatch Ġ${ resolver . get Matcher ( link Ref ). link All Match }", Ġresolves External , Ġlocal Ref ?. filePath ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ Local Link Address () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( skip Test ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġlocal Ref Ġ= Ġresolver . resolve ( link Ref , ĠW ant ( Local . REF , ĠRemote . REF ), Ġfile List ) ĊĠĠĠĠĠĠĠ Ġval Ġlocal Ref Address Ġ= Ġif Ġ( local Ref Ġ!= Ġnull ) Ġresolver . link Address ( link Ref , Ġlocal Ref , Ġ(( link Ref . has Ext Ġ&& Ġlink Ref . ext Ġ== Ġlocal Ref . ext ) Ġ|| Ġ( link Ref . has Anchor Ġ&& Ġlink Anchor ?. contains ('.') Ġ?: Ġfalse )), Ġnull , Ġreduce To Anchor Ġ= Ġtrue ) Ġelse Ġnull ĊĠĠĠĠĠĠĠ ĠassertEquals Message ( location Ġ+ Ġ"\ n Local Ġlink Ġaddress Ġdoes Ġnot Ġmatch Ġ${ resolver . get Matcher ( link Ref ). link All Match }", Ġthis . link Address Text , Ġlocal Ref Address ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ Inspection Results () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( skip Test Ġ|| Ġthis . inspection Results Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġloose Target Ref Ġ= Ġresolver . resolve ( link Ref , ĠW ant ( Match . LO OSE ), Ġfile List ) Ġas ? ĠFile Ref ĊĠĠĠĠĠĠĠ Ġval Ġtarget Ref Ġ= Ġresolver . resolve ( link Ref , ĠW ant (), Ġfile List ) Ġas ? ĠFile Ref ĊĠĠĠĠĠĠĠ Ġif Ġ( target Ref Ġ!= Ġnull Ġ|| Ġloose Target Ref Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinspection Results Ġ= Ġresolver . inspect ( link Ref , Ġtarget Ref Ġ?: Ġloose Target Ref Ġas ĠFile Ref , Ġlocation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompare Un ordered Lists ( location Ġ+ Ġ"\ n Inspection Results Ġdo Ġnot Ġmatch Ġ${ resolver . get Matcher ( link Ref ). link All Match }", Ġthis . inspection Results , Ġinspection Results ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġresolve RelativePath ( filePath Info : ĠPath Info , ĠfilePath : ĠString ?): ĠPath Info ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( filePath Ġ== Ġnull ) Ġnull Ġelse ĠPath Info . append Parts ( filePath Info . path , ĠfilePath . split To Sequence ("/ ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Parameterized . Parameters ( name Ġ= Ġ"{ index }: ĠfilePath Ġ= Ġ{ 1 }, Ġlink Ref Ġ= Ġ{ 4 }, Ġlink Anchor Ġ= Ġ{ 5 }") ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġdata (): ĠCollection < Array < Any ? >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMarkdown Test __ Markdown Test _ wiki __ normal _ file _ md . data () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ