Ate Douma created SCXML-285: ------------------------------- Summary: Before invoking invoke handlers after a macrostep all internal events must have been processed Key: SCXML-285 URL: https://issues.apache.org/jira/browse/SCXML-285 Project: Commons SCXML Issue Type: Bug Affects Versions: 2.0 Reporter: Ate Douma Assignee: Ate Douma Fix For: 2.0
I discovered a tricky bug in SCXMLSemanticsImpl#macroStep where it doesn't comply with the SCXML specification, part 3.13, which defines the following rules (among many others): * A _macrostep_ is a series of one or more microsteps ending in a configuration where the internal event queue is empty [...] * After completing a macrostep, the SCXML Processor _must_ execute in document order the <invoke> handlers [...] The tricky bug is that the current implementation does check for internal events first, but only processes the first event! In case of more than 1 internal event, the invoke handlers will be executed *before* (thereafter) processing any remaining internal events. The [SCXML IRP Tests|https://www.w3.org/Voice/2013/scxml-irp/] didn't catch/test this condition, and it only in special scenarios will actually make a difference. I'll add a dedicated test for this, and then apply a fix proving it. -- This message was sent by Atlassian JIRA (v7.6.3#76005)