/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 8 - 2 0 2 2 ĠT oshi aki ĠM aki Ġ< making x @ gmail . com > Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġam . ik . y avi . fn Ċ Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . Test Ċ Ċ class ĠValidation Extensions Test Ġ{ Ċ ĉ @ Test Ċ ĉ fun Ġawait Map Success () Ġ{ Ċĉ ĉ val Ġvalidation Ġ= ĠValidation . success < String , ĠInt >( 1 ) Ċĉ ĉ val Ġret : ĠValidation < String , ĠString > Ġ= Ġrun Blocking Ġ{ Ċĉĉ ĉ validation . await Map Ġ{ Ġint ( it ) Ġ} Ċĉ ĉ } Ċĉ ĉ assertThat ( ret . isValid ). isTrue Ċĉ ĉ assertThat ( ret . value ()). isEqualTo (" Int : Ġ 1 ") Ċ ĉ } ĊĊ ĉ @ Test Ċ ĉ fun Ġawait Map Failure () Ġ{ Ċĉ ĉ val Ġvalidation Ġ= ĠValidation . failure < String , ĠInt >( listOf (" error ")) Ċĉ ĉ val Ġret : ĠValidation < String , ĠString > Ġ= Ġrun Blocking Ġ{ Ċĉĉ ĉ validation . await Map Ġ{ Ġint ( it ) Ġ} Ċĉ ĉ } Ċĉ ĉ assertThat ( ret . isValid ). isFalse Ċĉ ĉ assertThat ( ret . errors ()). contains Exactly (" error ") Ċ ĉ } ĊĊ ĉ @ Test Ċ ĉ fun Ġawait Error Map Success () Ġ{ Ċĉ ĉ val Ġvalidation Ġ= ĠValidation . success < String , ĠInt >( 1 ) Ċĉ ĉ val Ġret : ĠValidation < String , ĠInt > Ġ= Ġrun Blocking Ġ{ Ċĉĉ ĉ validation . await Map Error Ġ{ Ġstr ( it ) Ġ} Ċĉ ĉ } Ċĉ ĉ assertThat ( ret . isValid ). isTrue Ċĉ ĉ assertThat ( ret . value ()). isEqualTo ( 1 ) Ċ ĉ } ĊĊ ĉ @ Test Ċ ĉ fun Ġawait Error Map Failure () Ġ{ Ċĉ ĉ val Ġvalidation Ġ= ĠValidation . failure < String , ĠInt >( listOf (" error ")) Ċĉ ĉ val Ġret : ĠValidation < String , ĠInt > Ġ= Ġrun Blocking Ġ{ Ċĉĉ ĉ validation . await Map Error Ġ{ Ġstr ( it ) Ġ} Ċĉ ĉ } Ċĉ ĉ assertThat ( ret . isValid ). isFalse Ċĉ ĉ assertThat ( ret . errors ()). contains Exactly (" String : Ġerror ") Ċ ĉ } ĊĊ ĉ @ Test Ċ ĉ fun Ġawait Errors Map Success () Ġ{ Ċĉ ĉ val Ġvalidation Ġ= ĠValidation . success < String , ĠInt >( 1 ) Ċĉ ĉ val Ġret : ĠValidation < String , ĠInt > Ġ= Ġrun Blocking Ġ{ Ċĉĉ ĉ validation . await Map Errors Ġ{ Ġstr ( it ) Ġ} Ċĉ ĉ } Ċĉ ĉ assertThat ( ret . isValid ). isTrue Ċĉ ĉ assertThat ( ret . value ()). isEqualTo ( 1 ) Ċ ĉ } ĊĊ ĉ @ Test Ċ ĉ fun Ġawait Errors Map Failure () Ġ{ Ċĉ ĉ val Ġvalidation Ġ= ĠValidation . failure < String , ĠInt >( listOf (" error ")) Ċĉ ĉ val Ġret : ĠValidation < String , ĠInt > Ġ= Ġrun Blocking Ġ{ Ċĉĉ ĉ validation . await Map Errors Ġ{ Ġstr ( it ) Ġ} Ċĉ ĉ } Ċĉ ĉ assertThat ( ret . isValid ). isFalse Ċĉ ĉ assertThat ( ret . errors ()). contains Exactly (" String : Ġerror ") Ċ ĉ } ĊĊ ĉ @ Test Ċ ĉ fun Ġawait Errors B imap Success () Ġ{ Ċĉ ĉ val Ġvalidation Ġ= ĠValidation . success < String , ĠInt >( 1 ) Ċĉ ĉ val Ġret : ĠValidation < String , ĠString > Ġ= Ġrun Blocking Ġ{ Ċĉĉ ĉ validation . await B imap ({ Ġstr ( it ) Ġ}, Ġ{ Ġint ( it ) Ġ}) Ċĉ ĉ } Ċĉ ĉ assertThat ( ret . isValid ). isTrue Ċĉ ĉ assertThat ( ret . value ()). isEqualTo (" Int : Ġ 1 ") Ċ ĉ } ĊĊ ĉ @ Test Ċ ĉ fun Ġawait Errors B imap Failure () Ġ{ Ċĉ ĉ val Ġvalidation Ġ= ĠValidation . failure < String , ĠInt >( listOf (" error ")) Ċĉ ĉ val Ġret : ĠValidation < String , ĠString > Ġ= Ġrun Blocking Ġ{ Ċĉĉ ĉ validation . await B imap ({ Ġstr ( it ) Ġ}, Ġ{ Ġint ( it ) Ġ}) Ċĉ ĉ } Ċĉ ĉ assertThat ( ret . isValid ). isFalse Ċĉ ĉ assertThat ( ret . errors ()). contains Exactly (" String : Ġerror ") Ċ ĉ } ĊĊ ĉ @ Test Ċ ĉ fun Ġawait Errors Fold Success () Ġ{ Ċĉ ĉ val Ġvalidation Ġ= ĠValidation . success < String , ĠInt >( 1 ) Ċĉ ĉ val Ġret : ĠString Ġ= Ġrun Blocking Ġ{ Ċĉĉ ĉ validation . await Fold ({ Ġjoin ( it ) Ġ}, Ġ{ Ġint ( it ) Ġ}) Ċĉ ĉ } Ċĉ ĉ assertThat ( ret ). isEqualTo (" Int : Ġ 1 ") Ċ ĉ } ĊĊ ĉ @ Test Ċ ĉ fun Ġawait Errors Fold Failure () Ġ{ Ċĉ ĉ val Ġvalidation Ġ= ĠValidation . failure < String , ĠInt >( listOf (" e 1 ", Ġ" e 2 ")) Ċĉ ĉ val Ġret : ĠString Ġ= Ġrun Blocking Ġ{ Ċĉĉ ĉ validation . await Fold ({ Ġjoin ( it ) Ġ}, Ġ{ Ġint ( it ) Ġ}) Ċĉ ĉ } Ċĉ ĉ assertThat ( ret ). isEqualTo (" e 1 , e 2 ") Ċ ĉ } ĊĊ ĉ suspend Ġfun Ġint ( i : ĠInt ): ĠString Ġ{ Ċĉ ĉ delay ( 1 ) Ċĉ ĉ return Ġ" Int : Ġ$ i " Ċ ĉ } ĊĊ ĉ suspend Ġfun Ġstr ( s : ĠString ): ĠString Ġ{ Ċĉ ĉ delay ( 1 ) Ċĉ ĉ return Ġ" String : Ġ$ s " Ċ ĉ } ĊĊ ĉ suspend Ġfun Ġstr ( list : ĠList < String >): ĠList < String > Ġ{ Ċĉ ĉ delay ( 1 ) Ċĉ ĉ return Ġlist . map Ġ{ Ġ" String : Ġ$ it " Ġ} Ċ ĉ } ĊĊ ĉ suspend Ġfun Ġjoin ( list : ĠList < String >): ĠString Ġ{ Ċĉ ĉ delay ( 1 ) Ċĉ ĉ return Ġlist . join ToString (",") Ċ ĉ } Ċ }