/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠP av lo ĠSt avy ts ky i Ċ Ġ* Ċ Ġ* Ġ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 Ġorg . mor fly . air in . star l ark . lang . feature Ċ Ċ import Ġorg . mor fly . air in . star l ark . elements .* Ċ import Ġorg . mor fly . air in . star l ark . lang . StringType Ċ import Ġio . kot est . core . spec . style . Feature Spec Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġio . kot est . matchers . types . shouldBe TypeOf ĊĊ Ċ class ĠBinary Plus Feature Tests Ġ: ĠFeature Spec ({ ĊĊĠĠĠ Ġfeature (" binary Ġplus Ġfeature ") Ġ{ ĊĊĠĠĠĠĠĠĠ Ġscenario (" string Ġconcat enation ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBinary Plus Feature UnderTest (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconcat Ġ= Ġ" string 1 " Ġ` + ` Ġ" string 2 " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġassertions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . shouldBe TypeOf < String Binary Operation >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . left ĠshouldBe ĠString Literal (" string 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . operator ĠshouldBe ĠBinary Operator . PLUS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . right ĠshouldBe ĠString Literal (" string 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġscenario (" string Ġconcat enation Ġwith Ġnull ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBinary Plus Feature UnderTest (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconcat Ġ= Ġ" string " Ġ` + ` Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġassertions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . shouldBe TypeOf < String Binary Operation >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . left ĠshouldBe ĠString Literal (" string ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . operator ĠshouldBe ĠBinary Operator . PLUS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . right ĠshouldBe ĠNone Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġscenario (" string Ġconcat enation Ġwith Ġnull Ġfirst ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBinary Plus Feature UnderTest (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconcat Ġ= Ġnull Ġ` + ` Ġ" string " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġassertions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . shouldBe TypeOf < String Binary Operation >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . left ĠshouldBe ĠNone Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . operator ĠshouldBe ĠBinary Operator . PLUS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . right ĠshouldBe ĠString Literal (" string ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġscenario (" list Ġconcat enation ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBinary Plus Feature UnderTest (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconcat Ġ= Ġlist [" item 1 "] Ġ` + ` Ġlist [" item 2 "] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġassertions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . shouldBe TypeOf < List Binary Operation < StringType >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . left . let Ġ{ Ġleft Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . shouldBe TypeOf < List Expression <* >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . value ĠshouldBe ĠlistOf ( StringLiteral (" item 1 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . operator ĠshouldBe ĠBinary Operator . PLUS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . right . let Ġ{ Ġright Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright . shouldBe TypeOf < List Expression <* >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright . value ĠshouldBe ĠlistOf ( StringLiteral (" item 2 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġscenario (" list Ġconcat enation Ġwith Ġnull ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBinary Plus Feature UnderTest (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconcat Ġ= Ġlist [" item "] Ġ` + ` Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġassertions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . shouldBe TypeOf < List Binary Operation < StringType >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . left . let Ġ{ Ġleft Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . shouldBe TypeOf < List Expression <* >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . value ĠshouldBe ĠlistOf ( StringLiteral (" item ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . operator ĠshouldBe ĠBinary Operator . PLUS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . right ĠshouldBe ĠNone Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġscenario (" list Ġconcat enation Ġwith Ġnull Ġfirst ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBinary Plus Feature UnderTest (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconcat Ġ= Ġnull Ġ` + ` Ġlist [" item 2 "] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġassertions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . shouldBe TypeOf < List Binary Operation < StringType >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . left ĠshouldBe ĠNone Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . operator ĠshouldBe ĠBinary Operator . PLUS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . right . let Ġ{ Ġright Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright . shouldBe TypeOf < List Expression <* >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright . value ĠshouldBe ĠlistOf ( StringLiteral (" item 2 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġscenario (" dictionary Ġconcat enation ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBinary Plus Feature UnderTest (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconcat Ġ= Ġdict Ġ{ Ġ" key 1 " Ġto Ġ" value 1 " Ġ} Ġ` + ` Ġdict Ġ{ Ġ" key 2 " Ġto Ġ" value 2 " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġassertions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . shouldBe TypeOf < Dictionary Binary Operation < StringType , ĠString Type >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . left . let Ġ{ Ġleft Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . shouldBe TypeOf < Dictionary Expression >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . value . entries . size ĠshouldBe Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . value . entries . first (). let Ġ{ Ġ( key , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey ĠshouldBe ĠString Literal (" key 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . shouldBe TypeOf < Dynamic Expression >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . value ĠshouldBe ĠString Literal (" value 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . operator ĠshouldBe ĠBinary Operator . PLUS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . right . let Ġ{ Ġright Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright . shouldBe TypeOf < Dictionary Expression >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright . value . entries . size ĠshouldBe Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright . value . entries . first (). let Ġ{ Ġ( key , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey ĠshouldBe ĠString Literal (" key 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . shouldBe TypeOf < Dynamic Expression >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . value ĠshouldBe ĠString Literal (" value 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġscenario (" dictionary Ġconcat enation Ġwith Ġnull ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBinary Plus Feature UnderTest (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconcat Ġ= Ġdict Ġ{ Ġ" key " Ġto Ġ" value " Ġ} Ġ` + ` Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġassertions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . shouldBe TypeOf < Dictionary Binary Operation < StringType , ĠString Type >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . left . let Ġ{ Ġleft Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . shouldBe TypeOf < Dictionary Expression >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . value . entries . size ĠshouldBe Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . value . entries . first (). let Ġ{ Ġ( key , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey ĠshouldBe ĠString Literal (" key ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . shouldBe TypeOf < Dynamic Expression >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . value ĠshouldBe ĠString Literal (" value ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . operator ĠshouldBe ĠBinary Operator . PLUS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . right ĠshouldBe ĠNone Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġscenario (" dictionary Ġconcat enation Ġwith Ġnull Ġfirst Ġin Ġshort Ġexpression Ġform ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBinary Plus Feature UnderTest (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconcat Ġ= Ġnull Ġ` + ` Ġ{ Ġ" key " Ġto Ġ" value " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġassertions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . shouldBe TypeOf < Dictionary Binary Operation < StringType , ĠString Type >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . left ĠshouldBe ĠNone Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . operator ĠshouldBe ĠBinary Operator . PLUS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . right . let Ġ{ Ġright Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright . shouldBe TypeOf < Dictionary Expression >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright . value . entries . size ĠshouldBe Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright . value . entries . first (). let Ġ{ Ġ( key , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey ĠshouldBe ĠString Literal (" key ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . shouldBe TypeOf < Dynamic Expression >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . value ĠshouldBe ĠString Literal (" value ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġscenario (" multiple Ġstring Ġconcaten ations ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBinary Plus Feature UnderTest (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconcat Ġ= Ġ" string 1 " Ġ` + ` Ġ" string 2 " Ġ` + ` Ġ" string 3 " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġassertions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . shouldBe TypeOf < String Binary Operation >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . left . let Ġ{ Ġleft Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . shouldBe TypeOf < String Binary Operation >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . left ĠshouldBe ĠString Literal (" string 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . operator ĠshouldBe ĠBinary Operator . PLUS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . right ĠshouldBe ĠString Literal (" string 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . operator ĠshouldBe ĠBinary Operator . PLUS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . right ĠshouldBe ĠString Literal (" string 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġscenario (" multiple Ġlist Ġconcaten ations ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBinary Plus Feature UnderTest (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconcat Ġ= Ġlist [" item 1 "] Ġ` + ` Ġlist [" item 2 "] Ġ` + ` Ġlist [" item 3 "] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġassertions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . shouldBe TypeOf < List Binary Operation < StringType >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . left . let Ġ{ Ġleft Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . shouldBe TypeOf < List Binary Operation < StringType >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . left . let Ġ{ Ġnested Left Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnested Left . shouldBe TypeOf < List Expression <* >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnested Left . value ĠshouldBe ĠlistOf ( StringLiteral (" item 1 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . operator ĠshouldBe ĠBinary Operator . PLUS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . right . let Ġ{ Ġnested Right Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnested Right . shouldBe TypeOf < List Expression <* >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnested Right . value ĠshouldBe ĠlistOf ( StringLiteral (" item 2 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . operator ĠshouldBe ĠBinary Operator . PLUS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . right . let Ġ{ Ġright Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright . shouldBe TypeOf < List Expression <* >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright . value ĠshouldBe ĠlistOf ( StringLiteral (" item 3 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġscenario (" multiple Ġdictionary Ġconcaten ations ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBinary Plus Feature UnderTest (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconcat Ġ= Ġdict Ġ{ Ġ" key 1 " Ġto Ġ" value 2 " Ġ} Ġ` + ` Ġ{ Ġ" key 2 " Ġto Ġ" value 2 " Ġ} Ġ` + ` Ġdict Ġ{ Ġ" key 3 " Ġto Ġ" value 3 " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġassertions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . shouldBe TypeOf < Dictionary Binary Operation < StringType , ĠString Type >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . left . let Ġ{ Ġleft Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . shouldBe TypeOf < Dictionary Binary Operation < StringType , ĠString Type >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . left . let Ġ{ Ġnested Left Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnested Left . shouldBe TypeOf < Dictionary Expression >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnested Left . value . entries . size ĠshouldBe Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnested Left . value . entries . first (). let Ġ{ Ġ( key , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey ĠshouldBe ĠString Literal (" key 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . shouldBe TypeOf < Dynamic Expression >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . value ĠshouldBe ĠString Literal (" value 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . operator ĠshouldBe ĠBinary Operator . PLUS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . right . let Ġ{ Ġnested Right Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnested Right . shouldBe TypeOf < Dictionary Expression >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnested Right . value . entries . size ĠshouldBe Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnested Right . value . entries . first (). let Ġ{ Ġ( key , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey ĠshouldBe ĠString Literal (" key 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . shouldBe TypeOf < Dynamic Expression >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . value ĠshouldBe ĠString Literal (" value 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . operator ĠshouldBe ĠBinary Operator . PLUS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat . right . let Ġ{ Ġright Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright . shouldBe TypeOf < Dictionary Expression >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright . value . entries . size ĠshouldBe Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright . value . entries . first (). let Ġ{ Ġ( key , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey ĠshouldBe ĠString Literal (" key 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . shouldBe TypeOf < Dynamic Expression >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . value ĠshouldBe ĠString Literal (" value 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }) ĊĊ Ċ private Ġclass ĠBinary Plus Feature UnderTest Ġ: Ċ // ĠFeature Ġunder Ġtest ĊĠĠĠ ĠBinary Plus Feature , Ċ // ĠAdditional Ġfeatures Ġfor Ġcompatibility Ġtests ĊĠĠĠ ĠCollections Feature