// ĠSPDX - License - Identifier : ĠBSD - 3 - Clause Ċ package Ġorg . isl ando ft ex . ar ara . core . files Ċ Ċ import Ġio . kot est . core . spec . style . Should Spec Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġorg . isl ando ft ex . ar ara . api . configuration . Execution Mode Ċ import Ġorg . isl ando ft ex . ar ara . api . files . MP P Path Ċ import Ġorg . isl ando ft ex . ar ara . api . files . Project File Ċ import Ġorg . isl ando ft ex . ar ara . api . files . to MP P Path Ċ import Ġorg . isl ando ft ex . ar ara . core . configuration . Configuration Utils Ċ import Ġorg . isl ando ft ex . ar ara . core . configuration . Execution Options Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ import Ġkotlin . io . path . create Directories Ċ import Ġkotlin . io . path . div Ċ import Ġkotlin . io . path . write Text Ċ Ċ class ĠFile Searching Test Ġ: ĠShould Spec ({ ĊĠĠĠ Ġcontext (" file Ġlist ings ") Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġprepare FileSystem (): ĠPath Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Dir Ġ= ĠFiles . create Temp Directory ( System . nano Time (). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( temp Dir Ġ/ Ġ" qu ack / qu ack "). create Directories () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" qu ack ", Ġ" qu ack / qu ack ", Ġ" qu ack / qu ack / qu ack "). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( temp Dir Ġ/ Ġ"$ it . tex "). write Text (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( temp Dir Ġ/ Ġ"$ it . txt "). write Text (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtemp Dir ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġshould (" find Ġfile Ġin Ġlisting Ġby Ġextension ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Dir Ġ= Ġprepare FileSystem (). to MP P Path () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile Searching . list Files By Extensions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Dir , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" tex "), Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). toSet () ĠshouldBe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( temp Dir Ġ/ Ġ" qu ack . tex ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile Searching . list Files By Extensions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Dir , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" tex "), Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). toSet () ĠshouldBe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" qu ack ", Ġ" qu ack / qu ack ", Ġ" qu ack / qu ack / qu ack ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġtemp Dir Ġ/ Ġ"$ it . tex " Ġ}. toSet () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġshould (" find Ġfile Ġin Ġlisting Ġby Ġpattern ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Dir Ġ= Ġprepare FileSystem (). to MP P Path () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile Searching . list Files By Patterns ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Dir , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ("* q *. txt "), Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). toSet () ĠshouldBe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( temp Dir Ġ/ Ġ" qu ack . txt ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile Searching . list Files By Patterns ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Dir , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" q *. txt "), Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). toSet () ĠshouldBe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" qu ack ", Ġ" qu ack / qu ack ", Ġ" qu ack / qu ack / qu ack ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġtemp Dir Ġ/ Ġ"$ it . txt " Ġ}. toSet () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcontext (" file Ġlookup ") Ġ{ ĊĠĠĠĠĠĠĠ Ġshould (" fail Ġlooking Ġup Ġin existent Ġfile ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile Searching . lookup File ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" QU ACK ", ĠM PP Path (". "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExecution Options () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĠshouldBe Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġshould (" fail Ġon Ġexisting Ġdirectory ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile Searching . lookup File ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"../ build Src ", ĠM PP Path (". "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExecution Options () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĠshouldBe Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġshould (" suc ceed Ġfinding Ġtex Ġfile Ġwith Ġextension ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest Dir Ġ= ĠFiles . create Temp Directory ( System . nano Time (). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġ( test Dir Ġ/ Ġ" test / qu ack / "). create Directories () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath To Test Ġ= Ġparent Ġ/ Ġ" changes . tex " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath To Test . write Text (" qu ack ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject File Ġ= ĠFile Searching . lookup File ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath To Test . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Dir . to MP P Path (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExecution Options () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġas ĠProject File ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject File . path . normalize (). toString () ĠshouldBe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath To Test . normalize (). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject File . fileType . extension ĠshouldBe Ġ" tex " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject File . fileType . pattern ĠshouldBe ĠConfiguration Utils . default FileType Patterns [" tex "] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġshould (" suc ceed Ġfinding Ġtex Ġfile Ġwithout Ġextension ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest Dir Ġ= ĠFiles . create Temp Directory ( System . nano Time (). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġ( test Dir Ġ/ Ġ" test / qu ack / "). create Directories () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( parent Ġ/ Ġ" changes . tex "). write Text (" qu ack ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject File Ġ= ĠFile Searching . lookup File ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( parent Ġ/ Ġ" changes "). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Dir . to MP P Path (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExecution Options () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġas ĠProject File ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject File . path . normalize (). toString () ĠshouldBe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( parent . normalize () Ġ/ Ġ" changes . tex "). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject File . fileType . extension ĠshouldBe Ġ" tex " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject File . fileType . pattern ĠshouldBe ĠConfiguration Utils . default FileType Patterns [" tex "] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġshould (" suc ceed Ġfinding Ġtex Ġfile Ġwith Ġextension Ġin Ġsafe Ġmode ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest Dir Ġ= ĠFiles . create Temp Directory ( System . nano Time (). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġ( test Dir Ġ/ Ġ" test / qu ack / "). create Directories () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( parent Ġ/ Ġ" changes . tex "). write Text (" qu ack ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath To Test Ġ= Ġparent Ġ/ Ġ" changes . tex " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject File Ġ= ĠFile Searching . lookup File ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath To Test . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Dir . to MP P Path (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExecution Options (). copy ( execution Mode Ġ= ĠExecution Mode . SAFE _ RUN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġas ĠProject File ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject File . path . normalize (). toString () ĠshouldBe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath To Test . normalize (). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject File . fileType . extension ĠshouldBe Ġ" tex " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject File . fileType . pattern ĠshouldBe ĠConfiguration Utils . default FileType Patterns [" tex "] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġshould (" not Ġsucceed Ġfinding Ġtex Ġfile Ġwithout Ġextension Ġin Ġsafe Ġmode ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile Searching . lookup File ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM PP Path (" src / test / resources / execution tests / changes / changes "). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM PP Path (". "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExecution Options (). copy ( execution Mode Ġ= ĠExecution Mode . SAFE _ RUN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĠshouldBe Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }) Ċ