package Ġcom . save our tool . save . core Ċ Ċ import Ġcom . save our tool . save . core . files . Config Detector Ċ import Ġcom . save our tool . save . core . files . create File Ċ import Ġcom . save our tool . save . create TempDir Ċ Ċ import Ġok io . FileSystem Ċ Ċ import Ġkotlin . test . After Test Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assert Fails With Ċ import Ġkotlin . test . assertNotNull Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠConfig Detector Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġfs Ġ= ĠFileSystem . SYSTEM ĊĠĠĠ Ġprivate Ġval Ġtmp Dir Ġ= Ġfs . create TempDir ( Config Detector Test :: class . simple Name !! ) ĊĠĠĠ Ġprivate Ġval Ġconfig Detector Ġ= ĠConfig Detector ( fs ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġdetect Ġsingle Ġfile `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġfs . create File ( tmp Dir Ġ/ Ġ" save . toml ") ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġconfig Detector . config FromFile ( file ) ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġfail Ġon Ġthe Ġinvalid Ġfile `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġfs . create File ( tmp Dir Ġ/ Ġ" random . text ") ĊĠĠĠĠĠĠĠ Ġassert Fails With < IllegalArgumentException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Detector . config FromFile ( file ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġdetect Ġsingle Ġfile Ġfrom Ġa Ġdirectory `() Ġ{ ĊĠĠĠĠĠĠĠ Ġfs . create File ( tmp Dir Ġ/ Ġ" save . toml ") ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġconfig Detector . config FromFile ( tmp Dir ) ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġdetect Ġstarting Ġfrom Ġbottom `() Ġ{ ĊĠĠĠĠĠĠĠ Ġfs . create File ( tmp Dir Ġ/ Ġ" save . toml ") ĊĠĠĠĠĠĠĠ Ġval Ġnested Dir Ġ= Ġtmp Dir Ġ/ Ġ" nested Dir " ĊĠĠĠĠĠĠĠ Ġfs . create Directory ( nested Dir ) ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġfs . create File ( nested Dir Ġ/ Ġ" save . toml ") ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġconfig Detector . config FromFile ( file ) ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( result ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( result . parent Config ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( result . parent Config !!. child Configs . isNotEmpty ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġdetect Ġstarting Ġfrom Ġbottom Ġwith Ġmultiple Ġparent Ġconfigs `() Ġ{ ĊĠĠĠĠĠĠĠ Ġfs . create File ( tmp Dir Ġ/ Ġ" save . toml ") ĊĠĠĠĠĠĠĠ Ġval Ġnested Dir 1 Ġ= Ġtmp Dir Ġ/ Ġ" nested Dir 1 " ĊĠĠĠĠĠĠĠ Ġfs . create Directory ( nested Dir 1 ) ĊĠĠĠĠĠĠĠ Ġfs . create File ( nested Dir 1 Ġ/ Ġ" save . toml ") ĊĠĠĠĠĠĠĠ Ġval Ġnested Dir 2 Ġ= Ġnested Dir 1 Ġ/ Ġ" nested Dir 2 " ĊĠĠĠĠĠĠĠ Ġfs . create Directory ( nested Dir 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġfs . create File ( nested Dir 2 Ġ/ Ġ" save . toml ") ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġconfig Detector . config FromFile ( file ) ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( result ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġresult . parent Configs (). count ()) ĊĠĠĠĠĠĠĠ Ġresult . parent Configs (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( it . child Configs . isNotEmpty (), Ġ" Child Ġconfigs Ġfor Ġconfig Ġ@ ${ it . location } Ġare Ġempty ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġdetect Ġmultiple Ġfiles Ġstarting Ġfrom Ġtop `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparent File Ġ= Ġfs . create File ( tmp Dir Ġ/ Ġ" save . toml ") ĊĠĠĠĠĠĠĠ Ġval Ġnested Dir Ġ= Ġtmp Dir Ġ/ Ġ" nested Dir " ĊĠĠĠĠĠĠĠ Ġfs . create Directory ( nested Dir ) ĊĠĠĠĠĠĠĠ Ġfs . create File ( nested Dir Ġ/ Ġ" save . toml ") ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġconfig Detector . config FromFile ( parent File ) ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( result ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( result . child Configs . isNotEmpty ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġdetect Ġmultiple Ġfiles Ġstarting Ġfrom Ġthe Ġmiddle `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsave . toml ĊĠĠĠĠĠĠĠ Ġ// Ġnested Dir 1 ĊĠĠĠĠĠĠĠ Ġ// Ġ| ___ save . toml Ġ Ġ<-- Ġstarting Ġsearch Ġfrom Ġthis ĊĠĠĠĠĠĠĠ Ġ// Ġ| ___ nested Dir 2 ĊĠĠĠĠĠĠĠ Ġ// Ġ| Ġ| ___ save . toml ĊĠĠĠĠĠĠĠ Ġ// Ġ| ___ nested Dir 3 ĊĠĠĠĠĠĠĠ Ġ// Ġ| Ġ| ___ nested Dir 4 ĊĠĠĠĠĠĠĠ Ġ// Ġ| Ġ| Ġ| ___ save . toml ĊĠĠĠĠĠĠĠ Ġfs . create File ( tmp Dir Ġ/ Ġ" save . toml ") ĊĠĠĠĠĠĠĠ Ġval Ġnested Dir 1 Ġ= Ġtmp Dir Ġ/ Ġ" nested Dir 1 " ĊĠĠĠĠĠĠĠ Ġfs . create Directory ( nested Dir 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġfs . create File ( nested Dir 1 Ġ/ Ġ" save . toml ") ĊĠĠĠĠĠĠĠ Ġfs . create Directory ( nested Dir 1 Ġ/ Ġ" nested Dir 2 ") ĊĠĠĠĠĠĠĠ Ġfs . create Directory ( nested Dir 1 Ġ/ Ġ" nested Dir 3 ") ĊĠĠĠĠĠĠĠ Ġfs . create File ( nested Dir 1 Ġ/ Ġ" nested Dir 2 " Ġ/ Ġ" save . toml ") ĊĠĠĠĠĠĠĠ Ġfs . create Directory ( nested Dir 1 Ġ/ Ġ" nested Dir 3 " Ġ/ Ġ" nested Dir 4 ") ĊĠĠĠĠĠĠĠ Ġfs . create File ( nested Dir 1 Ġ/ Ġ" nested Dir 3 " Ġ/ Ġ" nested Dir 4 " Ġ/ Ġ" save . toml ") ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġconfig Detector . config FromFile ( file ) ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( result ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġresult . parent Configs (). count ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġresult . child Configs . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġdetect Ġconfig Ġfile Ġfrom Ġsingle ĠTest Ġfile `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġfs . create File ( tmp Dir Ġ/ Ġ" Feature 1 Test . java ") ĊĠĠĠĠĠĠĠ Ġfs . create File ( tmp Dir Ġ/ Ġ" save . toml ") ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġconfig Detector . config FromFile ( file ) ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After Test ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġfs . delete Re cursively ( tmp Dir ) ĊĠĠĠ Ġ} Ċ } Ċ