package Ġorg . jetbrains . dok ka . it Ċ Ċ import Ġorg . js oup . J soup Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . rules . Temporary Folder Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . JUnit 4 Ċ import Ġjava . io . File Ċ import Ġjava . net . URL Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertFalse Ċ import Ġkotlin . test . assertNotNull Ċ import Ġkotlin . test . assertTrue Ċ Ċ @ RunWith ( JUnit 4 :: class ) Ċ abstract Ġclass ĠAbstract IntegrationTest Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġtemporary Test Folder Ġ= ĠTemporary Folder () ĊĊĠĠĠ Ġval Ġproject Dir Ġget () Ġ= ĠFile ( temporary Test Folder . root , Ġ" project ") ĊĊĠĠĠ Ġfun ĠFile . all Desc end ent sWith Extension ( extension : ĠString ): ĠSequence < File > Ġ= ĊĠĠĠĠĠĠĠ Ġthis . walk Top Down (). filter Ġ{ Ġit . isFile Ġ&& Ġit . extension Ġ== Ġextension Ġ} ĊĊĠĠĠ Ġfun ĠFile . all Html Files (): ĠSequence < File > Ġ= Ġall Desc end ent sWith Extension (" html ") ĊĊĠĠĠ Ġfun ĠFile . all G fm Files (): ĠSequence < File > Ġ= Ġall Desc end ent sWith Extension (" md ") ĊĊĠĠĠ Ġprotected Ġfun Ġassert Contains NoError Class ( file : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Text Ġ= Ġfile . read Text () ĊĠĠĠĠĠĠĠ ĠassertFalse ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile Text . contains (" ERROR ĠCLASS ", Ġignore Case Ġ= Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unexpected Ġ` ERROR ĠCLASS ` Ġin Ġ${ file . path }\ n " Ġ+ Ġfile Text ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġassert No Empty Links ( file : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġregex Ġ= ĠRegex ("[ \" '] #[ \" '] ") ĊĠĠĠĠĠĠĠ Ġval Ġfile Text Ġ= Ġfile . read Text () ĊĠĠĠĠĠĠĠ ĠassertFalse ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile Text . contains ( regex ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unexpected Ġempty Ġlink Ġin Ġ${ file . path }\ n " Ġ+ Ġfile Text ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġassert NoUn resolved Links ( file : ĠFile , Ġexceptions : ĠSet < String > Ġ= Ġempty Set ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Text Ġ= Ġfile . read Text () ĊĠĠĠĠĠĠĠ Ġval Ġregex Ġ= ĠRegex (""" data - un resolved - link ="\ [( .+ ?( ?= ] ")) """) ĊĠĠĠĠĠĠĠ Ġval Ġmatch Ġ= Ġregex . findAll ( file Text ). map Ġ{ Ġit . groups [ 1 ] !!. value Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatch . filter Not Ġ{ Ġit Ġin Ġexceptions Ġ}. toList (). isEmpty (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unexpected Ġun resolved Ġlink Ġin Ġ${ file . path }\ n " Ġ+ Ġfile Text ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġassert No Href To Missing Local File Or Directory ( ĊĠĠĠĠĠĠĠ Ġfile : ĠFile , Ġfile Extensions : ĠSet < String > Ġ= Ġset Of (" html ") ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Text Ġ= Ġfile . read Text () ĊĠĠĠĠĠĠĠ Ġval Ġhtml Ġ= ĠJ soup . parse ( file Text ) ĊĠĠĠĠĠĠĠ Ġhtml . all Elements . toList (). forEach Ġ{ Ġelement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhref Ġ= Ġ( element . attr (" href ") Ġ?: Ġreturn @ forEach ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( href . startsWith (" https ")) Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( href . startsWith (" http ")) Ġreturn @ forEach ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhref Without An chors Ġ= Ġif Ġ( href . contains ("# ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhref Spl its Ġ= Ġhref . split ("# ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( href Spl its . count () Ġ!= Ġ 2 ) Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhref Spl its . first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġhref ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget File Ġ= Ġif Ġ( href . startsWith (" file :/ ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( URL ( href Without An chors ). path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( file . parent , Ġhref Without An chors ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( target File . extension . isNotEmpty () Ġ&& Ġtarget File . extension Ġ! in Ġfile Extensions ) Ġreturn @ forEach ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( target File . extension . isEmpty () Ġ|| Ġtarget File . extension Ġ== Ġ" html " Ġ&& Ġ! href . startsWith ("# ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget File . exists (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ file . relative To ( project Dir ). path }: Ġhref =\" $ href \"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" file Ġdoes Ġnot Ġexist : Ġ${ target File . path }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġassert No Sup pressed Marker ( file : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Text Ġ= Ġfile . read Text () ĊĠĠĠĠĠĠĠ ĠassertFalse ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile Text . contains (" Â§ SUP PRES SED Â§ "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unexpected Ġ` Â§ SUP PRES SED Â§ ` Ġin Ġfile Ġ${ file . path }" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġassert No Empty Spans ( file : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Text Ġ= Ġfile . read Text () ĊĠĠĠĠĠĠĠ ĠassertFalse ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile Text . contains ( Regex (""" < span >\ s *</ span > "" ")), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unexpected Ġempty Ġ< span ></ span > Ġin Ġfile Ġ${ file . path }" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġassert NoUn subst it uted Templates In Html ( file : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparsed File Ġ= ĠJ soup . parse ( file , Ġ" UTF - 8 ") ĊĠĠĠĠĠĠĠ ĠassertTrue ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparsed File . select (" dok ka - template - command "). isEmpty (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Expected Ġall Ġtemplates Ġto Ġbe Ġsubstit uted " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAssert s Ġthat Ġ[ content Files ] Ġhave Ġno Ġpages Ġwhere Ġcontent Ġcontains Ġspecial Ġvisibility Ġmarkers , ĊĠĠĠĠ Ġ* Ġsuch Ġas ĠÂ§ INTERNAL Â§ Ġfor Ġ` internal `, ĠÂ§ PROTECT ED Â§ Ġfor Ġ` protected ` Ġand ĠÂ§ PRIVATE Â§ Ġfor Ġ` private ` Ġmodifiers ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġcan Ġbe Ġused Ġto Ġcheck Ġwhether Ġactual Ġdocumented Ġcode Ġcorresponds Ġto Ġconfigured Ġdocumented Ġvisibility ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontent Files Ġany Ġreadable Ġcontent Ġfile Ġsuch Ġas Ġhtml / md / rst / etc ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġassert Content Visibility ( ĊĠĠĠĠĠĠĠ Ġcontent Files : ĠList < File >, ĊĠĠĠĠĠĠĠ Ġdocument Public : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġdocument Protected : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġdocument Internal : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġdocument Private : ĠBoolean ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhas Public Ġ= Ġcontent Files . any Ġ{ Ġfile Ġ-> Ġ" Â§ PUBLIC Â§ " Ġin Ġfile . read Text () Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( document Public , Ġhas Public , Ġ" Expected Ġcontent Ġvisibility Ġand Ġfile Ġcontent Ġdo Ġnot Ġmatch Ġfor Ġpublic ") ĊĊĠĠĠĠĠĠĠ Ġval Ġhas Internal Ġ= Ġcontent Files . any Ġ{ Ġfile Ġ-> Ġ" Â§ INTERNAL Â§ " Ġin Ġfile . read Text () Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdocument Internal , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Internal , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Expected Ġcontent Ġvisibility Ġand Ġfile Ġcontent Ġdo Ġnot Ġmatch Ġfor Ġinternal " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġhas Protected Ġ= Ġcontent Files . any Ġ{ Ġfile Ġ-> Ġ" Â§ PROTECT ED Â§ " Ġin Ġfile . read Text () Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdocument Protected , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Protected , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Expected Ġcontent Ġvisibility Ġand Ġfile Ġcontent Ġdo Ġnot Ġmatch Ġfor Ġprotected " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġhas Private Ġ= Ġcontent Files . any Ġ{ Ġfile Ġ-> Ġ" Â§ PRIVATE Â§ " Ġin Ġfile . read Text () Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdocument Private , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Private , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Expected Ġcontent Ġvisibility Ġand Ġfile Ġcontent Ġdo Ġnot Ġmatch Ġfor Ġprivate " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġthat Ġ[ output Files ] Ġcontain Ġspecific Ġfile Ġpaths Ġprovided Ġin Ġ[ expected FilePath s ]. ĊĠĠĠĠ Ġ* ĠCan Ġbe Ġused Ġfor Ġchecking Ġwhether Ġexpected Ġfolders / pages Ġhave Ġbeen Ġcreated . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġassert Contains FilePath s ( output Files : ĠList < File >, Ġexpected FilePath s : ĠList < Regex >) Ġ{ ĊĠĠĠĠĠĠĠ Ġexpected FilePath s . forEach Ġ{ Ġpath Regex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Files . any Ġ{ Ġit . absolute Path . contains ( path Regex ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Expected Ġto Ġfind Ġa Ġfile Ġwith Ġpath Ġregex Ġ$ path Regex , Ġbut Ġfound Ġnothing " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ