package Ġio . kon form . validation Ċ Ċ import Ġio . kon form . validation . validator . maxLength Ċ import Ġio . kon form . validation . validator . min Length Ċ import Ġio . kon form . validation . validator . pattern Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertNotNull Ċ Ċ class ĠValidation Result Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsingle Validation () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠValidation < Person > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPerson :: name Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Length ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠPerson :: addresses Ġon Each Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAddress :: city Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCity :: postal Code Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Length ( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmaxLength ( 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpattern ("\\ d { 4 , 5 }") Ġhint Ġ(" must Ġbe Ġa Ġfour Ġor Ġfive Ġdigit Ġnumber ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġvalidation ( Person ("", Ġaddresses Ġ= ĠlistOf ( Address ( City ("", Ġ"")) ))) ĊĠĠĠĠĠĠĠ Ġprintln ( result ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , Ġresult . errors . values . flatten (). size ) ĊĊĠĠĠĠĠĠĠ Ġval Ġkey Name Ġ= Ġ". name " ĊĠĠĠĠĠĠĠ ĠassertNotNull ( result . errors [ key Name ]) ĊĠĠĠĠĠĠĠ ĠassertEquals (" must Ġhave Ġat Ġleast Ġ 1 Ġcharacters ", Ġresult . errors [ key Name ] !!. first (). message ) ĊĊĠĠĠĠĠĠĠ Ġval Ġkey Postal Code Ġ= Ġ". addresses [ 0 ]. city . postal Code " ĊĠĠĠĠĠĠĠ ĠassertEquals (" must Ġhave Ġat Ġleast Ġ 4 Ġcharacters ", Ġresult . errors [ key Postal Code ] !!. first (). message ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" must Ġbe Ġa Ġfour Ġor Ġfive Ġdigit Ġnumber ", Ġresult . errors [ key Postal Code ] !!. last (). message ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠPerson ( val Ġname : ĠString , Ġval Ġaddresses : ĠList < Address >) ĊĠĠĠ Ġprivate Ġdata Ġclass ĠAddress ( val Ġcity : ĠCity ) ĊĠĠĠ Ġprivate Ġdata Ġclass ĠCity ( val Ġpostal Code : ĠString , Ġval Ġcity Name : ĠString ) Ċ } Ċ