package Ġio . z ee be . bpmn spec . actions Ċ Ċ import Ġio . z ee be . bpmn spec . api . Action Ċ import Ġio . z ee be . bpmn spec . api . TestContext Ċ import Ġio . z ee be . bpmn spec . api . runner . Element InstanceState Ċ import Ġio . z ee be . bpmn spec . api . runner . TestRunner Ċ import Ġjava . time . Duration Ċ import Ġjava . time . Instant Ċ Ċ class ĠAwait Element InstanceState Action ( ĊĠĠĠĠĠĠĠ Ġval Ġstate : ĠElement InstanceState , ĊĠĠĠĠĠĠĠ Ġval Ġelement Id : ĠString ?, ĊĠĠĠĠĠĠĠ Ġval Ġelement Name : ĠString ?, ĊĠĠĠĠĠĠĠ Ġval Ġprocess Instance : ĠString ?) Ġ: ĠAction Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġexecute ( runner : ĠTest Runner , Ġtest Context : ĠTest Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġtest Context . getContext ( process Instance ) ĊĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= ĠInstant . now () ĊĊĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual State Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunner . getElement Instances ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġelement Instance Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement Id ?. let Ġ{ Ġit Ġ== Ġelement Instance . element Id Ġ} Ġ?: Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġelement Instance Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement Name ?. let Ġ{ Ġit Ġ== Ġelement Instance . element Name Ġ} Ġ?: Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . state ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshould Retry Ġ= Ġactual State ?. let Ġ{ Ġit Ġ!= Ġstate Ġ} Ġ?: Ġtrue Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDuration . between ( start , ĠInstant . now ()). minus ( test Context . verification Timeout ). is Negative ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Retry ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( test Context . verification Retry Interval . to Millis ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( should Retry ) ĊĊĠĠĠ Ġ} Ċ }