<workflow>
    <type>WFNEST</type>
    <description>Test Workflow for Workflow::Condition::Nested</description>
    <persister>TestWFNest</persister>

    <state name="INITIAL">
        <description>INITIAL</description>
        <action name="initialize" resulting_state="INITIALIZED">
        </action>
    </state>

    <!-- This is the starting point for all test sets -->

    <state name="INITIALIZED">
        <description>Initialized</description>
        <action name="test_greedy_or" resulting_state="TEST_GREEDY_OR">
        </action>
        <action name="test_lazy_and" resulting_state="TEST_LAZY_AND">
        </action>
        <action name="test_lazy_or" resulting_state="TEST_LAZY_OR">
        </action>
        <action name="test_check_return" resulting_state="TEST_CHECK_RETURN">
        </action>
        <action name="tests_done" resulting_state="SUCCESS">
        </action>
    </state>

    <!-- This is an additional step to track failed tests -->

    <state name="SUBTEST_FAIL">
        <description>SUBTEST_FAIL</description>
        <action name="ack_subtest_fail" resulting_state="INITIALIZED">
        </action>
    </state>

    <!-- Final state when all tests are complete -->

    <state name="SUCCESS">
        <description>Success</description>
    </state>

    <!-- Test set for Workflow::Condition::GreedyOR (test_greedy_or) -->

    <state name="TEST_GREEDY_OR">
        <description>TEST_GREEDY_OR</description>
        <action name="greedy_or_1" resulting_state="TEST_GREEDY_OR_1_PREP">
        </action>
        <action name="greedy_or_2" resulting_state="TEST_GREEDY_OR_2_PREP">
        </action>
        <action name="subtests_done" resulting_state="INITIALIZED">
        </action>
    </state>

    <state name="TEST_GREEDY_OR_1_PREP"
            autorun="yes">
        <description>TEST_GREEDY_OR_1_PREP</description>
        <action name="null1" resulting_state="INITIALIZED">
            <condition name="greedy_or_1"/>
        </action>
        <action name="null2" resulting_state="SUBTEST_FAIL">
            <condition name="!greedy_or_1"/>
        </action>
    </state>

    <state name="TEST_GREEDY_OR_2_PREP"
            autorun="yes">
        <description>TEST_GREEDY_OR_2_PREP</description>
        <action name="null1" resulting_state="INITIALIZED">
            <condition name="greedy_or_2"/>
        </action>
        <action name="null2" resulting_state="SUBTEST_FAIL">
            <condition name="!greedy_or_2"/>
        </action>
    </state>

    <!-- Test set for Workflow::Condition::LazyAND -->

    <state name="TEST_LAZY_AND">
        <description>TEST_LAZY_AND</description>
        <action name="lazy_and_1" resulting_state="TEST_LAZY_AND_1">
        </action>
        <action name="lazy_and_2" resulting_state="TEST_LAZY_AND_2">
        </action>
        <action name="subtests_done" resulting_state="INITIALIZED">
        </action>
    </state>

    <state name="TEST_LAZY_AND_1"
            autorun="yes">
        <description>TEST_LAZY_AND_1</description>
        <action name="null1" resulting_state="INITIALIZED">
            <condition name="lazy_and_1"/>
        </action>
        <action name="null2" resulting_state="SUBTEST_FAIL">
            <condition name="!lazy_and_1"/>
        </action>
    </state>

    <state name="TEST_LAZY_AND_2"
            autorun="yes">
        <description>TEST_LAZY_AND_2</description>
        <action name="null1" resulting_state="INITIALIZED">
            <condition name="lazy_and_2"/>
        </action>
        <action name="null2" resulting_state="SUBTEST_FAIL">
            <condition name="!lazy_and_2"/>
        </action>
    </state>

    <!-- Test set for Workflow::Condition::LazyOR -->

    <state name="TEST_LAZY_OR">
        <description>TEST_LAZY_OR</description>
        <action name="lazy_or_1" resulting_state="TEST_LAZY_OR_1">
        </action>
        <action name="lazy_or_2" resulting_state="TEST_LAZY_OR_2">
        </action>
        <action name="subtests_done" resulting_state="INITIALIZED">
        </action>
    </state>

    <state name="TEST_LAZY_OR_1"
            autorun="yes">
        <description>TEST_LAZY_OR_1</description>
        <action name="null1" resulting_state="INITIALIZED">
            <condition name="lazy_or_1"/>
        </action>
        <action name="null2" resulting_state="SUBTEST_FAIL">
            <condition name="!lazy_or_1"/>
        </action>
    </state>

    <state name="TEST_LAZY_OR_2"
            autorun="yes">
        <description>TEST_LAZY_OR_2</description>
        <action name="null1" resulting_state="INITIALIZED">
            <condition name="lazy_or_2"/>
        </action>
        <action name="null2" resulting_state="SUBTEST_FAIL">
            <condition name="!lazy_or_2"/>
        </action>
    </state>

    <!-- Test set for Workflow::Condition::CheckReturn -->

    <state name="TEST_CHECK_RETURN">
        <description>TEST_CHECK_RETURN</description>
        <action name="check_return_1" resulting_state="TEST_CHECK_RETURN_1_PREP">
        </action>
        <action name="check_return_2" resulting_state="TEST_CHECK_RETURN_2_PREP">
        </action>
        <action name="check_return_3" resulting_state="TEST_CHECK_RETURN_3_PREP">
        </action>
        <action name="subtests_done" resulting_state="INITIALIZED">
        </action>
    </state>

    <state name="TEST_CHECK_RETURN_1_PREP"
            autorun="yes">
        <description>TEST_CHECK_RETURN_1_PREP</description>
        <action name="null1" resulting_state="INITIALIZED">
            <condition name="check_ret_1"/>
        </action>
        <action name="null2" resulting_state="SUBTEST_FAIL">
            <condition name="!check_ret_1"/>
        </action>
    </state>

    <state name="TEST_CHECK_RETURN_2_PREP"
            autorun="yes">
        <description>TEST_CHECK_RETURN_2_PREP</description>
        <action name="null1" resulting_state="INITIALIZED">
            <condition name="check_ret_2"/>
        </action>
        <action name="null2" resulting_state="SUBTEST_FAIL">
            <condition name="!check_ret_2"/>
        </action>
    </state>

    <state name="TEST_CHECK_RETURN_3_PREP"
            autorun="yes">
        <description>TEST_CHECK_RETURN_3_PREP</description>
        <action name="null1" resulting_state="INITIALIZED">
            <condition name="check_ret_3"/>
        </action>
        <action name="null2" resulting_state="SUBTEST_FAIL">
            <condition name="!check_ret_3"/>
        </action>
    </state>

</workflow>