import Ġorg . junit . jupiter . api . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assert Fails Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠSubst it utor Test Ġ{ ĊĊĠ Ġprivate Ġval Ġstamp Vars : Ġ( String ) Ġ-> ĠString ? Ġ= Ġ{ ĊĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠ Ġ" Weather " Ġ-> Ġ" w ax " ĊĠĠĠĠĠ Ġ" R ince " Ġ-> Ġ" wind " ĊĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġstamp ___ 1 () Ġ{ ĊĠĠĠ Ġ""" ĊĠĠĠĠĠ Ġ... stamp ___ 1 () ĊĠĠĠĠĠ ĠWhen Ġgiven Ġa Ġstencil Ġonly Ġcontaining Ġa Ġsingle Ġvariable ĊĠĠĠĠĠ ĠReturns Ġthat Ġvalue ĊĠĠĠ Ġ""" . describe () ĊĊĠĠĠ Ġval Ġsub Ġ= ĠSubst it utor . bash Style ( stamp Vars ) ĊĠĠĠ Ġval Ġactual Ġ= Ġsub . stamp ("\ ${ Weather }") ĊĠĠĠ ĠassertEquals (" w ax ", Ġactual ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġstamp ___ 2 () Ġ{ ĊĠĠĠ Ġ""" ĊĠĠĠĠĠ Ġ... stamp ___ 2 () ĊĠĠĠĠĠ ĠWhen Ġgiven Ġa Ġstencil Ġcontaining Ġtwo Ġvariables ĊĠĠĠĠĠ ĠReturns Ġa Ġstring Ġcontaining Ġmapped Ġvalues Ġfor Ġboth Ġvariables ĊĠĠĠ Ġ""" . describe () ĊĊĠĠĠ Ġval Ġsub Ġ= ĠSubst it utor . bash Style ( stamp Vars ) ĊĠĠĠ Ġval Ġactual Ġ= Ġsub . stamp ("\ ${ Weather }\ ${ R ince }") ĊĠĠĠ ĠassertEquals (" w ax wind ", Ġactual ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġstamp ___ 3 () Ġ{ ĊĠĠĠ Ġ""" ĊĠĠĠĠĠ Ġ... stamp ___ 3 () ĊĠĠĠĠĠ ĠWhen Ġgiven Ġa Ġstencil Ġcontaining Ġtwo Ġvariables Ġ& Ġother Ġtext ĊĠĠĠĠĠ ĠReturns Ġthe Ġexact Ġexpected Ġstring ĊĠĠĠ Ġ""" . describe () ĊĊĠĠĠ Ġval Ġsub Ġ= ĠSubst it utor . bash Style ( stamp Vars ) ĊĠĠĠ Ġval Ġactual Ġ= Ġsub . stamp (" Weather \ ${ Weather } Ġ& ĠR ince \ ${ R ince }") ĊĠĠĠ ĠassertEquals (" Weather w ax Ġ& ĠR ince wind ", Ġactual ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġstamp ___ 4 () Ġ{ ĊĠĠĠ Ġ""" ĊĠĠĠĠĠ Ġ... stamp ___ 4 () ĊĠĠĠĠĠ ĠWhen Ġgiven Ġan Ġempty Ġstencil ĊĠĠĠĠĠ ĠReturns Ġan Ġempty Ġstring ĊĠĠĠ Ġ""" . describe () ĊĊĠĠĠ Ġval Ġsub Ġ= ĠSubst it utor . bash Style ( stamp Vars ) ĊĠĠĠ Ġval Ġactual Ġ= Ġsub . stamp ("") ĊĠĠĠ ĠassertEquals ("", Ġactual ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġstamp ___ 5 () Ġ{ ĊĠĠĠ Ġ""" ĊĠĠĠĠĠ Ġ... stamp ___ 5 () ĊĠĠĠĠĠ ĠWhen Ġgiven Ġa Ġstencil Ġnot Ġcontaining Ġany Ġvariables ĊĠĠĠĠĠ ĠReturns Ġthe Ġinput ĊĠĠĠ Ġ""" . describe () ĊĊĠĠĠ Ġval Ġexpected Ġ= Ġ"\ n Ġl ug gage Ġ\ n " ĊĠĠĠ Ġval Ġsub Ġ= ĠSubst it utor . bash Style ( stamp Vars ) ĊĠĠĠ Ġval Ġactual Ġ= Ġsub . stamp ( expected ) ĊĠĠĠ ĠassertEquals ( expected , Ġactual ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġstamp ___ 6 () Ġ{ ĊĠĠĠ Ġ""" ĊĠĠĠĠĠ Ġ... stamp ___ 6 () ĊĠĠĠĠĠ ĠWhen Ġgiven Ġa Ġstencil Ġcontaining Ġa Ġvariable ĊĠĠĠĠĠ ĠBut Ġdoes Ġnot Ġhave Ġa Ġmapped Ġvalue ĊĠĠĠĠĠ ĠThrows Ġan Ġexception ĊĠĠĠ Ġ""" . describe () ĊĊĠĠĠ Ġassert Fails Ġ{ ĊĠĠĠĠĠ Ġval Ġsub Ġ= ĠSubst it utor . bash Style Ġ{ Ġnull Ġ} ĊĠĠĠĠĠ Ġsub . stamp ("\ ${ abc }") ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġstamp ___ 7 () Ġ{ ĊĠĠĠ Ġ""" ĊĠĠĠĠĠ Ġ... stamp ___ 7 () ĊĠĠĠĠĠ ĠWhen Ġgiven Ġa Ġstencil Ġcontaining Ġmultiple Ġoccurrences Ġof Ġthe Ġsame Ġvariable ĊĠĠĠĠĠ ĠReturns Ġthe Ġinput Ġwith Ġall Ġoccurrences Ġreplaced Ġwith Ġthe Ġmapped Ġvalue ĊĠĠĠ Ġ""" . describe () ĊĊĠĠĠ Ġval Ġsub Ġ= ĠSubst it utor . bash Style ( stamp Vars ) ĊĠĠĠ Ġval Ġactual Ġ= Ġsub . stamp ("\ ${ R ince }_ \ ${ R ince }_ \ ${ R ince }") ĊĠĠĠ ĠassertEquals (" wind _ wind _ wind ", Ġactual ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġstamp ___ 8 () Ġ{ ĊĠĠĠ Ġ""" ĊĠĠĠĠĠ Ġ... stamp ___ 8 () ĊĠĠĠĠĠ ĠWhen Ġgiven Ġa Ġregex Ġthat Ġdoesn 't Ġcontain Ġthe Ġspecified Ġreplacement Ġgroup ĊĠĠĠĠĠ ĠThrows Ġan Ġexception ĊĠĠĠ Ġ""" . describe () ĊĊĠĠĠ Ġassert Fails Ġ{ ĊĠĠĠĠĠ Ġval Ġsub Ġ= ĠSubst it utor (" abc ". to Regex (), Ġ 1 , Ġ 0 ) Ġ{ Ġ"" Ġ} ĊĠĠĠĠĠ Ġsub . stamp (" abc ") ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġstamp ___ 9 () Ġ{ ĊĠĠĠ Ġ""" ĊĠĠĠĠĠ Ġ... stamp ___ 9 () ĊĠĠĠĠĠ ĠWhen Ġgiven Ġa Ġregex Ġthat Ġdoesn 't Ġcontain Ġthe Ġspecified Ġkey Ġgroup ĊĠĠĠĠĠ ĠThrows Ġan Ġexception ĊĠĠĠ Ġ""" . describe () ĊĊĠĠĠ Ġassert Fails Ġ{ ĊĠĠĠĠĠ Ġval Ġsub Ġ= ĠSubst it utor (" abc ". to Regex (), Ġ 0 , Ġ 1 ) Ġ{ Ġ"" Ġ} ĊĠĠĠĠĠ Ġsub . stamp (" abc ") ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġsafe Stamp ___ 1 () Ġ{ ĊĠĠĠ Ġ""" ĊĠĠĠĠĠ Ġ... safe Stamp ___ 1 () ĊĠĠĠĠĠ ĠWhen Ġgiven Ġa Ġstencil Ġonly Ġcontaining Ġa Ġsingle Ġvariable ĊĠĠĠĠĠ ĠReturns Ġa Ġgood Ġresult Ġthat Ġcontains Ġthe Ġexpected Ġvalue ĊĠĠĠ Ġ""" . describe () ĊĊĠĠĠ Ġval Ġsub Ġ= ĠSubst it utor . bash Style ( stamp Vars ) ĊĠĠĠ Ġval Ġresult Ġ= Ġsub . safe Stamp ("\ ${ Weather }") ĊĠĠĠ ĠassertTrue ( result . is Good ) ĊĠĠĠ ĠassertEquals (" w ax ", Ġresult . unwrap ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġsafe Stamp ___ 2 () Ġ{ ĊĠĠĠ Ġ""" ĊĠĠĠĠĠ Ġ... safe Stamp ___ 2 () ĊĠĠĠĠĠ ĠWhen Ġgiven Ġa Ġstencil Ġcontaining Ġtwo Ġvariables ĊĠĠĠĠĠ ĠReturns Ġa Ġgood Ġresult Ġthat Ġcontains Ġmapped Ġvalues Ġfor Ġboth Ġvariables ĊĠĠĠ Ġ""" . describe () ĊĊĠĠĠ Ġval Ġsub Ġ= ĠSubst it utor . bash Style ( stamp Vars ) ĊĠĠĠ Ġval Ġresult Ġ= Ġsub . safe Stamp ("\ ${ Weather }\ ${ R ince }") ĊĠĠĠ ĠassertTrue ( result . is Good ) ĊĠĠĠ ĠassertEquals (" w ax wind ", Ġresult . unwrap ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġsafe Stamp ___ 3 () Ġ{ ĊĠĠĠ Ġ""" ĊĠĠĠĠĠ Ġ... safe Stamp ___ 3 () ĊĠĠĠĠĠ ĠWhen Ġgiven Ġa Ġstencil Ġcontaining Ġtwo Ġvariables Ġ& Ġother Ġtext ĊĠĠĠĠĠ ĠReturns Ġa Ġgood Ġresult Ġthat Ġcontains Ġthe Ġexpected Ġstring ĊĠĠĠ Ġ""" . describe () ĊĊĠĠĠ Ġval Ġsub Ġ= ĠSubst it utor . bash Style ( stamp Vars ) ĊĠĠĠ Ġval Ġresult Ġ= Ġsub . safe Stamp (" Weather \ ${ Weather } Ġ& ĠR ince \ ${ R ince }") ĊĠĠĠ ĠassertTrue ( result . is Good ) ĊĠĠĠ ĠassertEquals (" Weather w ax Ġ& ĠR ince wind ", Ġresult . unwrap ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġsafe Stamp ___ 4 () Ġ{ ĊĠĠĠ Ġ""" ĊĠĠĠĠĠ Ġ... safe Stamp ___ 4 () ĊĠĠĠĠĠ ĠWhen Ġgiven Ġan Ġempty Ġstencil ĊĠĠĠĠĠ ĠReturns Ġa Ġgood Ġresult Ġcontaining Ġan Ġempty Ġstring ĊĠĠĠ Ġ""" . describe () ĊĊĠĠĠ Ġval Ġsub Ġ= ĠSubst it utor . bash Style ( stamp Vars ) ĊĠĠĠ Ġval Ġresult Ġ= Ġsub . safe Stamp ("") ĊĠĠĠ ĠassertTrue ( result . is Good ) ĊĠĠĠ ĠassertEquals ("", Ġresult . unwrap ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġsafe Stamp ___ 5 () Ġ{ ĊĠĠĠ Ġ""" ĊĠĠĠĠĠ Ġ... safe Stamp ___ 5 () ĊĠĠĠĠĠ ĠWhen Ġgiven Ġa Ġstencil Ġnot Ġcontaining Ġany Ġvariables ĊĠĠĠĠĠ ĠReturns Ġa Ġgood Ġresult Ġcontaining Ġthe Ġinput ĊĠĠĠ Ġ""" . describe () ĊĊĠĠĠ Ġval Ġexpected Ġ= Ġ"\ n Ġl ug gage Ġ\ n " ĊĠĠĠ Ġval Ġsub Ġ= ĠSubst it utor . bash Style ( stamp Vars ) ĊĠĠĠ Ġval Ġresult Ġ= Ġsub . safe Stamp ( expected ) ĊĠĠĠ ĠassertTrue ( result . is Good ) ĊĠĠĠ ĠassertEquals ( expected , Ġresult . unwrap ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġsafe Stamp ___ 6 () Ġ{ ĊĠĠĠ Ġ""" ĊĠĠĠĠĠ Ġ... safe Stamp ___ 6 () ĊĠĠĠĠĠ ĠWhen Ġgiven Ġa Ġstencil Ġcontaining Ġa Ġvariable ĊĠĠĠĠĠ ĠBut Ġdoes Ġnot Ġhave Ġa Ġmapped Ġvalue ĊĠĠĠĠĠ ĠReturns Ġa Ġbad Ġresult ĊĠĠĠ Ġ""" . describe () ĊĊĠĠĠ Ġval Ġsub Ġ= ĠSubst it utor . bash Style Ġ{ Ġnull Ġ} ĊĠĠĠ Ġval Ġresult Ġ= Ġsub . safe Stamp ("\ ${ abc }") ĊĠĠĠ ĠassertTrue ( result . is Bad ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġsafe Stamp ___ 7 () Ġ{ ĊĠĠĠ Ġ""" ĊĠĠĠĠĠ Ġ... safe Stamp ___ 7 () ĊĠĠĠĠĠ ĠWhen Ġgiven Ġa Ġstencil Ġcontaining Ġmultiple Ġoccurrences Ġof Ġthe Ġsame Ġvariable ĊĠĠĠĠĠ ĠReturns Ġa Ġgood Ġresult Ġthat Ġcontains Ġthe Ġinput Ġwith Ġall Ġoccurrences Ġreplaced Ġwith Ġthe Ġmapped Ġvalue ĊĠĠĠ Ġ""" . describe () ĊĊĠĠĠ Ġval Ġsub Ġ= ĠSubst it utor . bash Style ( stamp Vars ) ĊĠĠĠ Ġval Ġresult Ġ= Ġsub . safe Stamp ("\ ${ R ince }_ \ ${ R ince }_ \ ${ R ince }") ĊĠĠĠ ĠassertTrue ( result . is Good ) ĊĠĠĠ ĠassertEquals (" wind _ wind _ wind ", Ġresult . unwrap ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġsafe Stamp ___ 8 () Ġ{ ĊĠĠĠ Ġ""" ĊĠĠĠĠĠ Ġ... safe Stamp ___ 8 () ĊĠĠĠĠĠ ĠWhen Ġgiven Ġa Ġregex Ġthat Ġdoesn 't Ġcontain Ġthe Ġspecified Ġreplacement Ġgroup ĊĠĠĠĠĠ ĠReturns Ġa Ġbad Ġresult ĊĠĠĠ Ġ""" . describe () ĊĊĠĠĠ Ġval Ġsub Ġ= ĠSubst it utor (" abc ". to Regex (), Ġ 1 , Ġ 0 ) Ġ{ Ġ"" Ġ} ĊĠĠĠ Ġval Ġresult Ġ= Ġsub . safe Stamp (" abc ") ĊĠĠĠ ĠassertTrue ( result . is Bad ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġsafe Stamp ___ 9 () Ġ{ ĊĠĠĠ Ġ""" ĊĠĠĠĠĠ Ġ... safe Stamp ___ 9 () ĊĠĠĠĠĠ ĠWhen Ġgiven Ġa Ġregex Ġthat Ġdoesn 't Ġcontain Ġthe Ġspecified Ġkey Ġgroup ĊĠĠĠĠĠ ĠReturns Ġa Ġbad Ġresult ĊĠĠĠ Ġ""" . describe () ĊĊĠĠĠ Ġval Ġsub Ġ= ĠSubst it utor (" abc ". to Regex (), Ġ 0 , Ġ 1 ) Ġ{ Ġ"" Ġ} ĊĠĠĠ Ġval Ġresult Ġ= Ġsub . safe Stamp (" abc ") ĊĠĠĠ ĠassertTrue ( result . is Bad ) ĊĠ Ġ} Ċ }