package Ġcom . jetbrains . edu . course creator Ċ Ċ import Ġcom . jetbrains . edu . learning . course Format . tasks . Task Ċ Ċ enum Ġclass ĠFile Set Kind ( val Ġfile SetName : ĠString ) Ġ{ ĊĠ ĠTASK _ FILES (" task Ġfiles "), ĊĠ ĠTEST _ FILES (" test Ġfiles "), ĊĠ ĠADD ITION AL _ FILES (" additional Ġfiles "), ĊĠ ĠALL _ FILES (" files "); ĊĊĠ Ġfun Ġfile Set ( task : ĠTask ): ĠSet < String > Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠ ĠTASK _ FILES Ġ-> Ġtask . task Files . keys ĊĠĠĠ ĠTEST _ FILES Ġ-> Ġtask . tests Text . keys ĊĠĠĠ ĠADD ITION AL _ FILES Ġ-> Ġtask . additional Files . keys ĊĠĠĠ ĠALL _ FILES Ġ-> Ġtask . task Files . keys Ġ+ Ġtask . tests Text . keys Ġ+ Ġtask . additional Files . keys ĊĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠFile Check ( ĊĠ Ġval Ġtask : ĠTask , ĊĠ Ġval Ġpath : ĠString , ĊĠ Ġval Ġkind : ĠFile Set Kind , ĊĠ Ġval Ġshould Contain : ĠBoolean Ċ ) Ġ{ ĊĠ Ġfun Ġinvert (): ĠFile Check Ġ= Ġcopy ( should Contain Ġ= Ġ! should Contain ) ĊĠ Ġfun Ġcheck () Ġ{ ĊĠĠĠ Ġif Ġ( should Contain ) Ġ{ ĊĠĠĠĠĠ Ġcheck ( path Ġin Ġkind . file Set ( task )) Ġ{ ĊĠĠĠĠĠĠĠ Ġ"` $ path ` Ġshould Ġbe Ġin Ġ${ kind . file SetName } Ġof Ġ`${ task . name }` Ġtask " ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġcheck ( path Ġ! in Ġkind . file Set ( task )) Ġ{ ĊĠĠĠĠĠĠĠ Ġ"` $ path ` Ġshouldn 't Ġbe Ġin Ġ${ kind . file SetName } Ġof Ġ`${ task . name }` Ġtask " ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ infix Ġfun ĠPair < String , ĠFile Set Kind >. ` in `( task : ĠTask ): ĠFile Check Ġ= ĠFile Check ( task , Ġfirst , Ġsecond , Ġtrue ) Ċ infix Ġfun ĠPair < String , ĠFile Set Kind >. not In ( task : ĠTask ): ĠFile Check Ġ= ĠFile Check ( task , Ġfirst , Ġsecond , Ġfalse ) Ċ