<?xml version="1.0" encoding="UTF-8"?>
<ccxml xmlns="http://www.w3.org/2002/09/ccxml" xmlns:conf="http://www.w3.org/2005/ccxml-conformance" version="1.0">
<!--
Release 1.1 - 2010-07-09
FIXED: 
- reason added to ccxml.kill.* TA 493, 502 (no specific ISSUE)
-->
<!--
Release 1.2 - 2010-10-21
FIXED: ISSUE-733: - reason on error.494 event added 
-->

	<conf:docsetup/>
	<var name="ConnectionID" expr="undefined"/>
	<var name="param1" expr="1"/>
	<var name="param2" expr="'hello'"/>
	<var name="chld_reason"/>
	<var name="send_id_1"/>
	<var name="DialogID"/>
	<var name="i_success"/>
	<var name="HANDLE_ALL"/>
	<script><![CDATA[
var i=0;
assertions[i++] = init_assertion('495');
assertions[i++] = init_assertion('493');
assertions[i++] = init_assertion('494');
assertions[i++] = init_assertion('500');
assertions[i++] = init_assertion('501');
assertions[i++] = init_assertion('502');

add_2_assert_trace('1220');

var assert_last = i - 1;
var assert_index = -1;
//
// out of the loop assertions (children?)
//
//
s_ASSERTIONS_LEFT = show_remained_assertions();
var b_in_test = false;

]]></script>
	<var name="ccxml_start_time"/>
	<var name="ccxml_end_time"/>
	<var name="ccxml_delay_time" expr="0"/>
	<script><![CDATA[
	   function GetMilliseconds() {
     var d = new Date();
     return d.getTime();  // ms from midnight on Jan 1, 2000.
   }
	  function DelayMilliseconds(N) {
		var r_delay;
		ccxml_start_time = GetMilliseconds();
		do{
			ccxml_end_time = GetMilliseconds();
			r_delay = ccxml_end_time - ccxml_start_time;
		}while(r_delay < N);			
	   return r_delay;
   }
		   ]]></script>
	<var name="i_count_normal_events" expr="0"/>
	<var name="i_long_delay_before_error" expr="200"/>
	<var name="i_delay_between_sends" expr="100"/>
	<var name="i_short_delay_before_error" expr="50"/>
	<var name="i_delay_first_good" expr="600"/>
	<eventprocessor statevariable="current_state">
		<conf:setup type="alerting"/>
		<transition event="connection.alerting" state="init">
			<send targettype="'ccxml'" target="session.id" name="'user.timeout'" delay="TEST_SHORT_TIMEOUT"/>
			<accept connectionid="event$.connectionid"/>
		</transition>
		<transition event="connection.connected" state="init">
			<assign name="ConnectionID" expr="event$.connectionid"/>
			<send targettype="'ccxml'" target="session.id" name="name_prepare_new"/>
		</transition>
		<transition event="user.PREPARE_NEW">
			<conf:comment expr="'Event: ' + event$.name"/>
			<assign name="HANDLE_ALL" expr="true"/>
			<if cond="assert_index &gt;= 0">
				<assign name="ASSERTION_NUM" expr="assertions[assert_index].number"/>
				<assign name="t_ASSERT_RESULT" expr="assertions[assert_index].P_F"/>
				<script>t_ASSERT_REASON = assertions[assert_index].reason</script>
				<if cond="t_ASSERT_RESULT == s_PASS">
					<conf:pass reason="t_ASSERT_REASON"/>
					<elseif cond="t_ASSERT_RESULT == s_FAIL"/>
					<conf:fail reason="t_ASSERT_REASON"/>
					<else/>
					<conf:not_exec reason="t_ASSERT_REASON"/>
				</if>
			</if>
			<assign name="assert_index" expr="assert_index + 1"/>
			<if cond="assert_index &gt; assert_last">
				<log label="s_TA" expr="s_ASSERTIONS_LEFT"/>
				<conf:uncond_exit expr="'DONE'"/>
				<else/>
				<log label="s_TA" expr="s_ASSERTIONS_LEFT"/>
				<assign name="ASSERTION_NUM" expr=" assertions[assert_index].number"/>
				<assign name="t_ASSERT_REASON" expr="''"/>
				<script>assertions[assert_index].P_F = s_FAIL;</script>
				<assign name="current_state" expr="state_prefix + ASSERTION_NUM"/>
				<send targettype="'ccxml'" target="session.id" name="start_name_prefix + ASSERTION_NUM"/>
			</if>
		</transition>
		<transition event="user.START_ASSERTION_495" state="ASSERTION_NMBR_495">
			<!--
495 	
9.1 Overview 	
Received CCXML events that are not named "ccxml.kill" or prefixed by "ccxml.kill." or "error." 
are placed at the tail of the event queue
-->
			<conf:comment expr="'Event: ' + event$.name"/>
			<assign name="i_count_normal_events" expr="0"/>
			<send targettype="'ccxml'" target="session.id" name="'user.count.495.1'"/>
			<assign name="ccxml_delay_time" expr="DelayMilliseconds(i_delay_between_sends)"/>
			<send targettype="'ccxml'" target="session.id" name="'user.count.495.2'"/>
			<assign name="ccxml_delay_time" expr="DelayMilliseconds(i_delay_between_sends)"/>
			<send targettype="'ccxml'" target="session.id" name="'user.count.495.3'"/>
			<conf:comment expr="'Done Sending events for 495.'"/>
		</transition>
		<transition event="user.count.495.1">
			<conf:comment expr="'Event: ' + event$.name"/>
			<assign name="i_count_normal_events" expr="1"/>
		</transition>
		<transition event="user.count.495.2">
			<conf:comment expr="'Event: ' + event$.name"/>
			<if cond="i_count_normal_events == 1">
				<assign name="i_count_normal_events" expr="2"/>
			</if>
		</transition>
		<transition event="user.count.495.3">
			<conf:comment expr="'Event: ' + event$.name"/>
			<if cond="i_count_normal_events == 2">
				<script>assertions[assert_index].P_F = s_PASS;</script>
			</if>
			<assign name="ASSERTION_NUM" expr="'1220'"/>
			<conf:pass/>

			<send targettype="'ccxml'" target="session.id" name="name_prepare_new"/>
		</transition>
		<transition event="user.START_ASSERTION_493" state="ASSERTION_NMBR_493">
			<!--
493
9.1 Overview 	
Received CCXML events named "ccxml.kill" 
or with a prefix of "ccxml.kill." 
are placed at the head of the event queue 
-->
			<conf:comment expr="'Event: ' + event$.name"/>
			<assign name="i_count_normal_events" expr="0"/>
			<send targettype="'ccxml'" target="session.id" name="'user.count'"/>
			<assign name="ccxml_delay_time" expr="DelayMilliseconds(i_long_delay_before_error)"/>
			<send targettype="'ccxml'" target="session.id" name="'user.count'"/>
			<assign name="ccxml_delay_time" expr="DelayMilliseconds(i_short_delay_before_error)"/>
			<send targettype="'ccxml'" target="session.id" name="'user.count'"/>
			<assign name="ccxml_delay_time" expr="DelayMilliseconds(i_short_delay_before_error)"/>
			<send targettype="'ccxml'" target="session.id" name="'user.count'"/>
			<assign name="ccxml_delay_time" expr="DelayMilliseconds(i_short_delay_before_error)"/>
			
			<!-- FIXED: reason added to ccxml.kill.* -->
			<var name="reason" expr="'kill done'"/>
			<send targettype="'ccxml'" target="session.id" name="'ccxml.kill.493'" namelist="reason"/>
			<conf:comment expr="'Sent ccxml.kill event.'"/>
		</transition>
		<transition event="user.count">
			<conf:comment expr="'Event: ' + event$.name"/>
			<assign name="i_count_normal_events" expr="i_count_normal_events + 1"/>
			<if cond="i_count_normal_events &lt; 2">
				<assign name="ccxml_delay_time" expr="DelayMilliseconds(i_delay_first_good)"/>
			</if>
		</transition>
		<transition event="ccxml.kill.493" state="ASSERTION_NMBR_493">
			<conf:comment expr="'Event: ' + event$.name"/>
			<if cond="i_count_normal_events &lt; 2">
				<script>assertions[assert_index].P_F = s_PASS;</script>
			</if>
			<send targettype="'ccxml'" target="session.id" name="name_prepare_new"/>
		</transition>
		<transition event="user.START_ASSERTION_494" state="ASSERTION_NMBR_494">
			<!--
494 	
9.1 Overview 	
Received CCXML events named with a prefix of "error." are placed at the head of the event queue, 
but behind any events named "ccxml.kill" or prefixed with "ccxml.kill." or "error.". 	
-->
			<conf:comment expr="'Event: ' + event$.name"/>
			<assign name="i_count_normal_events" expr="0"/>
			<send targettype="'ccxml'" target="session.id" name="'user.count'"/>
			<assign name="ccxml_delay_time" expr="DelayMilliseconds(i_long_delay_before_error)"/>
			<send targettype="'ccxml'" target="session.id" name="'user.count'"/>
			<assign name="ccxml_delay_time" expr="DelayMilliseconds(i_short_delay_before_error)"/>
			<send targettype="'ccxml'" target="session.id" name="'user.count'"/>
			<assign name="ccxml_delay_time" expr="DelayMilliseconds(i_short_delay_before_error)"/>
			<send targettype="'ccxml'" target="session.id" name="'user.count'"/>
			<assign name="ccxml_delay_time" expr="DelayMilliseconds(i_short_delay_before_error)"/>
			<!-- FIXED ISSUE-733:  added reason on error.494 -->
			<var name="reason" expr="'error 494 sent'"/>
			<send targettype="'ccxml'" target="session.id" name="'error.494'" namelist="reason"/>
			<conf:comment expr="'Sent ccxml.kill event.'"/>
		</transition>
		<transition event="user.count">
			<conf:comment expr="'Event: ' + event$.name"/>
			<assign name="i_count_normal_events" expr="i_count_normal_events + 1"/>
			<if cond="i_count_normal_events &lt; 2">
				<assign name="ccxml_delay_time" expr="DelayMilliseconds(i_delay_first_good)"/>
			</if>
		</transition>
		<transition event="error.494" state="ASSERTION_NMBR_494">
			<conf:comment expr="'Event: ' + event$.name"/>
			<if cond="i_count_normal_events &lt; 2">
				<script>assertions[assert_index].P_F = s_PASS;</script>
			</if>
			<send targettype="'ccxml'" target="session.id" name="name_prepare_new"/>
		</transition>
		<transition event="user.START_ASSERTION_500" state="ASSERTION_NMBR_500">
			<!--
500 	
9.1 Overview 	
If the EHIA selects a matching <transition> for an event, 
an object representing the event is created at transition scope, 
and the child elements of the <transition> are executed in document order.
-->
			<conf:comment expr="'Event: ' + event$.name"/>
			<var name="s_500_t" expr="'CHECK40'"/>
			<var name="s_500" expr="'CHECK'"/>
			<var name="n_500_a" expr="3"/>
			<var name="n_500_b" expr="5"/>
			<assign name="n_500_a" expr="n_500_a + n_500_b"/>
			<assign name="n_500_a" expr="n_500_a * n_500_b"/>
			<var name="s_500_test" expr="s_500 + n_500_a"/>
			<if cond="s_500_test==s_500_t">
				<script>assertions[assert_index].P_F = s_PASS;</script>
			</if>
			<send targettype="'ccxml'" target="session.id" name="name_prepare_new"/>
		</transition>
		<transition event="user.START_ASSERTION_501" state="ASSERTION_NMBR_501">
			<!--
9.1 Overview 	
If the EHIA finds no matching <transition>, and the event is not named "ccxml.kill" 
and not prefixed with either "ccxml.kill." or "error.", then the event is simply discarded.
-->
			<conf:comment expr="'Event: ' + event$.name"/>
			<assign name="HANDLE_ALL" expr="false"/>
			<send targettype="'ccxml'" target="session.id" name="'user.discard.501'"/>
			<send targettype="'ccxml'" target="session.id" name="'user.ok.501'" delay="'500ms'"/>
		</transition>
		<transition event="user.ok.501">
			<conf:comment expr="'Event: ' + event$.name"/>
			<script>assertions[assert_index].P_F = s_PASS;</script>
			<send targettype="'ccxml'" target="session.id" name="name_prepare_new"/>
		</transition>
		<transition event="user.START_ASSERTION_502" state="ASSERTION_NMBR_502">
			<!--
502 	
TEST-CAUSES-EXIT
9.1 Overview 	
If the EHIA finds no matching <transition>, and the event is named "ccxml.kill" 
or is prefixed with "ccxml.kill." or with "error.", then the CCXML session processing the event is terminated. 	
-->
			<conf:comment expr="'Event: ' + event$.name"/>
			<conf:comment expr="'Sent ccxml.kill.502 .'"/>
			<conf:comment expr="'If NO FAIL message, assertion PASS.'"/>
			<assign name="HANDLE_ALL" expr="false"/>
			<!-- FIXED: reason added to ccxml.kill.* -->
			<var name="reason" expr="'kill done'"/>			
			<send targettype="'ccxml'" target="session.id" name="'ccxml.kill.502'" namelist="reason"/>
			<send targettype="'ccxml'" target="session.id" name="'user.failed.502'" delay="'1500ms'"/>
		</transition>
		<transition event="user.failed.502">
			<conf:comment expr="'Event: ' + event$.name"/>
			<script>
			assertions[assert_index].P_F = s_FAIL;
			assertions[assert_index].reason = 'Received an event after ccxml.kill.502, expected: app exit, event lost '  
			
			</script>
			<send targettype="'ccxml'" target="session.id" name="name_prepare_new"/>
		</transition>
		<transition event="send.successful">
		</transition>
		<transition event="user.timeout">
			<conf:uncond_exit expr="'TEST-TIMEOUT'"/>
		</transition>
		<transition event="*" cond="HANDLE_ALL">
			<assign name="t_ASSERT_REASON" expr="'UNEXPECTED EVENT ' + event$.name + ' IN STATE ' + current_state"/>
			<conf:comment expr="t_ASSERT_REASON"/>
			<if cond="current_state == 'init'">
				<conf:uncond_exit expr="'Did not come out from init state.'"/>
				<else/>
				<send targettype="'ccxml'" target="session.id" name="name_prepare_new"/>
			</if>
		</transition>
		<!-- END Loquendo mod -->
	</eventprocessor>
</ccxml>
