package Ġdev . wen ge le f . validate Ċ Ċ import Ġio . kot lint est . matchers . collections . should Contain Ċ import Ġio . kot lint est . matchers . collections . should Contain Exactly Ċ import Ġio . kot lint est . should Ċ import Ġio . kot lint est . shouldBe Ċ import Ġio . kot lint est . specs . Free Spec Ċ Ċ class ĠAnd Spec Ġ: ĠFree Spec () Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbob Ġ= ĠUser ( 1 8 , Ġ" Bob ") ĊĠĠĠĠĠĠĠ Ġval Ġbill Ġ= ĠUser ( 2 1 , Ġ" Bill ") ĊĠĠĠĠĠĠĠ Ġval Ġun born Ġ= ĠUser (- 1 , Ġ"") ĊĊĠĠĠĠĠĠĠ Ġval Ġis B orn Ġ= Ġvalidate < String , ĠUser > Ġ{ ĠUser :: age . validate (" Is Ġnot Ġborn ") Ġ{ Ġit Ġ>= Ġ 0 Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġis Blank Name Ġ= Ġvalidate < String , ĠUser > Ġ{ ĠUser :: name . validate (" Name Ġis ĠBl ank ") Ġ{ Ġit . isNotBlank () Ġ} Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" and " Ġshould Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" chain Ġvalid Ġvalidations Ġof Ġdifferent ĠSubject s " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbob . is B orn () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and Ġ{ Ġbill . is B orn () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isValid () ĠshouldBe Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" chain Ġvalid Ġvalidations Ġon Ġthe Ġsame ĠSubject " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbob . is B orn () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and ( isBlank Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isValid () ĠshouldBe Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" contain Ġerrors Ġif Ġone Ġof Ġthe Ġchained Ġvalidation Ġfails " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult 1 Ġ= Ġun born . is B orn () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and ( isBlank Name ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult 1 . fold ({ Ġerrors Ġ-> Ġerrors Ġshould Contain Exactly ĠlistOf (" Is Ġnot Ġborn ") Ġ}, Ġ{ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult 2 Ġ= Ġun born . isBlank Name () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and ( is B orn ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult 2 . fold ({ Ġerrors Ġ-> Ġerrors Ġshould Contain Exactly ĠlistOf (" Name Ġis ĠBl ank ") Ġ}, Ġ{ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" be ĠInvalid Ġif Ġone Ġfails " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun born . is B orn () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and Ġ{ Ġbob . is B orn () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isValid () ĠshouldBe Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbob . is B orn () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and Ġ{ Ġun born . is B orn () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isValid () ĠshouldBe Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" contain Ġerrors Ġif Ġone Ġfails " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun born . is B orn (). and Ġ{ Ġbob . is B orn () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fold ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġerrors Ġ-> Ġerrors Ġshould Contain Ġ" Is Ġnot Ġborn " Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġdata Ġclass ĠUser ( val Ġage : ĠInt , Ġval Ġname : ĠString ) Ċ }