package Ġsample . kotlin . xyz . sr cl ab . core . state Ċ Ċ import Ġorg . testng . annotations . Test Ċ import Ġxyz . sr cl ab . common . state . State Ċ import Ġxyz . sr cl ab . common . state . String State Ċ import Ġxyz . sr cl ab . common . state . String State . Companion . join State Descriptions Ċ import Ġxyz . sr cl ab . common . state . String State . Companion . more Descriptions Ċ import Ġxyz . sr cl ab . common . test . Test Logger Ċ Ċ class ĠState Sample Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest State () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmy State Ġ= ĠMy State ( 1 , Ġ" description ") ĊĠĠĠĠĠĠĠ Ġval ĠnewState Ġ= Ġmy State . with More Description (" cause ") ĊĠĠĠĠĠĠĠ Ġ// description [ cause ] ĊĠĠĠĠĠĠĠ Ġlogger . log ( newState . description ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠMy State ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġcode : ĠInt , Ġoverride Ġval Ġdescriptions : ĠList < String > ĊĠĠĠ Ġ) Ġ: ĠState < Int , ĠString , ĠMy State > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġconstructor ( code : ĠInt , Ġdescription : ĠString ?) Ġ: Ġthis ( code , ĠString State . new Descriptions ( description )) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġdescription : ĠString ? Ġ= Ġdescriptions . join State Descriptions () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwith New Description ( new Description : ĠString ?): ĠMy State Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMy State ( code , ĠString State . new Descriptions ( new Description )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwith More Description ( more Description : ĠString ): ĠMy State Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMy State ( code , Ġdescriptions . more Descriptions ( more Description )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠTest Logger . DEFAULT ĊĠĠĠ Ġ} Ċ }