package Ġru . po cket byte . lo col aser . kotlin mpp . resource . file Ċ Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . rules . Temporary Folder Ċ import Ġru . po cket byte . lo col aser . resource . Resources Ċ import Ġru . po cket byte . lo col aser . resource . entity .* Ċ Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ import Ġjava . nio . charset . Charset Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Paths Ċ Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Assert . assertNull Ċ import Ġru . po cket byte . lo col aser . config . Extra Params Ċ import Ġru . po cket byte . lo col aser . kotlin mpp . resource . Abs Kotlin Resources Ċ import Ġru . po cket byte . lo col aser . kotlin mpp . utils . Template Str Ċ import Ġru . po cket byte . lo col aser . resource . formatting . Java Formatting Type Ċ Ċ class ĠKotlin Js Resource File Test Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠString Provider Str Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġinterface ĠString Provider Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġfun ĠgetString ( key : ĠString , Ġvar arg Ġargs : ĠPair < String , ĠAny >): ĠString \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġfun Ġget Pl ural String (\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey : ĠString ,\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount : ĠLong ,\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar arg Ġargs : ĠPair < String , ĠAny >\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġ): ĠString \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ}\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġprivate Ġclass ĠString Provider Impl ( private Ġval Ġi 1 8 n : ĠI 1 8 n ) Ġ: ĠString Provider Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetString ( key : ĠString , Ġvar arg Ġargs : ĠPair < String , ĠAny >): ĠString Ġ= Ġthis . i 1 8 n . t ( key , Ġdynamic (* args )) \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Pl ural String (\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey : ĠString ,\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount : ĠLong ,\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar arg Ġargs : ĠPair < String , ĠAny >\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġ): ĠString Ġ= Ġthis . i 1 8 n . t ( \"\ ${ key }_ plural \", Ġdynamic ( Pair (\" count \", Ġcount ), Ġ* args )) \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġprivate Ġfun Ġdynamic ( var arg Ġargs : ĠPair < String , ĠAny >): ĠAny Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd : Ġdynamic Ġ= Ġobject {}\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠ Ġargs . forEach Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd [ it . first ] Ġ= Ġit . second \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠ Ġ}\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġd Ġas ĠAny \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġ}\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ}\ n " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSecond Construct ors Str Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġconstructor ( i 1 8 n : ĠI 1 8 n ) Ġ: Ġthis ( String Provider Impl ( i 1 8 n )) \ n " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Rule Ġ@ Jvm Field ĊĠĠĠ Ġvar Ġtemp Folder Ġ= ĠTemporary Folder () ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġtest Read () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresource File Ġ= ĠKotlin Js Resource File ( temp Folder . new File (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Str ", Ġ" com . package ", Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ ĠassertNull ( resource File . read ( Extra Params ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġtest Write One Item () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Map Ġ= ĠRes Map () ĊĠĠĠĠĠĠĠ Ġval Ġres Locale Ġ= ĠRes Locale () ĊĠĠĠĠĠĠĠ Ġres Locale . put ( prepare Res Item (" key 1 ", ĠarrayOf ( Res Value (" value 1 _ 1 ", Ġ" Comment ", ĠQuantity . OTHER )))) ĊĠĠĠĠĠĠĠ Ġres Map [ Resources . BASE _ LOCAL E ] Ġ= Ġres Locale ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Directory Ġ= Ġtemp Folder . new Folder () ĊĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= Ġ" Str " ĊĠĠĠĠĠĠĠ Ġval Ġclass Package Ġ= Ġ" com . pc g " ĊĠĠĠĠĠĠĠ Ġval Ġresource File Ġ= ĠKotlin Js Resource File ( test Directory , ĠclassName , Ġclass Package , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġresource File . write ( res Map , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Result Ġ= ĠTemplate Str . GENERATED _ CLASS _ COMMENT Ġ+ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" package Ġ$ class Package \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġi 1 8 next . I 1 8 n \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġkotlin . Any \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġkotlin . Long \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġkotlin . Pair \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġkotlin . String \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" class ĠStr ( private Ġval Ġstring Provider : ĠString Provider ) Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ/** \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠ Ġ* Ġvalue 1 _ 1 Ġ*/ \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġval Ġkey 1 : ĠString \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis . string Provider . getString (\" key 1 \") \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSecond Construct ors Str Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString Provider Str Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" }\ n " ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Result , ĠreadFile ( file For Class ( test Directory , ĠclassName , Ġclass Package ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġtest Write One Pl ural Item () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Map Ġ= ĠRes Map () ĊĠĠĠĠĠĠĠ Ġval Ġres Locale Ġ= ĠRes Locale () ĊĠĠĠĠĠĠĠ Ġres Locale . put ( prepare Res Item (" key 1 ", ĠarrayOf ( Res Value (" value 1 _ 1 ", Ġ" Comment Ġ 1 ", ĠQuantity . ONE ), ĠRes Value (" value 1 _ 2 ", Ġ" Comment Ġ 2 ", ĠQuantity . OTHER )))) ĊĠĠĠĠĠĠĠ Ġres Map [ Resources . BASE _ LOCAL E ] Ġ= Ġres Locale ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Directory Ġ= Ġtemp Folder . new Folder () ĊĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= Ġ" Str " ĊĠĠĠĠĠĠĠ Ġval Ġclass Package Ġ= Ġ" com . pc g " ĊĠĠĠĠĠĠĠ Ġval Ġresource File Ġ= ĠKotlin Js Resource File ( test Directory , ĠclassName , Ġclass Package , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġresource File . write ( res Map , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Result Ġ= ĠTemplate Str . GENERATED _ CLASS _ COMMENT Ġ+ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" package Ġ$ class Package \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġi 1 8 next . I 1 8 n \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġkotlin . Any \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġkotlin . Long \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġkotlin . Pair \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġkotlin . String \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" class Ġ$ className ( private Ġval Ġstring Provider : ĠString Provider ) Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSecond Construct ors Str Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ/** \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠ Ġ* Ġvalue 1 _ 2 Ġ*/ \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġfun Ġkey 1 ( count : ĠLong ): ĠString Ġ= Ġthis . string Provider . get Pl ural String (\" key 1 \", Ġcount )\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString Provider Str Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" }\ n " ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Result , ĠreadFile ( file For Class ( test Directory , ĠclassName , Ġclass Package ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġtest Write Pl ural With M ilt ip le Arguments () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Map Ġ= ĠRes Map (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Resources . BASE _ LOCAL E , ĠRes Locale (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( prepare Res Item (" key 1 ", ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRes Value (" Count Ġ% d Ġ% s ", Ġnull , ĠQuantity . ONE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJava Formatting Type , ĠJava Formatting Type . arguments From Value ("% d Ġ% s ")), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRes Value (" Count Ġ% d Ġ% s ", Ġnull , ĠQuantity . OTHER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJava Formatting Type , ĠJava Formatting Type . arguments From Value ("% d Ġ% s ")) )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Directory Ġ= Ġtemp Folder . new Folder () ĊĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= Ġ" Str " ĊĠĠĠĠĠĠĠ Ġval Ġclass Package Ġ= Ġ" com . pc g " ĊĠĠĠĠĠĠĠ Ġval Ġresource File Ġ= ĠKotlin Js Resource File ( test Directory , ĠclassName , Ġclass Package , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġresource File . write ( res Map , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Result Ġ= ĠTemplate Str . GENERATED _ CLASS _ COMMENT Ġ+ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" package Ġ$ class Package \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġi 1 8 next . I 1 8 n \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġkotlin . Any \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġkotlin . Long \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġkotlin . Pair \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġkotlin . String \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" class Ġ$ className ( private Ġval Ġstring Provider : ĠString Provider ) Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSecond Construct ors Str Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ/** \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠ Ġ* ĠCount Ġ% d Ġ% s Ġ*/ \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġfun Ġkey 1 ( count : ĠLong , Ġs 2 : ĠString ): ĠString Ġ= Ġthis . string Provider . get Pl ural String (\" key 1 \", Ġcount , ĠPair (\" s 2 \", Ġs 2 )) \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString Provider Str Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" }\ n " ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Result , ĠreadFile ( file For Class ( test Directory , ĠclassName , Ġclass Package ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġtest Write () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Map Ġ= ĠRes Map () ĊĊĠĠĠĠĠĠĠ Ġvar Ġres Locale Ġ= ĠRes Locale () ĊĠĠĠĠĠĠĠ Ġres Locale . put ( prepare Res Item (" key 1 ", ĠarrayOf ( Res Value (" value 1 _ 1 ", Ġ" Comment ", ĠQuantity . OTHER )))) ĊĠĠĠĠĠĠĠ Ġres Locale . put ( prepare Res Item (" key 2 ", ĠarrayOf ( Res Value (" value 2 _ 1 ", Ġ" value 2 _ 1 ", ĠQuantity . OTHER )))) ĊĠĠĠĠĠĠĠ Ġres Map [" ru "] Ġ= Ġres Locale ĊĊĠĠĠĠĠĠĠ Ġres Locale Ġ= ĠRes Locale () ĊĠĠĠĠĠĠĠ Ġres Locale . put ( prepare Res Item (" key 1 ", ĠarrayOf ( Res Value (" value 1 _ 2 ", Ġnull , ĠQuantity . OTHER )))) ĊĠĠĠĠĠĠĠ Ġres Locale . put ( prepare Res Item (" key 3 ", ĠarrayOf ( Res Value (" value 3 _ 2 ", Ġ" value 2 _ 1 ", ĠQuantity . OTHER )))) ĊĠĠĠĠĠĠĠ Ġres Map [ Resources . BASE _ LOCAL E ] Ġ= Ġres Locale ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Directory Ġ= Ġtemp Folder . new Folder () ĊĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= Ġ" Str Impl " ĊĠĠĠĠĠĠĠ Ġval Ġclass Package Ġ= Ġ" com . some . pc g " ĊĠĠĠĠĠĠĠ Ġval Ġresource File Ġ= ĠKotlin Js Resource File ( test Directory , ĠclassName , Ġclass Package , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġresource File . write ( res Map , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Result Ġ= ĠTemplate Str . GENERATED _ CLASS _ COMMENT Ġ+ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" package Ġ$ class Package \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġi 1 8 next . I 1 8 n \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġkotlin . Any \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġkotlin . Long \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġkotlin . Pair \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġkotlin . String \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" class Ġ$ className ( private Ġval Ġstring Provider : ĠString Provider ) Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ/** \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠ Ġ* Ġvalue 1 _ 2 Ġ*/ \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġval Ġkey 1 : ĠString \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis . string Provider . getString (\" key 1 \") \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ/** \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠ Ġ* Ġvalue 3 _ 2 Ġ*/ \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġval Ġkey 3 : ĠString \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis . string Provider . getString (\" key 3 \") \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSecond Construct ors Str Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString Provider Str Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" }\ n " ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Result , ĠreadFile ( file For Class ( test Directory , ĠclassName , Ġclass Package ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġtest Write With Interface () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Map Ġ= ĠRes Map () ĊĊĠĠĠĠĠĠĠ Ġvar Ġres Locale Ġ= ĠRes Locale () ĊĠĠĠĠĠĠĠ Ġres Locale . put ( prepare Res Item (" key 1 ", ĠarrayOf ( Res Value (" value 1 _ 1 ", Ġ" Comment ", ĠQuantity . OTHER )))) ĊĠĠĠĠĠĠĠ Ġres Locale . put ( prepare Res Item (" key 2 ", ĠarrayOf ( Res Value (" value 2 _ 1 ", Ġ" value 2 _ 1 ", ĠQuantity . OTHER )))) ĊĠĠĠĠĠĠĠ Ġres Map [" ru "] Ġ= Ġres Locale ĊĊĠĠĠĠĠĠĠ Ġres Locale Ġ= ĠRes Locale () ĊĠĠĠĠĠĠĠ Ġres Locale . put ( prepare Res Item (" key 1 ", ĠarrayOf ( Res Value (" value 1 _ 2 ", Ġnull , ĠQuantity . OTHER )))) ĊĠĠĠĠĠĠĠ Ġres Locale . put ( prepare Res Item (" key 3 ", ĠarrayOf ( Res Value (" value 3 _ 2 ", Ġ" value 2 _ 1 ", ĠQuantity . OTHER )))) ĊĠĠĠĠĠĠĠ Ġres Map [ Resources . BASE _ LOCAL E ] Ġ= Ġres Locale ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Directory Ġ= Ġtemp Folder . new Folder () ĊĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= Ġ" Str Impl " ĊĠĠĠĠĠĠĠ Ġval Ġclass Package Ġ= Ġ" com . some . pc g " ĊĠĠĠĠĠĠĠ Ġval Ġresource File Ġ= ĠKotlin Js Resource File ( test Directory , ĠclassName , Ġclass Package , Ġ" Str Interface ", Ġ" com . interface ") ĊĠĠĠĠĠĠĠ Ġresource File . write ( res Map , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Result Ġ= ĠTemplate Str . GENERATED _ CLASS _ COMMENT Ġ+ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" package Ġ$ class Package \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġcom . interface . Str Interface \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġi 1 8 next . I 1 8 n \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġkotlin . Any \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġkotlin . Long \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġkotlin . Pair \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġkotlin . String \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" class Ġ$ className ( private Ġval Ġstring Provider : ĠString Provider ) Ġ: ĠStr Interface Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġoverride Ġval Ġkey 1 : ĠString \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis . string Provider . getString (\" key 1 \") \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġoverride Ġval Ġkey 3 : ĠString \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis . string Provider . getString (\" key 3 \") \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSecond Construct ors Str Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString Provider Str Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" }\ n " ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Result , ĠreadFile ( file For Class ( test Directory , ĠclassName , Ġclass Package ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġtest Write Long Property Comment () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Map Ġ= ĠRes Map () ĊĠĠĠĠĠĠĠ Ġval Ġres Locale Ġ= ĠRes Locale () ĊĠĠĠĠĠĠĠ Ġres Locale . put ( prepare Res Item (" key 1 ", ĠarrayOf ( Res Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" W ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery Ġ" Ġ+ Ġ" W ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠLong ĠComment ", Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQuantity . OTHER )))) ĊĠĠĠĠĠĠĠ Ġres Map [ Resources . BASE _ LOCAL E ] Ġ= Ġres Locale ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Directory Ġ= Ġtemp Folder . new Folder () ĊĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= Ġ" Strings " ĊĠĠĠĠĠĠĠ Ġval Ġclass Package Ġ= Ġ" ru . po cket byte " ĊĠĠĠĠĠĠĠ Ġval Ġresource File Ġ= ĠKotlin Js Resource File ( test Directory , ĠclassName , Ġclass Package , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġresource File . write ( res Map , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Result Ġ= ĠTemplate Str . GENERATED _ CLASS _ COMMENT Ġ+ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" package Ġ$ class Package \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġi 1 8 next . I 1 8 n \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġkotlin . Any \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġkotlin . Long \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġkotlin . Pair \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġkotlin . String \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" class Ġ$ className ( private Ġval Ġstring Provider : ĠString Provider ) Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ/** \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠ Ġ* ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠ Ġ* ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠW ery ĠLong ĠComment Ġ*/ \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġval Ġkey 1 : ĠString \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis . string Provider . getString (\" key 1 \") \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSecond Construct ors Str Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString Provider Str Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" }\ n " ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Result , ĠreadFile ( file For Class ( test Directory , ĠclassName , Ġclass Package ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġtest Write Formatted Comment () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Value Ġ= Ġ" Hello Ġ% s Ġ% s " ĊĠĠĠĠĠĠĠ Ġval Ġres Map Ġ= ĠRes Map () ĊĠĠĠĠĠĠĠ Ġval Ġres Locale Ġ= ĠRes Locale () ĊĠĠĠĠĠĠĠ Ġres Locale . put ( prepare Res Item (" key 1 ", ĠarrayOf ( Res Value ( test Value , Ġ"", ĠQuantity . OTHER )))) ĊĠĠĠĠĠĠĠ Ġres Locale . put ( prepare Res Item (" key 2 ", ĠarrayOf ( Res Value ( test Value , Ġ" Comment Ġ 2 ", ĠQuantity . OTHER ), ĠRes Value (" value 1 _ 1 ", Ġ" Comment Ġ 1 ", ĠQuantity . ONE )))) ĊĠĠĠĠĠĠĠ Ġres Map [ Resources . BASE _ LOCAL E ] Ġ= Ġres Locale ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Directory Ġ= Ġtemp Folder . new Folder () ĊĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= Ġ" Str " ĊĠĠĠĠĠĠĠ Ġval Ġclass Package Ġ= Ġ" com . pc g " ĊĠĠĠĠĠĠĠ Ġval Ġresource File Ġ= ĠKotlin Js Resource File ( test Directory , ĠclassName , Ġclass Package , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġresource File . write ( res Map , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Result Ġ= ĠTemplate Str . GENERATED _ CLASS _ COMMENT Ġ+ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" package Ġ$ class Package \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġi 1 8 next . I 1 8 n \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġkotlin . Any \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġkotlin . Long \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġkotlin . Pair \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" import Ġkotlin . String \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" class Ġ$ className ( private Ġval Ġstring Provider : ĠString Provider ) Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ/** \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠ Ġ* Ġ$ test Value Ġ*/ \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġval Ġkey 1 : ĠString \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis . string Provider . getString (\" key 1 \") \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSecond Construct ors Str Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ/** \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠ Ġ* Ġ$ test Value Ġ*/ \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġfun Ġkey 2 ( count : ĠLong ): ĠString Ġ= Ġthis . string Provider . get Pl ural String (\" key 2 \", Ġcount )\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString Provider Str Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" }\ n " ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Result , ĠreadFile ( file For Class ( test Directory , ĠclassName , Ġclass Package ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprivate Ġfun ĠreadFile ( file : ĠFile ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠString ( Files . read All Bytes ( Paths . get ( file . absolute Path )), ĠCharset . default Charset ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprepare Res Item ( key : ĠString , Ġvalues : ĠArray < Res Value >): ĠRes Item Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Item Ġ= ĠRes Item ( key ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( value Ġin Ġvalues ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres Item . add Value ( value ) ĊĠĠĠĠĠĠĠ Ġreturn Ġres Item ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfile For Class ( directory : ĠFile , ĠclassName : ĠString , Ġclass Package : ĠString ): ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFile ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( directory , Ġclass Package . replace (".", Ġ"/ ")), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ className ${ Abs Kotlin Resources . K OT LIN _ FILE _ EXTENSION }" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ