<?xml version="1.0" encoding="UTF-8"?>
<flow>
    <!--
        a=>1s  b=>2s  c=>5s
    -->
    <!-- 串行编排测试 -->
    <chain name="then1">
        <!-- 超时 -->
        THEN(a,b).maxWaitMilliseconds(200);
    </chain>
    <chain name="then2">
        <!-- 不超时 -->
        THEN(a,b).maxWaitMilliseconds(500);
    </chain>

    <!-- 并行编排测试 -->
    <chain name="when1">
        <!-- 超时 -->
        WHEN(a,c).maxWaitMilliseconds(300);
    </chain>
    <chain name="when2">
        <!-- 不超时 -->
        WHEN(a,b).maxWaitMilliseconds(300);
    </chain>

    <!-- 循环编排测试 -->
    <chain name="for1">
        <!-- 超时 -->
        FOR(2).DO(a).maxWaitMilliseconds(100);
    </chain>
    <chain name="for2">
        <!-- 不超时 -->
        FOR(2).DO(a).maxWaitMilliseconds(300);
    </chain>
    <!-- w 循环两次 -->
    <chain name="while1">
        <!-- 超时 -->
        WHILE(w).DO(a).maxWaitMilliseconds(100);
    </chain>
    <chain name="while2">
        <!-- 不超时 -->
        WHILE(w).DO(a).maxWaitMilliseconds(300);
    </chain>
    <!-- x 迭代两次 -->
    <chain name="iterator1">
        <!-- 超时 -->
        ITERATOR(x).DO(a).maxWaitMilliseconds(100);
    </chain>
    <chain name="iterator2">
        <!-- 不超时 -->
        ITERATOR(x).DO(a).maxWaitMilliseconds(300);
    </chain>

    <!-- 选择编排测试 -->
    <!-- s 选择 b 组件 -->
    <chain name="switch1">
        <!-- 超时 -->
        SWITCH(s).TO(a, b).maxWaitMilliseconds(100);
    </chain>
    <chain name="switch2">
        <!-- 不超时 -->
        SWITCH(s).TO(a, b).maxWaitMilliseconds(300);
    </chain>

    <!-- 条件编排测试 -->
    <!-- f 返回 true -->
    <chain name="if1">
        <!-- 超时 -->
        IF(f, b, c).maxWaitMilliseconds(100);
    </chain>
    <chain name="if2">
        <!-- 不超时 -->
        IF(f, b, c).maxWaitMilliseconds(300);
    </chain>

    <!-- 测试单个组件 -->
    <chain name="component1">
        <!-- 超时 -->
        WHEN(
        a.maxWaitMilliseconds(200),
        c.maxWaitMilliseconds(300)
        );
    </chain>
    <chain name="component2">
        <!-- 不超时 -->
        WHEN(
        a.maxWaitMilliseconds(200),
        b.maxWaitMilliseconds(300)
        );
    </chain>

    <!-- 测试 FINALLY -->
    <chain name="finally">
        <!-- 超时，但 FINALLY 执行 -->
        THEN(PRE(a), b, FINALLY(d)).maxWaitMilliseconds(200);
    </chain>

    <!-- 测试 chain -->
    <chain name="testChain">
        THEN(b)
    </chain>
    <chain name="chain1">
        <!-- 超时 -->
        testChain.maxWaitMilliseconds(100);
    </chain>
    <chain name="chain2">
        <!-- 不超时 -->
        testChain.maxWaitMilliseconds(300);
    </chain>
</flow>