W3C

SCXML 1.0 Implementation Report

Version: 10 March 2015

Contributors:

Jim Barnett, Genesys

Table of Contents

1. Introduction

The SCXML 1.0 Specification entered the Candidate Recommendation period on 13 March 2014.

This document is the Implementation Report for SCXML, which is a key criterion for moving beyond the Candidate Recommendation phase.

1.1 Implementation Report Objectives

  1. Must verify that the specification is implementable.
  2. Must demonstrate interoperability of implementations of the specification.

1.2 Implementation Report Non-objectives

  1. The IR does not attempt conformance testing of implementations.

2. Entrance Criteria for the Proposed Recommendation Phase

The Voice Browser Working Group established the following entrance criteria for the Proposed Recommendation phase in the Request for CR:

  1. Sufficient reports of implementation experience have been gathered to demonstrate that SCXML processors based on the specification are implementable and have compatible behavior.
  2. Specific Implementation Report Requirements (outlined below) have been met.
  3. The Working Group has formally addressed and responded to all public comments received by the Working Group.

3. Implementation Report Requirements

3.1 Detailed requirements for Implementation Report

  1. IR must cover all specified features in the specification. For each feature the IR should indicate:
  2. Feature status is a factor in test coverage in the report:

3.2 SCXML Processor Coverage

We require implementations for at least two independently developed SCXML platforms.

3.3 Notes on The Tests

The tests take the form of state machines. For any automated test, the tester simply needs to execute the state machine and record whether it ended up in the 'success' state or the 'failure' state. For a few tests that are labelled 'manual', it is necessary to observe the output of the machine and determine success or failure based on that. The test state machines are not written directly in scxml, however, but in an ad-hoc language that abstracts away from some of the details of scxml, most specifically the datamodel language. The test files, with extension 'txml', contain a mixture of native scxml and elements and attributes in the 'conf' namespace. The purpose of the 'conf' markup is to allow the tests to be run in different environments and different datamodels. For example, different datamodel languages have different syntaxes for variable names and values. Thus a state machine containing something as simple as <data id="var1" expr="3"> might be illegal in some languages. Hence the tests have <data conf:id="1" conf:expr="3">, which the tester should run through an XSLT style-sheet to produce a declaration that is legal in his platform's datamodel language. There are similar 'conf' notations for all boolean, location, and value expressions, as well as access to _event.data, etc. We also abstract away the success and failure states as <conf:pass> and <conf:fail>. Default style sheets to translate the txml files into the XPath and ECMAScript datamodels are available here and here. These default style sheets translate the success and failure states into simple <final> states containing <log> tags that print the result to the screen. Testers should feel free to modify these style sheets to suit their test environments, and/or datamodels.

3.4 Extensions Required

The tests provided here assume that Processors intending to test the BasicHTTP Event I/O Processor will implement an extension that is not described in the SCXML specification and that is not required for conformance. Processors are not required to support this extension outside of the testing environment:

The point of this extension is to allow the SCXML markup to examine the actual HTTP messages that are being received. This detail is normally hidden and not reflected in the SCXML event structure. Processors that wish to use another means to validate the relevant assertions about the BasicHTTP processor may do so, as long as the tests that they run have equivalent semantics to the ones that rely on these features.

3.5 Out of Scope

  1. IR will not cover SCXML processor performance.
  2. IR will not validate that a completely conformant ECMA script implementation has been done.

4. Tests and Results

We received four implementation reports, each consisting of the results of running some or all of the test suite. The tests and the reported results are given in the table below. The tests were developed by identifying the normative assertions in the SCXML specification, and then, for each assertion, creating a test that verifies whether the implementation being tested satisfies the assertion.

The Assert Number column identifies the assertion. The value of the number has no significance; it is simply an identifier.

The Tests column provides links to the test(s) for this assertion. (In some cases there are more than one.)

The Spec column identifies the section of the SCXML 1.0 Specification from which the assertion was derived.

The Conformance column indicates whether or not the SCXML 1.0 Specification requires the SCXML processor to implement the feature described by the test assertion. Tests that are marked as 'optional' test optional features of the specification and should be run only by processors that support the feature in question. (Note that support for the ECMAScript and XPath data models as well as the BasicHTTP Event I/O Processor is optional.)

The Test Type column indicates whether or not the associated test can be run automatically or if it requires human observation to determine success or failure. (Most tests are automatic.)

The Passed column lists the number of systems that passed the test.

The Failed column lists the number of systems that failed the test.

The Not Implemented column gives the number of systems that did not report results for the test in question.

The Abstract column gives the text of the relevant assertion. It is closely related to the text of indicated section of the specification. (The text in the specification may be rephrased to make sense as a standalone assertion.)

License

This test suite is licensed under both the W3C Test Suite License and the W3C 3-clause BSD License. See W3C Legal's explanation of the licenses.

Assertion Number Test Spec Conformance Test Type Passed Failed Not Implemented Abstract
355 test355.txml
3.2 mandatory false 4 0 0 At system initialization time, if the 'initial' attribute is not present, the Processor MUST enter the first state in document order.
576 test576.txml
3.2 mandatory false 4 0 0 At system initialization time, the SCXML Processor MUST enter the states specified by the 'initial' attribute, if it is present.
364 test364.txml
3.3 mandatory false 4 0 0 Definition: The default initial state(s) of a compound state are those specified by the 'initial' attribute or initial element, if either is present. Otherwise it is the state's first child state in document order. If a compound state is entered either as an initial state or as the target of a transition (i.e. and no descendent of it is specified), then the SCXML Processor MUST enter the default initial state(s) after it enters the parent state.
372 test372.txml
3.7 mandatory false 4 0 0 When the state machine enters the final child of a state element, the SCXML processor MUST generate the event done.state.id after completion of the onentry elements, where id is the id of the parent state.
570 test570.txml
3.7 mandatory false 4 0 0 Immediately after generating done.state.id upon entering a final child of state, if the parent state is a child of a parallel element, and all of the parallel's other children are also in final states, the Processor MUST generate the event done.state.id where id is the id of the parallel element.
375 test375.txml
3.8 mandatory false 4 0 0 The SCXML processor MUST execute the onentry handlers of a state in document order when the state is entered.
376 test376.txml
3.8 mandatory false 4 0 0 The SCXML processor MUST treat each [onentry] handler as a separate block of executable content.
377 test377.txml
3.9 mandatory false 4 0 0 The SCXML processor MUST execute the onexit handlers of a state in document order when the state is exited.
378 test378.txml
3.9 mandatory false 4 0 0 The SCXML processor MUST treat each [onexit] handler as a separate block of executable content.
387 test387.txml
3.10 mandatory false 4 0 0 Before the parent state has been visited for the first time, if a transition is executed that takes the history state as its target, the SCXML processor MUST behave as if the transition had taken the default stored state configuration as its target.
579 test579.txml
3.10 mandatory false 3 0 1 Before the parent state has been visited for the first time, if a transition is executed that takes the history state as its target, the SCXML processor MUST execute any executable content in the transition after the parent state's onentry content and any content in a possible initial transition.
580 test580.txml
3.10 mandatory false 3 0 1 It follows from the semantics of history states that they never end up in the state configuration
388 test388.txml
3.10 mandatory false 4 0 0 After the parent state has been visited for the first time, if a transition is executed that takes the history state as its target, the SCXML processor MUST behave as if the transition had taken the stored state configuration as its target.
396 test396.txml
3.12 mandatory false 4 0 0 The SCXML processor MUST use this same name value [the one reflected in the event variable] to match against the 'event' attribute of transitions.
399 test399.txml
3.12 mandatory false 4 0 0 [Definition: A transition matches an event if at least one of its event descriptors matches the event's name. ] [Definition: An event descriptor matches an event name if its string of tokens is an exact match or a prefix of the set of tokens in the event's name. In all cases, the token matching is case sensitive. ]
401 test401.txml
3.12 mandatory false 4 0 0 The processor MUST place these [error] events in the internal event queue.
402 test402.txml
3.12 mandatory false 4 0 0 The processor MUST process them [error events] like any other event.
403 test403a.txml
test403b.txml
test403c.txml
3.13 mandatory false 3 0 1 To execute a microstep, the SCXML Processor MUST execute the transitions in the corresponding optimal enabled transition set, where the optimal transition set enabled by event E in state configuration C is the largest set of transitions such that a) each transition in the set is optimally enabled by E in an atomic state in C b) no transition conflicts with another transition in the set c) there is no optimally enabled transition outside the set that has a higher priority than some member of the set.
404 test404.txml
3.13 mandatory false 4 0 0 To execute a set of transitions, the SCXML Processor MUST first exit all the states in the transitions' exit set in exit order.
405 test405.txml
3.13 mandatory false 4 0 0 [the SCXML Processor executing a set of transitions] MUST then [after the onexits] execute the executable content contained in the transitions in document order.
406 test406.txml
3.13 mandatory false 4 0 0 [the SCXML Processor executing a set of transitions] MUST then [after the exits and the transitions] enter the states in the transitions' entry set in entry order.
407 test407.txml
3.13 mandatory false 4 0 0 To exit a state, the SCXML Processor MUST execute the executable content in the state's onexit handler.
409 test409.txml
3.13 mandatory false 4 0 0 Finally [after the onexits and canceling the invocations], the Processor MUST remove the state from the active state's list.
411 test411.txml
3.13 mandatory false 4 0 0 To enter a state, the SCXML Processor MUST add the state to the active state's list. Then it MUST execute the executable content in the state's onentry handler.
412 test412.txml
3.13 mandatory false 4 0 0 If the state is a default entry state and has an initial child, the SCXML Processor MUST then [after doing the active state add and the onentry handlers] execute the executable content in the initial child's transition.
413 test413.txml
3.13 mandatory false 4 0 0 At startup, the SCXML Processor MUST place the state machine in the configuration specified by the 'initial' attribute of the scxml element.
415 test415.txml
3.13 mandatory true 4 0 0 If it [the SCXML Processor] has entered a final state that is a child of scxml [during the last microstep], it MUST halt processing.
416 test416.txml
3.13 mandatory false 4 0 0 If it [the SCXML processor] has entered a final state that is a child of a compound state [during the last microstep], it MUST generate the event done.state.id, where id is the id of the compound state.
417 test417.txml
3.13 mandatory false 4 0 0 If the compound state [which has the final element that we entered this microstep] is itself the child of a parallel element, and all the parallel element's other children are in final states, the Processor MUST generate the event done.state.id, where id is the id of the parallel element.
419 test419.txml
3.13 mandatory false 4 0 0 After checking the state configuration, the Processor MUST select the optimal transition set enabled by NULL in the current configuration. If the [optimal transition] set [enabled by NULL in the current configuration] is not empty, it [the SCXML Processor] MUST execute it [the set] as a microstep.
421 test421.txml
3.13 mandatory false 4 0 0 If the set (of eventless transitions) is empty, the Processor MUST remove events from the internal event queue until the queue is empty or it finds an event that enables a non-empty optimal transition set in the current configuration. If it finds such a set [a non-empty optimal transition set], the processor MUST then execute it as a microstep.
422 test422.txml
3.13 mandatory false 3 0 1 After completing a macrostep, the SCXML Processor MUST execute in document order the invoke handlers in all states that have been entered (and not exited) since the completion of the last macrostep.
423 test423.txml
3.13 mandatory false 4 0 0 Then [after invoking the new invoke handlers since the last macrostep] the Processor MUST remove events from the external event queue, waiting till events appear if necessary, until it finds one that enables a non-empty optimal transition set in the current configuration. The Processor MUST then execute that set [the enabled non-empty optimal transition set in the current configuration triggered by an external event] as a microstep.
503 test503.txml
3.13 mandatory false 4 0 0 If the transition does not contain a 'target', its exit set is empty.
504 test504.txml
3.13 mandatory false 4 0 0 if [a transition's] 'type' is "external", its exit set consists of all active states that are proper descendents of the Least Common Compound Ancestor (LCCA) of the source and target states.
505 test505.txml
3.13 mandatory false 4 0 0 Otherwise, if the transition has 'type' "internal", its source state is a compound state and all its target states are proper descendents of its source state, the target set consists of all active states that are proper descendents of its source state.
506 test506.txml
3.13 mandatory false 4 0 0 If a transition has 'type' of "internal", but its source state is not a compound state or its target states are not all proper descendents of its source state, its exit set is defined as if it had 'type' of "external".
533 test533.txml
3.13 mandatory false 4 0 0 If a transition has 'type' of "internal", but its source state is not a compound state, its exit set is defined as if it had 'type' of "external".
144 test144.txml
4.2 mandatory false 4 0 0 The SCXML processor MUST place the event that is generated by the raise element at the rear of the session's internal event queue.
147 test147.txml
4.3 mandatory false 4 0 0 When the if element is executed, the SCXML processor MUST execute the first partition in document order that is defined by a tag whose 'cond' attribute evaluates to true, if there is one.
148 test148.txml
4.3 mandatory false 4 0 0 When the if element is executed, if no 'cond'attribute evaluates to true, the SCXML Processor must execute the partition defined by the else tag, if there is one.
149 test149.txml
4.3 mandatory false 4 0 0 When it executes an if element, if no 'cond' attribute evaluates to true and there is no else element, the SCXML processor must not evaluate any executable content within the element.
150 test150.txml
4.6 mandatory false 4 0 0 In the foreach element, the SCXML processor MUST declare a new variable if the one specified by 'item' is not already defined.
151 test151.txml
4.6 mandatory false 4 0 0 In the foreach element, if 'index' is present, the SCXML processor MUST declare a new variable if the one specified by 'index' is not already defined.
152 test152.txml
4.6 mandatory false 4 0 0 In the foreach element, if 'array' does not evaluate to a legal iterable collection, or if 'item' does not specify a legal variable name, the SCXML processor MUST terminate execution of the foreach element and the block that contains it, and place the error error.execution on the internal event queue.
153 test153.txml
4.6 mandatory false 4 0 0 When evaluating foreach, the SCXML processor MUST start with the first item in the collection and proceed to the last item in the iteration order that is defined for the collection. For each item in the collection in turn, the processor MUST assign it to the item variable.
155 test155.txml
4.6 mandatory false 4 0 0 when evaluating foreach, for each item, after making the assignment, the SCXML processor MUST evaluate its child executable content. It MUST then proceed to the next item in iteration order.
156 test156.txml
4.6 mandatory false 4 0 0 If the evaluation of any child element of foreach causes an error, the processor MUST cease execution of the foreach element and the block that contains it.
525 test525.txml
4.6 mandatory false 4 0 0 The SCXML processor MUST act as if it has made a shallow copy of the collection produced by the evaluation of 'array'. Specifically, modifications to the collection during the execution of foreach MUST NOT affect the iteration behavior.
158 test158.txml
4.9 mandatory false 4 0 0 The SCXML processor MUST execute the elements of a block of executable contentin document order.
159 test159.txml
4.9 mandatory false 4 0 0 If the processing of an element of executable content causes an error to be raised, the processor MUST NOT process the remaining elements of the block.
276 test276.txml

Auxiliary File: test276sub1.txml
5.3 mandatory false 3 0 1 The SCXML Processor MUST allow the environment to provide values for top-level data elements at instantiation time. (Top-level data elements are those that are children of the datamodel element that is a child of scxml). Specifically, the Processor MUST use the values provided at instantiation time instead of those contained in these data elements.
277 test277.txml
5.3 mandatory false 4 0 0 If the value specified for a data element (by 'src', children, or the environment) is not a legal data value, the SCXML Processor MUST raise place error.execution in the internal event queue and MUST create an empty data element in the data model with the specified id.
279 test279.txml
5.3 mandatory false 4 0 0 When 'binding' attribute on the scxml element is assigned the value "early" (the default), the SCXML Processor MUST create all data elements and assign their initial values at document initialization time.
280 test280.txml
5.3 mandatory false 4 0 0 When 'binding' attribute on the scxml element is assigned the value "late", the SCXML Processor MUST create the data elements at document initialization time, but MUST assign the specified initial value to a given data element only when the state that contains it is entered for the first time, before any onentry markup.
550 test550.txml
5.3 mandatory false 4 0 0 If the 'expr' attribute is present, the Platform MUST evaluate the corresponding expression at the time specified by the 'binding' attribute of scxml and MUST assign the resulting value as the value of the data element
551 test551.txml
5.3 mandatory false 4 0 0 f child content is specified, the Platform MUST assign it as the value of the data element at the time specified by the 'binding' attribute of scxml.
552 test552.txml

Auxiliary File: test552.txt
5.3 mandatory false 3 0 1 If the 'src' attribute is present, the Platform MUST fetch the specified object at the time specified by the 'binding' attribute of scxml and MUST assign it as the value of the data element.
286 test286.txml
5.4 mandatory false 4 0 0 If the location expression of an assign does not denote a valid location in the datamodel the processor MUST place the error error.execution in the internal event queue.
287 test287.txml
5.4 mandatory false 4 0 0 If the location expression of an assign denotes a valid location in the datamodel and if the value specified by 'expr' is a legal value for the location specified, the processor MUST place the specified value at the specified location.
487 test487.txml
5.4 mandatory false 4 0 0 If the value specified (by 'expr' or children) is not a legal value for the location specified, the processor MUST place the error error.execution in the internal event queue.
294 test294.txml
5.5 mandatory false 4 0 0 In cases where the SCXML Processor generates a 'done' event upon entry into the final state, it MUST evaluate the donedata elements param or content children and place the resulting data in the _event.data field. The exact format of that data will be determined by the datamodel
527 test527.txml
5.6 mandatory false 4 0 0 When the SCXML Processor evaluates the content element, if the 'expr' value expression is present, the Processor MUST evaluate it and use the result as the output of the content element.
528 test528.txml
5.6 mandatory false 4 0 0 f the evaluation of 'expr' produces an error, the Processor MUST place error.execution in the internal event queue and use the empty string as the output of the content element.
529 test529.txml
5.6 mandatory false 4 0 0 If the 'expr' attribute is not present, the Processor MUST use the children of content as the output.
298 test298.txml
5.7 mandatory false 4 0 0 If the 'location' attribute on a param element does not refer to a valid location in the data model, the processor MUST place the error error.execution on the internal event queue.
343 test343.txml
5.7 mandatory false 4 0 0 If the 'location' attribute on a param element does not refer to a valid location in the data model, or if the evaluation of the 'expr' produces an error, the processor MUST ignore the name and value.
488 test488.txml
5.7 mandatory false 4 0 0 if the evaluation of the 'expr' produces an error, the processor MUST place the error error.execution on the internal event queue.
301 test301.txml
5.8 mandatory true 3 0 1 If the script specified by the 'src' attribute of a script element cannot be downloaded within a platform-specific timeout interval, the document is considered non-conformant, and the platform MUST reject it. N.B. This test is valid only for datamodels that support scripting.
302 test302.txml
5.8 mandatory false 4 0 0 The SCXML Processor MUST evaluate any script element that is a child of scxml at document load time. N.B. This test is valid only for datamodels that support scripting.
303 test303.txml
5.8 mandatory false 4 0 0 The SCXML Processor MUST evaluate all script elements not children of scxml as part of normal executable content evaluation. N.B. This test is valid only for datamodels that support scripting.
304 test304.txml
5.8 mandatory false 4 0 0 In a conformant SCXML document, the name of any script variable MAY be used as a location expression. N.B. This test is valid only for datamodels that support scripting.
307 test307.txml
5.9 mandatory true 4 0 0 When "late" data binding is used, accessing data substructure in expressions before the corresponding data element is loaded MUST yield the same execution-time behavior as accessing non-existent data substructure in a loaded data instance.
309 test309.txml
5.9 mandatory false 4 0 0 If a conditional expression cannot be evaluated as a boolean value ('true' or 'false') or if its evaluation causes an error, the SCXML processor MUST treat the expression as if it evaluated to 'false'.
310 test310.txml
5.9 mandatory false 4 0 0 All datamodels MUST support the 'In()' predicate, which takes a stateID as its argument and returns true if the state machine is in that state.
311 test311.txml
5.9 mandatory false 4 0 0 If a location expression cannot be evaluated to yield a valid location, the SCXML processor MUST place the error error.execution in the internal event queue.
312 test312.txml
5.9 mandatory false 4 0 0 If a value expression does not return a legal data value, the SCXML processor MUST place the error error.execution in the internal event queue.
313 test313.txml
5.9 mandatory true 4 0 0 The SCXML processor MAY reject documents containing syntactically ill-formed expressions at document load time, or it MAY wait and place error.execution in the internal event queue at runtime when the expressions are evaluated.
314 test314.txml
5.9 mandatory true 4 0 0 If the SCXML processor waits until it evaluates the expressions at runtime to raise errors, it MUST raise errors caused by expressions returning illegal values at the points at which Appendix A Algorithm for SCXML Interpretation indicates that the expressions are to be evaluated.
344 test344.txml
5.9 mandatory false 4 0 0 If a conditional expression cannot be evaluated as a boolean value ('true' or 'false') or if its evaluation causes an error, the SCXML processor MUST place the error 'error.execution' in the internal event queue.
318 test318.txml
5.10 mandatory false 4 0 0 The SCXML Processor MUST bind the _event variable when an event is pulled off the internal or external event queue to be processed, and MUST keep the variable bound to that event until another event is processed.
319 test319.txml
5.10 mandatory false 4 0 0 The SCXML Processor MUST NOT bind _event at initialization time until the first event is processed.
321 test321.txml
5.10 mandatory false 4 0 0 The Processor MUST bind the variable _sessionid at load time to the system-generated id for the current SCXML session.
322 test322.txml
5.10 mandatory false 4 0 0 The Processor MUST keep the _sessionid variable bound to the system-generated id until the session terminates.
323 test323.txml
5.10 mandatory false 4 0 0 The Processor MUST bind the variable _name at load time to the value of the 'name' attribute of the scxml element. a
324 test324.txml
5.10 mandatory false 4 0 0 The Processor MUST keep the _name variable bound to the value of the 'name' attribute of the scxml element until the session terminates.
325 test325.txml
5.10 mandatory false 4 0 0 The Processor MUST bind the variable _ioprocessors to a set of values, one for each Event I/O Processor that it supports.
326 test326.txml
5.10 mandatory false 4 0 0 The Processor MUST keep the _ioprocessors variable bound to its set of values until the session terminates.
329 test329.txml
5.10 mandatory false 4 0 0 The Processor MUST cause any attempt to change the value of a system variable to fail.
330 test330.txml
5.10 mandatory false 4 0 0 The SCXML Processor MUST insure that the following fields (name, type, sendid, origin, origintype, invokeid, data) are present in all events (_event variable), whether internal or external.
331 test331.txml
5.10 mandatory false 4 0 0 The SCXML Processor MUST set the type property of _event to: "platform" (for events raised by the platform itself, such as error events), "internal" (for events raised by raise and send with target '_internal') or "external" (for all other events).
332 test332.txml
5.10 mandatory false 4 0 0 If the sending entity has specified a value for this, the Processor MUST set this field to that value. Otherwise, in the case of error events triggered by a failed attempt to send an event, the Processor MUST set the sendid field to the send id of the triggering send element.
333 test333.txml
5.10 mandatory false 4 0 0 For events other than error events triggered by a failed attempt to send an event, if the sending entity did not specify a value for the sendid field, the Processor MUST leave the sendid field (of _event) blank.
335 test335.txml
5.10 mandatory false 4 0 0 If an event was not received from an external entity, the Processor MUST leave the origin field blank.
336 test336.txml
5.10 mandatory false 4 0 0 For external events, the SCXML Processor SHOULD set the origintype field to a value which, in combination with the 'origin' field, will allow the receiver of the event to send a response back to the originating entity.
337 test337.txml
5.10 mandatory false 4 0 0 For internal and platform events, the Processor MUST leave the origintype field blank.
338 test338.txml
5.10 mandatory false 3 0 1 If an event is generated from an invoked child process, the Processor MUST set the invokeid field to the invoke id of the invocation that triggered the child process.
339 test339.txml
5.10 mandatory false 4 0 0 If an event is not generated from an invoked child process, the Processor MUST leave the invokeid field blank.
342 test342.txml
5.10 mandatory false 4 0 0 The SCXML Processor MUST set the name field (of the _event variable) to the name of the event.
346 test346.txml
5.10 mandatory false 4 0 0 The Processor MUST place the error error.execution on the internal event queue when any attempt to change the value of a system variable is made.
172 test172.txml
6.2 mandatory false 4 0 0 If 'eventexpr' is present, the SCXML Processor MUST evaluate it when the parent send element is evaluated and treat the result as if it had been entered as the value of 'event'.
173 test173.txml
6.2 mandatory false 4 0 0 If 'targetexpr' is present, the SCXML Processor MUST evaluate it when the parent send element is evaluated and treat the result as if it had been entered as the value of 'target'.
174 test174.txml
6.2 mandatory false 4 0 0 If 'typexpr' is present, the SCXML Processor MUST evaluate it when the parent send element is evaluated and treat the result as if it had been entered as the value of 'type'.
175 test175.txml
6.2 mandatory false 4 0 0 If 'delayexpr' is present, the SCXML Processor MUST evaluate it when the parent send element is evaluated and treat the result as if it had been entered as the value of 'delay'.
176 test176.txml
6.2 mandatory false 4 0 0 The SCXML Processor MUST evaluate param when the parent send element is evaluated and pass the resulting data unmodified to the external service when the message is delivered
178 test178.txml
6.2 mandatory true 3 1 0 The SCXML Processor MUST include all attributes and values provided by param and/or 'namelist' even if duplicates occur.
179 test179.txml
6.2 mandatory false 4 0 0 The SCXML Processor MUST evaluate the content element when the parent send element is evaluated and pass the resulting data unmodified to the external service when the message is delivered.
183 test183.txml
6.2 mandatory false 4 0 0 If 'idlocation' is present, the SCXML Processor MUST generate an id when the parent send element is evaluated and store it in this location
185 test185.txml
6.2 mandatory false 4 0 0 If a delay is specified via 'delay' or 'delayexpr', the SCXML Processor MUST interpret the character string as a time interval. the SCXML Processor MUST dispatch the message only when the delay interval elapses.
186 test186.txml
6.2 mandatory false 4 0 0 The Processor MUST evaluate all arguments to send when the send element is evaluated, and not when the message is actually dispatched.
187 test187.txml
6.2 mandatory false 3 0 1 If the SCXML session terminates before the delay interval has elapsed, the SCXML Processor MUST discard the message without attempting to deliver it.
194 test194.txml
6.2 mandatory false 4 0 0 If the value of the 'target' or 'targetexpr' attribute is not supported or invalid, the Processor MUST place the error error.execution on the internal event queue
198 test198.txml
6.2 mandatory false 4 0 0 If neither the 'type' nor the 'typeexpr' is defined, the SCXML Processor MUST assume the default value of http://www.w3.org/TR/scxml/#SCXMLEventProcessor.
199 test199.txml
6.2 mandatory false 4 0 0 f the SCXML Processor does not support the type that is specified, it MUST place the event error.execution on the internal event queue.
200 test200.txml
6.2 mandatory false 4 0 0 SCXML Processors MUST support the type http://www.w3.org/TR/scxml/#SCXMLEventProcessor
201 test201.txml
6.2 optional false 2 0 2 Processors that support HTTP POST must use the value http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor for the "type" attribute
205 test205.txml
6.2 mandatory false 4 0 0 The sending SCXML Interpreter MUST not alter the content of the send and include it in the message that it sends to the destination specified in the target attribute of send.
521 test521.txml
6.2 mandatory false 3 0 1 f the Processor cannot dispatch the event, it MUST place the error error.communication on the internal event queue of the session that attempted to send the event.
553 test553.txml
6.2 mandatory false 4 0 0 If the evaluation of send's arguments produces an error, If the evaluation of send's arguments produces an error, the Processor MUST discard the message without attempting to deliver it.
207 test207.txml
6.3 mandatory false 3 0 1 The SCXML Processor MUST NOT allow cancel to affect events that were not raised in the same session.
208 test208.txml
6.3 mandatory false 4 0 0 The Processor SHOULD make its best attempt to cancel all delayed events with the specified id.
210 test210.txml
6.3 mandatory false 4 0 0 If the 'sendidexpr' attribute is present, the SCXML Processor MUST evaluate it when the parent cancel element is evaluated and treat the result as if it had been entered as the value of 'sendid'.
215 test215.txml
6.4 mandatory false 3 0 1 If the typeexpr attribute is present, the SCXML Processor MUST evaluate it when the parent invoke element is evaluated and treat the result as if it had been entered as the value of 'type'.
216 test216.txml

Auxiliary File: test216sub1.txml
6.4 mandatory false 3 0 1 If the srcexpr attribute is present, the SCXML Processor MUST evaluate it when the parent invoke element is evaluated and treat the result as if it had been entered as the value of 'src'.
220 test220.txml
6.4 mandatory false 3 0 1 Platforms MUST support http://www.w3.org/TR/scxml/, as a value for the 'type' attribute
223 test223.txml
6.4 mandatory false 3 0 1 If the 'idlocation' attribute is present, the SCXML Processor MUST generate an id automatically when the invoke element is evaluated and store it in the location specified by 'idlocation'.
224 test224.txml
6.4 mandatory false 3 0 1 When the platform generates an identifier for 'idlocation', the identifier MUST have the form stateid.platformid, where stateid is the id of the state containing this element and platformid is automatically generated.
225 test225.txml
6.4 mandatory false 3 0 1 n the automatically generated invoke identifier, platformid MUST be unique within the current session
226 test226.txml

Auxiliary File: test226sub1.txml
6.4 mandatory false 3 0 1 When the invoke element is executed, the SCXML Processor MUST start a new logical instance of the external service specified in 'type' or 'typexpr', passing it the URL specified by 'src' or the data specified by content, or param.
228 test228.txml
6.4 mandatory false 3 0 1 the Processor MUST keep track of the unique invokeid and insure that it is included in all events that the invoked service returns to the invoking session.
229 test229.txml
6.4 mandatory false 3 0 1 When the 'autoforward' attribute is set to true, the SCXML Processor MUST send an exact copy of every external event it receives to the invoked process.
230 test230.txml
6.4 mandatory true 3 0 1 When the SCXML Processor autoforwards an event to the invoked process, all the fields specified in 5.11.1 The Internal Structure of Events MUST have the same values in the forwarded copy of the event
232 test232.txml
6.4 mandatory false 3 0 1 he invoked external service MAY return multiple events while it is processing
233 test233.txml
6.4 mandatory false 3 0 1 If there is a finalize handler in the instance of invoke that created the service that generated the event, the SCXML Processor MUST execute the code in that finalize handler right before it removes the event from the event queue for processing.
234 test234.txml
6.4 mandatory false 3 0 1 t MUST NOT execute the finalize handler in any other instance of invoke besides the one in the instance of invoke that created the service that generated the event.
235 test235.txml
6.4 mandatory false 3 0 1 Once the invoked external service has finished processing it MUST return a special event 'done.invoke.id' to the external event queue of the invoking process, where id is the invokeid for the corresponding invoke element.
236 test236.txml
6.4 mandatory false 3 0 1 The external service MUST NOT generate any other events after the invoke.done.invokeid event.
237 test237.txml
6.4 mandatory false 3 0 1 If the invoking session takes a transition out of the state containing the invoke before it receives the 'done.invoke.id' event, the SCXML Processor MUST automatically cancel the invoked component and stop its processing.
239 test239.txml

Auxiliary File: test239sub1.txml
6.4 mandatory false 3 0 1 Invoked services of type http://www.w3.org/TR/scxml/, http://www.w3.org/TR/ccxml/, http://www.w3.org/TR/voicexml30/, or http://www.w3.org/TR/voicexml21 MUST interpret values specified by the content element or 'src' attribute as markup to be executed
240 test240.txml
6.4 mandatory false 3 0 1 Invoked services of type http://www.w3.org/TR/scxml/, http://www.w3.org/TR/ccxml/, http://www.w3.org/TR/voicexml30/, or http://www.w3.org/TR/voicexml21 MUST interpret values specified by param element or 'namelist' attribute as values that are to be injected into their data models
241 test241.txml
6.4 mandatory false 3 0 1 Invoked services MUST treat values specified by param and namelist identically.
242 test242.txml

Auxiliary File: test242sub1.txml
6.4 mandatory false 3 0 1 Invoked services MUST also treat values specified by 'src' and content identically.
243 test243.txml
6.4 mandatory false 3 0 1 If the invoked process is of type http://www.w3.org/TR/scxml/ and 'name' of a param element in the invoke matches the 'id' of a data element in the top-level data declarations of the invoked session, the SCXML Processor MUST use the value of the param element as the initial value of the corresponding data element.
244 test244.txml
6.4 mandatory false 3 0 1 If the invoked process is of type http://www.w3.org/TR/scxml/ and the key of namelist item in the invoke matches the 'id' of a data element in the top-level data declarations of the invoked session, the SCXML Processor MUST use the corresponding value as the initial value of the corresponding data element.
245 test245.txml
6.4 mandatory false 3 0 1 If the invoked process is of type http://www.w3.org/TR/scxml/, and the name of a param element or the key of of a namelis item do not match the name of a data element in the invoked process, the Processor MUST NOT add the value of the param element or namelist key/value pair to the invoked session's data model.
247 test247.txml
6.4 mandatory false 3 0 1 If the invoked state machine is of type http://www.w3.org/TR/scxml/ and it reaches a top-level final state, the Processor MUST place the event done.invoke.id on the external event queue of the invoking machine, where id is the invokeid for this invocation
250 test250.txml
6.4 mandatory true 3 0 1 When an invoked process of type http://www.w3.org/TR/scxml/is cancelled by the invoking process, the Processor MUST execute the onexit handlers for all active states in the invoked session
252 test252.txml
6.4 mandatory false 3 0 1 Once it cancels an invoked session, the Processor MUST NOT insert any events it receives from the invoked session into the external event queue of the invoking session.
253 test253.txml
6.4 mandatory false 3 0 1 When the invoked session is of type http://www.w3.org/TR/scxml/, The SCXML Processor MUST support the use of SCXML Event/IO processor (E.1 SCXML Event I/O Processor) to communicate between the invoking and the invoked sessions.
530 test530.txml
6.4 mandatory false 3 0 1 The SCXML Processor MUST evaluate a child content element when the parent invoke element is evaluated and pass the resulting data to the invoked service.
554 test554.txml
6.4 mandatory false 3 0 1 if the evaluation of the invoke element's arguments arguments produces an error, the SCXML Processor MUST terminate the processing of the element without further action.
436 test436.txml
B.1 mandatory false 3 0 1 When the "datamodel" attribute of the scxml element has the value "null", the In() predicate must return 'true' if and only if that state is in the current state configuration.
278 test278.txml
B.2 optional false 3 0 1 In the ECMAScript data model, the SCXML processor MUST allow any data element to be accessed from any state.
444 test444.txml
B.2 optional false 3 0 1 In the ECMAScript datamodel, for each data element in the document, the SCXML Processor must create an ECMAScript variable object whose name is the value of the id attribute of the data element.
445 test445.txml
B.2 optional false 3 0 1 In the ECMAScript datamodel for each data element in the document, if the variable object associated with the element is not assigned at the time indicated by the 'binding' attribute on the scxml element, then the SCXML Processor must assign the variable the default value ECMAScript undefined.
448 test448.txml
B.2 optional false 3 0 1 In the ECMAScript datamodel, the SCXML Processor must place all variables in a single global ECMAScript scope.
449 test449.txml
B.2 optional false 3 0 1 In the ECMAScript datamodel, the SCXML Processor must convert ECMAScript expressions used in conditional expressions into their effective boolean value using the ToBoolean operator as described in Section 9.2 of [ECMASCRIPT-262].
451 test451.txml
B.2 optional false 3 0 1 In the ECMAScript datamodel, the SCXML Processor must add an ECMAScript function 'In()' to the SCXML namespace that takes a stateID as its argument and returns 'true' if and only if that state is in the current state configuration, as described in 5.10.1 Conditional Expressions.
452 test452.txml
B.2 optional false 3 0 1 In the ECMAScript datamodel, the SCXML Processor must accept any ECMAScript left-hand-side expression as a location expression.
453 test453.txml
B.2 optional false 3 0 1 In the ECMAScript datamodel, the SCXML Processor must accept any ECMAScript expression as a value expression.
456 test456.txml
B.2 optional false 3 0 1 the SCXML Processor must accept any ECMAScript program as defined in Section 14 of [ECMASCRIPT-262] as the content of a script element.
446 test446.txml

Auxiliary File: test446.txt
B.2 optional false 2 0 2 In the ECMAScript data model, if either the 'src' attribute or in-line content is provided in the data elemenet, then if the content (whether fetched or provided in-line) is JSON and the processor supports JSON, the SCXML Processor MUST create the corresponding ECMAScript structure and assign it as the value of the data element.
557 test557.txml

Auxiliary File: test557.txt
B.2 optional false 3 0 1 In the ECMAScript data model, if either the 'src' attribute or in-line content is provided in the data element, then if the content (whether fetched or provided in-line) is an XML document, the SCXML Processor MUST create the corresponding DOM structure and assign it as the value of the data element.
558 test558.txml

Auxiliary File: test558.txt
B.2 optional false 3 0 1 In the ECMAScript datamodel, if either the 'src' attribute or in-line content is provided in the data element, and the content (whether fetched or provided in-line) is not an XML document or JSON (or the processor does not support JSON), then the Processor MUST treat the content as a space-normalized string literal and assign it as the value of the variable
560 test560.txml
B.2 optional false 3 0 1 In the ECMAScript data model, if the content provided to populate _event.data can be interpeted as key-value pairs, then for each unique key, the SCXML Processor MUST create a property of _event.data whose name is the name of the key-value pair and whose value is the value of the key-value pair.
578 test578.txml
B.2 optional false 3 0 1 In the ECMAScript data model, if the content provided to populate _event.data cannot be interpreted as key value pairs and can be interpeted as JSON and the processor supports JSON, then the Processor MUST create the corresponding ECMAScript structure(s) as properties of _event.data.
561 test561.txml
B.2 optional false 3 0 1 In the ECMAScript data model, if the content provided to populate _event.data can be interpreted as a valid XML document (and cannot be interpreted as key-value pairs or JSON), the Processor MUST create the corresponding DOM structure and assign it as the value _event.data.
562 test562.txml
B.2 optional false 3 0 1 In the ECMAScript data model, if the content provided to populate _event.data is neither key-value pairs nor JSON nor a valid XML document, the Processor MUST treat the content treat the content as a space-normalized string literal and assign it as the value of _event.data.
569 test569.txml
B.2 optional false 2 0 2 For the _ioprocessors system variable in the ECMAScript datamodel the Processor MUST create an array with an object for each Event I/O processor that it supports, where the name of the object is the same as that of the I/O processor. For the SCXML and BasicHTTP Event I/O processors, the Processor MUST create a location property under the object, assigning the access URI as its String value.
457 test457.txml
B.2 optional false 3 0 1 In the ECMAScript data model, the legal iterable collections are arrays, namely objects that satisfy instanceof(Array) in ECMAScript. The legal values for the 'item' attribute on foreach are legal ECMAScript variable names.
459 test459.txml
B.2 optional false 2 0 2 In the ECMAScript data model, the iteration order for the foreach element is the order of the underlying ECMAScript array, and goes from an index of 0 by increments of one to an index of array_name.length - 1.
460 test460.txml
B.2 optional false 3 0 1 In the ECMAScript data model, since shallow copy is required for the foreach element, foreach assignment is equivalent to item = array_name[index] in ECMAScript.
189 test189.txml
C.1 mandatory false 4 0 0 When using the scxml event i/o processor] If the target is the special term '#_internal', the Processor MUST add the event to the internal event queue of the sending session
190 test190.txml
C.1 mandatory false 4 0 0 [When using the scxml event i/o processor] If the target is the special term '#_scxml_sessionid', where sessionid is the id of an SCXML session that is accessible to the Processor, the Processor MUST add the event to the external queue of that session.
191 test191.txml
C.1 mandatory false 3 0 1 [When using the scxml event i/o processor] If the target is the special term '#_parent', the Processor MUST add the event to the external event queue of the SCXML session that invoked the sending session, if there is one.
192 test192.txml
C.1 mandatory false 3 0 1 [When using the scxml event i/o processor] If the target is the special term '#_invokeid', where invokeid is the invokeid of an SCXML session that the sending session has created by invoke, the Processor MUST must add the event to the external queue of that session.
193 test193.txml
C.1 optional false 3 0 1 [When using the scxml event i/o processor] If neither the 'target' nor the 'targetexpr' attribute is specified, the SCXML Processor MUST add the event to the external event queue of the sending session.
347 test347.txml
C.1 mandatory false 3 0 1 SCXML Processors MUST support sending messages to and receiving messages from other SCXML sessions using the SCXML Event I/O Processor.
348 test348.txml
C.1 mandatory false 4 0 0 name'. The sending SCXML Processor MUST take the value of this attribute from the 'event' attribute of the send element. The receiving SCXML Processor MUST use it as the value the 'name' field in the event that it generates.
349 test349.txml
C.1 mandatory false 4 0 0 source'. The sending SCXML Processor MUST populate this attribute with a URI that the receiving processor can use to reply to the sending processor. The receiving SCXML Processor MUST use this URI as the value of the 'origin' field in the event that it generates.
350 test350.txml
C.1 mandatory false 4 0 0 target'. The sending SCXML Processor MUST take the value of this attribute from the 'target' attribute of the send element. The receiving SCXML Processor MUST use this value to determine which session to deliver the message to.
351 test351.txml
C.1 mandatory false 3 1 0 sendid'. the sending SCXML Processor MUST populate this attribute with the identifier specified in the 'id' attribute or automatically generated by the platform when the send tag is executed in the sending session. (See 6.2 send.) The receiving SCXML Processor MUST use this value as the value of the 'sendid' field in the event that it generates. If the author of the sending session did not specify either the 'id' or 'idlocation' attribute, the sending SCXML Processor MUST leave this attribute empty.
352 test352.txml
C.1 mandatory false 4 0 0 'sourcetype'. The sending SCXML Processor MUST assign this attribute the value "scxml". (Note that other types of senders will assign different values.) The receiving Processor MUST use this value as the value of the 'origintype' field of the event that it generates.
354 test354.txml
C.1 mandatory false 4 0 0 The 'data' field of the event raised in the receiving session MUST contain a copy of the data specified in the 'namelist' attribute or in param or content elements in the sending session. The nature of the copy operation depends on the datamodel in question. However, the Processor MUST ensure that changes to the transmitted data in the receiving session do not affect the data in the sending session and vice-versa. The format of the 'data' field will depend on the datamodel of the receiving session.
495 test495.txml
C.1 mandatory false 4 0 0 If no errors occur, the receiving Processor MUST convert the message into an SCXML event, using the mapping defined above and insert it into the appropriate queue, as defined in Send Targets.
496 test496.txml
C.1 mandatory false 3 0 1 If the sending SCXML session specifies a session that does not exist or is inaccessible, the SCXML Processor MUST place the error error.communication on the internal event queue of the sending session.
500 test500.txml
C.1 mandatory false 2 0 2 SCXML Processors that support the BasicHTTP Event I/O Processor MUST maintain a 'scxml' entry in the _ioprocessors system variable. The Processor MUST maintain a 'location' field inside this entry whose value holds an address that external entities can use to communicate with this SCXML session using the SCXML Event I/O Processor.
501 test501.txml
C.1 mandatory false 3 0 1 The 'location' field inside the entry for the SCXML Event I/O Processor in the _ioprocessors system variable MUST hold an address that external entities can use to communicate with this SCXML session using the SCXML Event I/O Processor.
509 test509.txml
C.2 optional false 2 0 2 An SCXML Processor that supports the Basic HTTP Event I/O Processor MUST accept messages at the access URI as HTTP POST requests
510 test510.txml
C.2 optional false 2 0 2 The SCXML Processor MUST validate the message it receives [via the Basic HTTP Event I/O Processor] and then MUST build the appropriate SCXML event and MUST add it to the external event queue
513 test513.txt
C.2 optional true 2 0 2 After it adds the received message to the appropriate event queue, the SCXML Processor MUST then indicate the result to the external component via a success response code 2XX.
518 test518.txml
C.2 optional false 2 0 2 If the namelist attribute is defined [in send], the SCXML Processor MUST map its variable names and values to HTTP POST parameters
519 test519.txml
C.2 optional false 2 0 2 If one or more param children are present [in send], the SCXML Processor MUST map their names (i.e. name attributes) and values to HTTP POST parameters
520 test520.txml
C.2 optional false 2 0 2 If a content child is present, the SCXML Processor MUST use its value as the body of the message.
522 test522.txml
C.2 optional false 2 0 2 SCXML Processors that support the BasicHTTP Event I/O Processor MUST maintain a 'basichttp' entry in the _ioprocessors system variable. The Processor MUST maintain a in 'location' field inside this entry whose value holds an address that external entities can use to communicate with this SCXML session using the Basic HTTP Event I/O Processor.
531 test531.txml
C.2 optional false 2 0 2 If a single instance of the parameter '_scxmleventname' is present, the SCXML Processor MUST use its value as the name of the SCXML event that it raises.
532 test532.txml
C.2 optional false 2 0 2 If _scxmleventname is not present, the Processor MUST the name of the HTTP method that was used to deliver the event as name of the SCXML event that it raises
534 test534.txml
C.2 optional false 2 0 2 If the 'event' parameter of send is defined, the SCXML Processor MUST use its value as the value of the HTTP POST parameter _scxmleventname
567 test567.txml
C.2 optional false 2 0 2 The processor MUST use any message content other than '_scxmleventname' to populate _event.data.
577 test577.txml
C.2 optional false 2 0 2 If neither the 'target' nor the 'targetexpr' attribute is specified, the SCXML Processor MUST add the event error.communication to the internal event queue of the sending session.

A The Assertion Manifest file

The manifest.xml file contains complete information about all assertions and tests. The Assertion Manifest contains a root element called <assertions> ; this is the container of all the Test Assertions. Each <assertion> contains the text of the assertion as CDATA plus one or more <test> elements, which contain links to the actual tests.

The Assertion is defined by attributes on the <assertion> element. These attributes allow for a more complete identification of the nature of the current test assertion.

Each <test> element contains the following attributes:

In addition, the <test> element has one or more <start> children giving the URL of the files to execute, plus, optionally (and rarely) a <dep> child in cases where a utility file (such as a text file) is needed to complete the test.

For instance here’s a fragment of the manifest.xml document:

<assert id="355"  spec="3.2">
  	  <![CDATA[At system initialization time, if the 'initial' attribute is not present, 
  	  the Processor MUST enter the first state in document order.]]>
  <test id="355" optional="false" manual="false">
  <start uri="355/test355.txml"/>
</test>
</assert>

B Change Log

Changes after June 17, 2014