/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 7 ĠE vid ent ĠSolutions ĠO y Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ Ġ* Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN Ċ Ġ* ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġorg . d ales b red Ċ Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġjava . util .* Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertNull Ċ Ċ class ĠDatabase Optional Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdb Ġ= ĠTest Database Provider . create InMemory H SQL Database () ĊĊĠĠĠ Ġ@ get : Rule Ġval Ġrule Ġ= ĠTransaction al Tests Rule ( db ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġempty Optional Is Bound As Null () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertNull ( db . find Unique ( Int :: class . java ObjectType , Ġ" values Ġ( cast Ġ(? Ġas Ġint )) ", ĠOptional . empty < Any > ())) ĊĠĠĠĠĠĠĠ ĠassertNull ( db . find Unique ( Int :: class . java ObjectType , Ġ" values Ġ( cast Ġ(? Ġas Ġint )) ", ĠOptional Int . empty ())) ĊĠĠĠĠĠĠĠ ĠassertNull ( db . find Unique ( Long :: class . java ObjectType , Ġ" values Ġ( cast Ġ(? Ġas Ġint )) ", ĠOptional Long . empty ())) ĊĠĠĠĠĠĠĠ ĠassertNull ( db . find Unique ( Double :: class . java ObjectType , Ġ" values Ġ( cast Ġ(? Ġas Ġfloat )) ", ĠOptional Double . empty ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġnon Empty Optional Is Bound As Value () Ġ{ ĊĠĠĠĠĠĠĠ Ġdb . update (" drop Ġtable Ġif Ġexists Ġoptional _ test ") ĊĠĠĠĠĠĠĠ Ġdb . update (" create Ġtable Ġoptional _ test Ġ( val ĠVARCHAR ( 2 0 )) ") ĊĊĠĠĠĠĠĠĠ Ġdb . update (" insert Ġinto Ġoptional _ test Ġ( val ) Ġvalues Ġ(? )", ĠOptional . of (" foo ")) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġdb . find Unique Int (" select Ġcount (*) Ġfrom Ġoptional _ test Ġwhere Ġval Ġ= Ġ' foo ' ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġnull Are Handled As Empty () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= Ġdb . find Unique ( Optional Container :: class . java , Ġ" select Ġ( cast Ġ( null Ġas Ġint )) Ġas Ġoptional Int , Ġ( cast Ġ( null Ġas Ġint )) Ġas Ġoptional Integer , Ġnull Ġas Ġoptional String Ġfrom Ġ( values Ġ( 0 )) ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( Optional Int . empty (), Ġobj . optional Int ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Optional . empty (), Ġobj . optional Integer ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Optional . empty (), Ġobj . optional String ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġnon Null s Are Handled As Values () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= Ġdb . find Unique ( Optional Container :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġ 3 5 ĠAS Ġoptional Int , Ġ 5 3 ĠAS Ġoptional Integer , Ġ' foo ' ĠAS Ġoptional String , Ġ 4 2 4 2 4 2 4 Ġas Ġoptional Long , Ġ 4 2 4 . 2 Ġas Ġoptional Double ĠFROM Ġ( VALUES Ġ( 0 )) ") ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( Optional Int . of ( 3 5 ), Ġobj . optional Int ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Optional . of ( 5 3 ), Ġobj . optional Integer ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Optional . of (" foo "), Ġobj . optional String ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Optional Long . of ( 4 2 4 2 4 2 4 ), Ġobj . optional Long ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Optional Double . of ( 4 2 4 . 2 ), Ġobj . optional Double ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠOptional Container Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġoptional Int : ĠOptional Int ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġoptional Integer : ĠOptional < Int > ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġoptional String : ĠOptional < String > ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġoptional Long : ĠOptional Long ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġoptional Double : ĠOptional Double ĊĠĠĠ Ġ} Ċ } Ċ