/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 . ĠHer man ĠChe ung Ċ Ġ* Ċ Ġ* Ġ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 Ġio . hk hc . gradle . pom Ċ Ċ import Ġio . hk hc . gradle . pom . Person . Companion . match Ċ import Ġio . hk hc . utils . test .` Fields Ġoverlay Ġproperly ` Ċ import Ġio . kot est . core . spec . style . String Spec Ċ import Ġio . kot est . matchers . shouldBe Ċ Ċ class ĠP om People Test Ġ: ĠString Spec ({ ĊĊĠĠĠ Ġ// ĠHave Ġone Ġline Ġper Ġproperty Ġin Ġthe Ġclass ĊĠĠĠ Ġ" People Ġshall Ġoverlay Ġproperly " Ġ{ ĊĠĠĠĠĠĠĠ Ġ` Fields Ġoverlay Ġproperly `( Person :: class , Ġ{ ĠPerson () Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" Mer ging Ġempty Ġlists Ġof Ġpeople Ġand Ġobtain Ġnew Ġempty Ġlist " Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠG IV EN Ġlist Ġof Ġtwo Ġlicenses Ġwith Ġdifferent Ġnames ĊĠĠĠĠĠĠĠ Ġval Ġlist 1 Ġ= Ġmutable ListOf < Person >() ĊĊĠĠĠĠĠĠĠ Ġ// ĠAND Ġa Ġdifferent Ġlist Ġof Ġlicenses Ġwith Ġdifferent Ġnames ĊĠĠĠĠĠĠĠ Ġval Ġlist 2 Ġ= ĠlistOf < Person >() ĊĊĠĠĠĠĠĠĠ Ġ// ĠWHEN Ġmerging Ġtwo Ġlists Ġtogether ĊĠĠĠĠĠĠĠ Ġval Ġlist 3 Ġ= ĠP om . overlay ToList ( list 2 , Ġlist 1 , ĠPerson :: match ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠTHEN Ġthe Ġlist Ġbecomes Ġ... ĊĠĠĠĠĠĠĠ Ġwith ( list 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize ĠshouldBe Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĠshouldBe ĠlistOf () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" Mer ging Ġlist Ġof Ġpeople Ġand Ġupdate Ġexisting Ġitem " Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠG IV EN Ġlist Ġof Ġtwo Ġlicenses Ġwith Ġdifferent Ġnames ĊĠĠĠĠĠĠĠ Ġval Ġlist 1 Ġ= Ġmutable ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPerson ( id Ġ= Ġ" people _ id _ 1 ", Ġname Ġ= Ġ" people _ name _ 1 ", Ġemail Ġ= Ġ" people _ email _ 1 "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPerson ( id Ġ= Ġ" people _ id _ 2 ", Ġname Ġ= Ġ" people _ name _ 2 ", Ġemail Ġ= Ġ" people _ email _ 2 ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAND Ġa Ġdifferent Ġlist Ġof Ġlicenses Ġwith Ġsome Ġitems ' Ġname Ġin Ġfirst Ġlist ĊĠĠĠĠĠĠĠ Ġval Ġlist 2 Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPerson ( id Ġ= Ġ" people _ id _ 2 ", Ġname Ġ= Ġ" people _ name _ 2 ", Ġemail Ġ= Ġ" people _ email _ 2 _ changed "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPerson ( id Ġ= Ġ" people _ id _ 3 ", Ġname Ġ= Ġ" people _ name _ 3 ", Ġemail Ġ= Ġ" people _ email _ 3 ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWHEN Ġmerging Ġtwo Ġlists Ġtogether ĊĠĠĠĠĠĠĠ Ġval Ġlist 3 Ġ= ĠP om . overlay ToList ( list 2 , Ġlist 1 , ĠPerson :: match ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠTHEN Ġthe Ġitems Ġin Ġthe Ġsecond Ġlist Ġoverlay Ġthe Ġitems Ġin Ġthe Ġfirst Ġlist ĊĠĠĠĠĠĠĠ Ġwith ( list 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize ĠshouldBe Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĠshouldBe ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPerson ( id Ġ= Ġ" people _ id _ 1 ", Ġname Ġ= Ġ" people _ name _ 1 ", Ġemail Ġ= Ġ" people _ email _ 1 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPerson ( id Ġ= Ġ" people _ id _ 2 ", Ġname Ġ= Ġ" people _ name _ 2 ", Ġemail Ġ= Ġ" people _ email _ 2 _ changed "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPerson ( id Ġ= Ġ" people _ id _ 3 ", Ġname Ġ= Ġ" people _ name _ 3 ", Ġemail Ġ= Ġ" people _ email _ 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }) Ċ