package Ġcom . inst ac art . formula Ċ Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġorg . junit . Test Ċ Ċ class ĠInput Changed Test Ġ{ ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` input Ġchanges `() Ġ{ ĊĠĠĠĠĠĠĠ ĠParent Formula (). start (). test (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues (). last (). on Child Name Changed (" first ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues (). last (). on Child Name Changed (" second ") ĊĠĠĠĠĠĠĠ Ġ}. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠlistOf (" default ", Ġ" first ", Ġ" second ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( values (). map Ġ{ Ġit . child Name Ġ}). isEqualTo ( expected ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠParent Formula Ġ: ĠFormula < Unit , ĠString , ĠParent Formula . Output > Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġchild Formula Ġ= ĠChild Formula () ĊĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠOutput ( val Ġchild Name : ĠString , Ġval Ġon Child Name Changed : Ġ( String ) Ġ-> ĠUnit ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠinitialState ( input : ĠUnit ): ĠString Ġ= Ġ" default " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġevaluate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput : ĠUnit , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠFormula Context < String > ĊĠĠĠĠĠĠĠ Ġ): ĠEvaluation < Output > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEvaluation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ= ĠOutput ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Name Ġ= Ġcontext . child ( child Formula , Ġstate ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Child Name Changed Ġ= Ġcontext . event Callback Ġ{ Ġname Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname . no Effects () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠChild Formula Ġ: ĠFormula < String , ĠString , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠinitialState ( input : ĠString ): ĠString Ġ= Ġinput ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Input Changed ( old Input : ĠString , Ġinput : ĠString , Ġstate : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġoverride Ġour Ġstate Ġwith Ġwhat Ġparent Ġprovides . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinput ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġevaluate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠFormula Context < String > ĊĠĠĠĠĠĠĠ Ġ): ĠEvaluation < String > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEvaluation ( output Ġ= Ġstate ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ