package Ġkr ang l . test ; Ċ Ċ import Ġio . kot est . matchers . double s . plus Or Minus Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġkr ang l .* Ċ import Ġorg . junit . Test Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . File Ċ import Ġjava . io . Print Stream Ċ import Ġjava . net . URL Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* Ġ@ author ĠHol ger ĠBrand l Ċ Ġ*/ Ċ class ĠType Interface Test Ġ{ ĊĊĊĠĠĠ Ġval Ġusers Ġ= Ġdata Frame Of ( ĊĠĠĠĠĠĠĠ Ġ" firstName ", Ġ" lastName ", Ġ" age ", Ġ" has S udo " ĊĠĠĠ Ġ)( ĊĠĠĠĠĠĠĠ Ġ" max ", Ġ" smith ", Ġ 5 3 , Ġfalse , ĊĠĠĠĠĠĠĠ Ġ" tom ", Ġ" doe ", Ġ 3 0 , Ġfalse , ĊĠĠĠĠĠĠĠ Ġ" ev a ", Ġ" m iller ", Ġ 2 3 , Ġtrue , ĊĠĠĠĠĠĠĠ Ġnull , Ġ" me yer ", Ġ 2 3 , Ġnull ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġdata Ġclass ĠUser ( val ĠfirstName : ĠString ?, Ġval ĠlastName : ĠString , Ġval Ġage : ĠInt , Ġval Ġhas S udo : ĠBoolean ?) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġshould Ġpreserve Ġobject Ġcolumns Ġacross Ġall Ġcore Ġver bs `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// TODO ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġshould Ġallow Ġto Ġjoin Ġon Ġobject Ġcolumns `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// TODO ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġshould Ġconvert Ġdata - classes Ġto Ġdata frames `() Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠPerson ( val Ġname : ĠString , Ġval Ġage : ĠInt , Ġval Ġweight : ĠDouble ) ĊĊĠĠĠĠĠĠĠ Ġval Ġusers Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPerson (" An ne ", Ġ 2 3 , Ġ 5 5 . 4 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPerson (" T ina ", Ġ 4 0 , Ġ 6 0 . 4 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdf Ġ= Ġusers . as DataFrame () ĊĊĠĠĠĠĠĠĠ Ġdf . names ĠshouldBe ĠlistOf (" age ", Ġ" name ", Ġ" weight ") ĊĠĠĠĠĠĠĠ Ġdf [" age "][ 0 ] ĠshouldBe Ġ 2 3 ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// Ġhttps :// app . slack . com / client / T 0 9 2 2 9 ZC 6 / C 0 AV AB 9 2 L / thread / C 4 W 5 2 C FE Z - 1 5 9 3 0 9 2 4 1 9 . 0 7 9 1 0 0 ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġshould Ġinclude Ġparent Ġclass Ġattributes Ġin Ġdata frames `() Ġ{ ĊĠĠĠĠĠĠĠ Ġopen Ġclass ĠPerson ( val Ġname : ĠString ) ĊĠĠĠĠĠĠĠ Ġclass ĠManager ( name : ĠString , Ġval Ġis CE O : ĠBoolean ) Ġ: ĠPerson ( name ) ĊĊĠĠĠĠĠĠĠ Ġval Ġusers Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManager (" An ne ", Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManager (" T ina ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdf Ġ= Ġusers . as DataFrame () ĊĠĠĠĠĠĠĠ Ġdf . cols . size ĠshouldBe Ġ 2 ĊĠĠĠĠĠĠĠ Ġdf . print () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġshould Ġallow Ġto Ġmap Ġobjects Ġto Ġdf Ġand Ġback `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobj Pers ons Ġ= Ġusers . rows As < User >() ĊĠĠĠĠĠĠĠ Ġobj Pers ons . toList (). size ĠshouldBe Ġusers . n row ĊĊĊĠĠĠĠĠĠĠ Ġ// Ġand Ġback Ġto Ġdf ĊĠĠĠĠĠĠĠ Ġval Ġdf Ġ= Ġobj Pers ons . as DataFrame () ĊĠĠĠĠĠĠĠ Ġdf . n row ĠshouldBe Ġ 4 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġshould Ġallow Ġto Ġrename Ġobjet Ġcolumns `() Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Frame Of (" id ")( UUID . randomUUID ()). rename (" id " Ġto Ġ" new _ id "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnames ĠshouldBe ĠlistOf (" new _ id ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġshould Ġmap Ġrows Ġto Ġobjects Ġwith Ġcustom Ġmapping Ġscheme `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobj Pers ons Ġ= Ġusers ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. rename (" firstName " Ġto Ġ" Vor name ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. rows As < User >( mapping Ġ= Ġmap Of (" Vor name " Ġto Ġ" firstName ")) ĊĊĠĠĠĠĠĠĠ Ġobj Pers ons . toList (). size ĠshouldBe Ġusers . n row ĊĊĠĠĠĠĠĠĠ Ġobj Pers ons . first () ĠshouldBe ĠUser (" max ", Ġ" smith ", Ġ 5 3 , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġshould Ġprovide Ġthe Ġcorrect Ġschema Ġfor Ġobject Ġcolumns `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsal aries Ġ= Ġdata Frame Of (" user ", Ġ" salary ")( User (" An na ", Ġ" Do e ", Ġ 2 3 , Ġnull ), Ġ 2 3 . 3 ) ĊĊĠĠĠĠĠĠĠ Ġsal aries . print Data Class Schema (" Salary ", Ġreceiver Var Name Ġ= Ġ" sal aries ") ĊĊĠĠĠĠĠĠĠ Ġcapture Output Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsal aries . print Data Class Schema (" Salary ", Ġreceiver Var Name Ġ= Ġ" sal aries ") ĊĠĠĠĠĠĠĠ Ġ}. stdout ĠshouldBe Ġ""" ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠSal ary ( val Ġuser : ĠAny , Ġval Ġsalary : ĠDouble ) ĊĠĠĠĠĠĠĠ Ġval Ġrecords Ġ= Ġsal aries . rows As < Salary >() ĊĠĠĠĠĠĠĠ Ġ""" . trim And Rel ine () ĊĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠSal ary ( val Ġuser : ĠAny , Ġval Ġsalary : ĠDouble ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrecords Ġ= Ġsal aries . rows As < Salary >() ĊĊĠĠĠĠĠĠĠ Ġrecords . toList (). size ĠshouldBe Ġ 1 ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġshould Ġprevent Ġillegal Ġcharacters Ġin Ġgenerated Ġschemas `() Ġ{ ĊĠĠĠĠĠĠĠ Ġcapture Output Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġir is Data . print Data Class Schema ( data ClassName Ġ= Ġ" I ris Data ", Ġreceiver Var Name Ġ= Ġ" iris Data ") ĊĠĠĠĠĠĠĠ Ġ}. stdout . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontains (" se pal Length ") ĠshouldBe Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĠshouldBe Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġclass ĠI ris Data ( val Ġse pal Length : ĠDouble , Ġval Ġse pal Width : ĠDouble , Ġval Ġpet al Length : ĠDouble , Ġval Ġpet al Width : ĠDouble , Ġval Ġspecies : ĠString ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecords Ġ= Ġir is Data . rows As < I ris Data >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim And Rel ine () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// use Ġgenerated Ġcode Ġto Ġrestore Ġir is Ġflow ers ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠI ris Data ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġse pal Length : ĠDouble , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġse pal Width : ĠDouble , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpet al Length : ĠDouble , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpet al Width : ĠDouble , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspecies : ĠString ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrecords Ġ= Ġir is Data . rows As < I ris Data >() ĊĊĠĠĠĠĠĠĠ Ġrecords . first (). se pal Length ĠshouldBe Ġ( 5 . 1 Ġplus Or Minus Ġ 0 E - 3 ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** Ġprevent Ġre gress ions Ġfrom Ġ" Provide Ġmore Ġeleg ant Ġobject Ġbindings Ġ# 2 2 " */ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġshould Ġprint Ġnullable Ġdata Ġclass Ġschemes `() Ġ{ ĊĠĠĠĠĠĠĠ Ġusers . print Data Class Schema (" User ") ĊĠĠĠĠĠĠĠ Ġval Ġstdout Ġ= Ġcapture Output Ġ{ Ġusers . print Data Class Schema (" User ") Ġ}. stdout ĊĠĠĠĠĠĠĠ Ġstdout ĠshouldBe Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġclass ĠUser ( val ĠfirstName : ĠString ?, Ġval ĠlastName : ĠString , Ġval Ġage : ĠInt , Ġval Ġhas S udo : ĠBoolean ?) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecords Ġ= Ġdata Frame . rows As < User >() ĊĠĠĠĠĠĠĠ Ġ""" . trim And Rel ine () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġshould Ġallow Ġobject Ġcolumns `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid 2 Ġ= Ġir is Data . groupBy (" Species "). sum mar ize (" url ") Ġ{ ĠURL (" https :// github . com / hol ger brand l / kr ang l ") Ġ} ĊĊĠĠĠĠĠĠĠ Ġid 2 . n col ĠshouldBe Ġ( 2 ) ĊĠĠĠĠĠĠĠ Ġid 2 . print () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġshould Ġunwrap Ġproperties Ġof Ġobject Ġcolumns `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġusers Ġ= Ġdata Frame Of (" department ", Ġ" ids ") (" tech ", ĠUUID . randomUUID (), Ġ" admin ", ĠUUID . randomUUID ()) ĊĠĠĠĠĠĠĠ Ġval Ġun wrapped Ġ= Ġusers . un fold < UUID >(" ids ", Ġproperties Ġ= ĠlistOf (" variant "), Ġkeep Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġun wrapped [" variant "][ 1 ] ĠshouldBe Ġ 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĊĠĠĠ Ġfun Ġ` it Ġshould Ġunwrap Ġdee ply Ġnested Ġproperties Ġof Ġobject Ġcolumns `() Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠApplic ant ( val Ġname : ĠString , Ġval Ġbar : ĠFile , Ġval Ġstuff : ĠList < URL >) ĊĊĠĠĠĠĠĠĠ Ġval Ġapplic ants Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplic ant (" max ", ĠFile (" cv . pdf "), ĠlistOf ( URL (" http :// he ise . de "), ĠURL (" http :// github . com ")) ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplic ant (" mor itz ", ĠFile (" docs . pdf "), ĠlistOf ( URL (" http :// bin tray . com "))) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġap pl DF Ġ= Ġapplic ants . as DataFrame () ĊĊĠĠĠĠĠĠĠ Ġap pl DF . print () ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġap pl DF . schema () ĊĊĠĠĠĠĠĠĠ Ġ// Ġun fold Ġis Ġwrong Ġhere Ġbecause Ġwe Ġdon 't Ġwant Ġto Ġun fold Ġ( h orizontally ) Ġbut Ġvert ically ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġval Ġun wrapped Ġ= Ġusers . un fold < UUID >(" ids ", Ġproperties Ġ= ĠlistOf (" variant "), Ġkeep Ġ= Ġtrue ) ĊĊĊĠĠĠĠĠĠĠ Ġval Ġflat DF Ġ= Ġap pl DF . un nest (" stuff ") ĊĊĠĠĠĠĠĠĠ Ġflat DF . print () ĊĠĠĠĠĠĠĠ Ġflat DF . n row ĠshouldBe Ġ 3 ĊĠĠĠĠĠĠĠ Ġflat DF . names ĠshouldBe ĠlistOf (" bar ", Ġ" name ", Ġ" stuff ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠCar ( val Ġps : ĠInt , Ġval Ġbrand : ĠString , Ġval Ġbrand URL : ĠURL ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname : ĠString Ġ= Ġ"${ brand } Ġ${ ps }" ĊĊĠĠĠĠĠĠĠ Ġfun Ġalternative URL () Ġ= Ġbrand URL ĊĊĠĠĠĠĠĠĠ Ġfun Ġalternative URL ( region : ĠString ) Ġ= Ġbrand URL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġshould Ġunwrap Ġproperties Ġof Ġdata Ġclasses `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcars Ġ= Ġdata Frame Of (" cars ")( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCar ( 2 9 8 , Ġ" Sk oda ", ĠURL (" http :// www . sk oda . de ")), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCar ( 2 0 0 , Ġ" BM W ", ĠURL (" http :// www . bm w . de ")) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcars [" cars "]. as Type < Car >(). first () !!. name ĊĊĠĠĠĠĠĠĠ Ġval Ġun fol ded Ġ= Ġcars . un fold < Car >(" cars ", Ġkeep Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġun fol ded . names ĠshouldBe ĠlistOf (" cars ", Ġ" brand ", Ġ" brand URL ", Ġ" name ", Ġ" ps ", Ġ" alternative URL ") ĊĊĠĠĠĠĠĠĠ Ġval Ġun fol ded With Prefix Ġ= Ġcars . un fold < Car >(" cars ", Ġkeep Ġ= Ġfalse , Ġadd Prefix Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġun fol ded With Prefix . names ĠshouldBe ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" cars _ brand ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" cars _ brand URL ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" cars _ name ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" cars _ ps ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" cars _ alternative URL " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊ Ċ } Ċ Ċ class ĠValue Class Tests Ġ{ ĊĠĠĠ Ġdata Ġclass ĠSomething ( ĊĠĠĠĠĠĠĠ Ġval Ġsomething : ĠSome Value , ĊĠĠĠĠĠĠĠ Ġval Ġsomething Nullable : ĠSome Value ?, ĊĠĠĠĠĠĠĠ Ġval Ġfoo : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġbar : ĠInt ?, ĊĠĠĠĠĠĠĠ Ġval Ġcategory : ĠSome Enum ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġenum Ġclass ĠSome Enum Ġ{ ĊĠĠĠĠĠĠĠ ĠNORMAL , ĠOTHER , ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Jvm Inline ĊĠĠĠ Ġvalue Ġclass ĠSome Value ( val Ġid : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġid ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġshould Ġsupport Ġnullable Ġvalue Ġclass Ġproperties Ġin Ġas DataFrame `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdf Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSomething ( Some Value (" 1 2 3 "), Ġnull , Ġ" hey ", Ġ 4 2 , ĠSome Enum . NORMAL ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSomething ( Some Value (" 4 5 6 "), ĠSome Value (" 4 5 6 "), Ġ" ho ", Ġnull , ĠSome Enum . NORMAL ) ĊĠĠĠĠĠĠĠ Ġ). as DataFrame () ĊĊĠĠĠĠĠĠĠ Ġdf . n row ĠshouldBe Ġ 2 ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġdata Ġclass ĠCapt ured Output ( val Ġstdout : ĠString , Ġval Ġstderr : ĠString ) Ċ Ċ internal Ġfun Ġcapture Output ( expr : Ġ() Ġ-> ĠAny ): ĠCapt ured Output Ġ{ ĊĠĠĠ Ġval Ġorig Out Ġ= ĠSystem . out ĊĠĠĠ Ġval Ġorig Err Ġ= ĠSystem . err ĊĠĠĠ Ġ// Ġhttps :// stackoverflow . com / questions / 2 1 6 8 9 4 / get - an - output stream - into - a - string ĊĊĠĠĠ Ġval Ġba os Out Ġ= ĠByteArrayOutputStream () ĊĠĠĠ Ġval Ġba os Err Ġ= ĠByteArrayOutputStream () ĊĊĠĠĠ ĠSystem . set Out ( Print Stream ( ba os Out )); ĊĠĠĠ ĠSystem . set Err ( Print Stream ( ba os Err )); ĊĊĊĠĠĠ Ġ// Ġrun Ġthe Ġexpression ĊĠĠĠ Ġexpr () ĊĊĠĠĠ Ġval Ġstdout Ġ= ĠString ( ba os Out . toByteArray ()). trim () ĊĠĠĠ Ġval Ġstderr Ġ= ĠString ( ba os Err . toByteArray ()). trim () ĊĊĠĠĠ ĠSystem . set Out ( orig Out ) ĊĠĠĠ ĠSystem . set Err ( orig Err ) ĊĊĠĠĠ Ġreturn ĠCapt ured Output ( stdout , Ġstderr ) Ċ } Ċ Ċ // Ġsince Ġthe Ġtest Ġreference Ġdat Ġis Ġtypically Ġprovided Ġas Ġmulti - line Ġwhich Ġis Ġusing Ġ\ n Ġby Ġdesign , Ġwe Ġadjust Ġthe Ċ // Ġout - err Ġstream Ġresults Ġaccordingly Ġhere Ġto Ġbecome Ġplatform Ġindependent . Ċ // Ġhttps :// stackoverflow . com / questions / 4 8 9 3 3 6 4 1 / kotlin - add - car riage - return - into - mult iline - string Ċ internal Ġfun ĠString . trim And Rel ine () Ġ= Ġtrim Indent (). replace ("\ n ", ĠSystem . getProperty (" line . separator ")) ĊĊ