package Ġio . github . pel let ier 1 9 7 . csv . reader . types Ċ Ċ import Ġio . github . pel let ier 1 9 7 . csv . reader . Csv Read ers Ċ import Ġio . github . pel let ier 1 9 7 . csv . reader . delete Test File Ċ import Ġio . github . pel let ier 1 9 7 . csv . reader . filePath Ċ import Ġio . github . pel let ier 1 9 7 . csv . reader . parser . Csv Line Parser Ċ import Ġio . github . pel let ier 1 9 7 . csv . reader . write Test File Ċ import Ġio . kot est . core . spec . style . Should Spec Ċ import Ġio . kot est . matchers . collections . should Contain Exactly Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġjava . io . File Ċ import Ġjava . nio . file . Paths Ċ import Ġkotlin . streams . toList Ċ Ċ class ĠHeader Csv Reader Test Ġ: ĠShould Spec ({ ĊĠĠĠ Ġval Ġunder Test Ġ= ĠCsv Read ers . header () ĊĊĠĠĠ Ġcontext (" a Ġrequest Ġto Ġset Ġraw Ġreader Ġparameters ") Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext (" configuring Ġseparator ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" update Ġraw Ġreader Ġwith Ġgiven Ġseparator ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunder Test . with Separator ('/ '). shouldBe ( Header Csv Reader ( reader Ġ= ĠRaw Csv Reader ( parser Ġ= ĠCsv Line Parser ( separator Ġ= Ġ'/ ')) )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext (" configuring Ġdelimiter ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" update Ġraw Ġreader Ġwith Ġgiven Ġdelimiter ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunder Test . with Delimiter ('@ '). shouldBe ( Header Csv Reader ( reader Ġ= ĠRaw Csv Reader ( parser Ġ= ĠCsv Line Parser ( delimiter Ġ= Ġ'@ ')) )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext (" setting Ġtrim Ġentries Ġparameter ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" update Ġraw Ġreader Ġwith Ġgiven Ġparameter ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( false , Ġtrue ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunder Test . with Trim Entries ( it ). shouldBe ( Header Csv Reader ( reader Ġ= ĠRaw Csv Reader ( parser Ġ= ĠCsv Line Parser ( trim Entries Ġ= Ġit )))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext (" setting Ġskip Ġempty Ġlines Ġparameter ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" update Ġraw Ġreader Ġwith Ġgiven Ġparameter ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( false , Ġtrue ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunder Test . with Skip Empty Lines ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. shouldBe ( Header Csv Reader ( reader Ġ= ĠRaw Csv Reader ( parser Ġ= ĠCsv Line Parser ( skip Empty Lines Ġ= Ġit )))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext (" setting Ġcustom Ġencoding ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" update Ġraw Ġreader Ġwith Ġgiven Ġparameter ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Charsets . ISO _ 8 8 5 9 _ 1 , ĠChar sets . UTF _ 8 ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunder Test . with Encoding ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. shouldBe ( Header Csv Reader ( reader Ġ= ĠRaw Csv Reader ( parser Ġ= ĠCsv Line Parser ( encoding Ġ= Ġit )))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext (" setting Ġempty Ġstrings Ġas Ġnull Ġparameter ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" update Ġraw Ġreader Ġwith Ġgiven Ġparameter ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( false , Ġtrue ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunder Test . with Empty Strings As Null ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. shouldBe ( Header Csv Reader ( reader Ġ= ĠRaw Csv Reader ( parser Ġ= ĠCsv Line Parser ( empty Strings As Null Ġ= Ġit )))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcontext (" on Ġa Ġregular ĠCSV ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcsv Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa , b , c ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , 2 , 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġval Ġexpected Lines Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHeader Csv Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" a " Ġto Ġ" 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" b " Ġto Ġ" 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" c " Ġto Ġ" 3 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcontext (" parsing ĠCSV Ġfrom Ġstring ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" parse Ġand Ġreturn Ġall ĠCSV Ġlines Ġwith Ġtheir Ġheader ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunder Test . read ( csv ). toList (). should Contain Exactly ( expected Lines ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext (" parsing ĠCSV Ġfrom Ġlines Ġlist ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" parse Ġand Ġreturn Ġall ĠCSV Ġlines Ġwith Ġtheir Ġheader ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunder Test . read ( csv . lines ()). toList (). should Contain Exactly ( expected Lines ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext (" parsing ĠCSV Ġfrom Ġinput Ġstream ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" parse Ġand Ġreturn Ġall ĠCSV Ġlines Ġwith Ġtheir Ġheader ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunder Test . read ( csv . byte InputStream ()). toList (). should Contain Exactly ( expected Lines ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext (" parsing ĠCSV Ġfrom Ġpath ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Test Ġ{ Ġwrite Test File ( csv ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" parse Ġand Ġreturn Ġall ĠCSV Ġlines Ġwith Ġtheir Ġheader ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunder Test . read ( Paths . get ( filePath )). toList (). should Contain Exactly ( expected Lines ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext (" parsing ĠCSV Ġfrom Ġfile ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Test Ġ{ Ġwrite Test File ( csv ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" parse Ġand Ġreturn Ġall ĠCSV Ġlines Ġwith Ġtheir Ġheader ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunder Test . read ( File ( filePath )). toList (). should Contain Exactly ( expected Lines ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext (" parsing ĠCSV Ġfrom ĠURL ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Test Ġ{ Ġwrite Test File ( csv ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" parse Ġand Ġreturn Ġall ĠCSV Ġlines Ġwith Ġtheir Ġheader ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" Blocking Method In Non Blocking Context ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunder Test . read ( Paths . get ( filePath ). to Uri (). to URL ()). toList (). should Contain Exactly ( expected Lines ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcontext (" on Ġan Ġinvalid ĠCSV ") Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext (" a Ġcsv Ġwhere Ġa Ġrow Ġis Ġmissing Ġa Ġcolumn ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcsv Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa , b , c ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext (" reader Ġparses Ġempty Ġstrings Ġas Ġnull ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" return Ġthe Ġmissing Ġcolumn Ġas Ġnull ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunder Test . with Empty Strings As Null ( true ). read ( csv ). toList (). should Contain Exactly ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHeader Csv Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" a " Ġto Ġ" 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" b " Ġto Ġ" 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" c " Ġto Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext (" reader Ġleaves Ġempty Ġstrings Ġas Ġis ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" return Ġthe Ġmissing Ġcolumn Ġas Ġan Ġempty Ġstring ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunder Test . with Empty Strings As Null ( false ). read ( csv ). toList (). should Contain Exactly ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHeader Csv Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" a " Ġto Ġ" 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" b " Ġto Ġ" 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" c " Ġto Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcontext (" different Ġheader Ġprovisioning ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcsv Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa 1 , b 1 , c 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 2 , 1 4 , 6 7 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġcontext (" header Ġis Ġprovided ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġunder Test With Header Ġ= Ġunder Test . with Header ( listOf (" c 1 ", Ġ" c 2 ", Ġ" c 3 ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Lines With Header Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHeader Csv Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" c 1 " Ġto Ġ" a 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" c 2 " Ġto Ġ" b 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" c 3 " Ġto Ġ" c 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHeader Csv Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" c 1 " Ġto Ġ" 1 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" c 2 " Ġto Ġ" 1 4 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" c 3 " Ġto Ġ" 6 7 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" use Ġprovided Ġheader ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunder Test With Header . read ( csv ). toList (). shouldBe ( expected Lines With Header ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext (" header Ġis Ġnot Ġprovided ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Lines Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHeader Csv Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" a 1 " Ġto Ġ" 1 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" b 1 " Ġto Ġ" 1 4 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" c 1 " Ġto Ġ" 6 7 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" use Ġfirst Ġnon Ġempty Ġline Ġas Ġthe Ġheader Ġprovider ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunder Test . read ( csv ). toList (). shouldBe ( expected Lines ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġafter Spec Ġ{ Ġdelete Test File () Ġ} Ċ }) Ċ