1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/system/gonk/tests/test_ril_worker_ecm.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,188 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +subscriptLoader.loadSubScript("resource://gre/modules/ril_consts.js", this); 1.8 + 1.9 +function run_test() { 1.10 + run_next_test(); 1.11 +} 1.12 + 1.13 +function _getWorker() { 1.14 + let _postedMessage; 1.15 + let _worker = newWorker({ 1.16 + postRILMessage: function(data) { 1.17 + }, 1.18 + postMessage: function(message) { 1.19 + _postedMessage = message; 1.20 + } 1.21 + }); 1.22 + return { 1.23 + get postedMessage() { 1.24 + return _postedMessage; 1.25 + }, 1.26 + get worker() { 1.27 + return _worker; 1.28 + } 1.29 + }; 1.30 +} 1.31 + 1.32 +var timeoutCallback = null; 1.33 +var timeoutDelayMs = 0; 1.34 +const TIMER_ID = 1234; 1.35 +const TIMEOUT_VALUE = 300000; // 5 mins. 1.36 + 1.37 +// No window in xpcshell-test. Create our own timer mechanism. 1.38 + 1.39 +function setTimeout(callback, timeoutMs) { 1.40 + timeoutCallback = callback; 1.41 + timeoutDelayMs = timeoutMs; 1.42 + do_check_eq(timeoutMs, TIMEOUT_VALUE); 1.43 + return TIMER_ID; 1.44 +} 1.45 + 1.46 +function clearTimeout(timeoutId) { 1.47 + do_check_eq(timeoutId, TIMER_ID); 1.48 + timeoutCallback = null; 1.49 +} 1.50 + 1.51 +function fireTimeout() { 1.52 + do_check_neq(timeoutCallback, null); 1.53 + if (timeoutCallback) { 1.54 + timeoutCallback(); 1.55 + timeoutCallback = null; 1.56 + } 1.57 +} 1.58 + 1.59 +add_test(function test_enter_emergencyCbMode() { 1.60 + let workerHelper = _getWorker(); 1.61 + let worker = workerHelper.worker; 1.62 + let context = worker.ContextPool._contexts[0]; 1.63 + 1.64 + // Do it twice. Should always send the event. 1.65 + for (let i = 0; i < 2; ++i) { 1.66 + context.RIL[UNSOLICITED_ENTER_EMERGENCY_CALLBACK_MODE](); 1.67 + let postedMessage = workerHelper.postedMessage; 1.68 + 1.69 + // Should store the mode. 1.70 + do_check_eq(context.RIL._isInEmergencyCbMode, true); 1.71 + 1.72 + // Should notify change. 1.73 + do_check_eq(postedMessage.rilMessageType, "emergencyCbModeChange"); 1.74 + do_check_eq(postedMessage.active, true); 1.75 + do_check_eq(postedMessage.timeoutMs, TIMEOUT_VALUE); 1.76 + 1.77 + // Should start timer. 1.78 + do_check_eq(context.RIL._exitEmergencyCbModeTimeoutID, TIMER_ID); 1.79 + } 1.80 + 1.81 + run_next_test(); 1.82 +}); 1.83 + 1.84 +add_test(function test_exit_emergencyCbMode() { 1.85 + let workerHelper = _getWorker(); 1.86 + let worker = workerHelper.worker; 1.87 + let context = worker.ContextPool._contexts[0]; 1.88 + 1.89 + context.RIL[UNSOLICITED_ENTER_EMERGENCY_CALLBACK_MODE](); 1.90 + context.RIL[UNSOLICITED_EXIT_EMERGENCY_CALLBACK_MODE](); 1.91 + let postedMessage = workerHelper.postedMessage; 1.92 + 1.93 + // Should store the mode. 1.94 + do_check_eq(context.RIL._isInEmergencyCbMode, false); 1.95 + 1.96 + // Should notify change. 1.97 + do_check_eq(postedMessage.rilMessageType, "emergencyCbModeChange"); 1.98 + do_check_eq(postedMessage.active, false); 1.99 + 1.100 + // Should clear timer. 1.101 + do_check_eq(context.RIL._exitEmergencyCbModeTimeoutID, null); 1.102 + 1.103 + run_next_test(); 1.104 +}); 1.105 + 1.106 +add_test(function test_request_exit_emergencyCbMode_when_timeout() { 1.107 + let workerHelper = _getWorker(); 1.108 + let worker = workerHelper.worker; 1.109 + let context = worker.ContextPool._contexts[0]; 1.110 + 1.111 + context.RIL[UNSOLICITED_ENTER_EMERGENCY_CALLBACK_MODE](); 1.112 + do_check_eq(context.RIL._isInEmergencyCbMode, true); 1.113 + do_check_eq(context.RIL._exitEmergencyCbModeTimeoutID, TIMER_ID); 1.114 + 1.115 + let parcelTypes = []; 1.116 + context.Buf.newParcel = function(type, options) { 1.117 + parcelTypes.push(type); 1.118 + }; 1.119 + 1.120 + // Timeout. 1.121 + fireTimeout(); 1.122 + 1.123 + // Should clear timeout event. 1.124 + do_check_eq(context.RIL._exitEmergencyCbModeTimeoutID, null); 1.125 + 1.126 + // Check indeed sent out REQUEST_EXIT_EMERGENCY_CALLBACK_MODE. 1.127 + do_check_neq(parcelTypes.indexOf(REQUEST_EXIT_EMERGENCY_CALLBACK_MODE), -1); 1.128 + 1.129 + run_next_test(); 1.130 +}); 1.131 + 1.132 +add_test(function test_request_exit_emergencyCbMode_when_dial() { 1.133 + let workerHelper = _getWorker(); 1.134 + let worker = workerHelper.worker; 1.135 + let context = worker.ContextPool._contexts[0]; 1.136 + 1.137 + context.RIL[UNSOLICITED_ENTER_EMERGENCY_CALLBACK_MODE](); 1.138 + do_check_eq(context.RIL._isInEmergencyCbMode, true); 1.139 + do_check_eq(context.RIL._exitEmergencyCbModeTimeoutID, TIMER_ID); 1.140 + 1.141 + let parcelTypes = []; 1.142 + context.Buf.newParcel = function(type, options) { 1.143 + parcelTypes.push(type); 1.144 + }; 1.145 + 1.146 + // Dial non-emergency call. 1.147 + context.RIL.dial({number: "0912345678", 1.148 + isDialEmergency: false}); 1.149 + 1.150 + // Should clear timeout event. 1.151 + do_check_eq(context.RIL._exitEmergencyCbModeTimeoutID, null); 1.152 + 1.153 + // Check indeed sent out REQUEST_EXIT_EMERGENCY_CALLBACK_MODE. 1.154 + do_check_neq(parcelTypes.indexOf(REQUEST_EXIT_EMERGENCY_CALLBACK_MODE), -1); 1.155 + 1.156 + run_next_test(); 1.157 +}); 1.158 + 1.159 +add_test(function test_request_exit_emergencyCbMode_explicitly() { 1.160 + let workerHelper = _getWorker(); 1.161 + let worker = workerHelper.worker; 1.162 + let context = worker.ContextPool._contexts[0]; 1.163 + 1.164 + context.RIL[UNSOLICITED_ENTER_EMERGENCY_CALLBACK_MODE](); 1.165 + do_check_eq(context.RIL._isInEmergencyCbMode, true); 1.166 + do_check_eq(context.RIL._exitEmergencyCbModeTimeoutID, TIMER_ID); 1.167 + 1.168 + let parcelTypes = []; 1.169 + context.Buf.newParcel = function(type, options) { 1.170 + parcelTypes.push(type); 1.171 + }; 1.172 + 1.173 + context.RIL.handleChromeMessage({rilMessageType: "exitEmergencyCbMode"}); 1.174 + context.RIL[REQUEST_EXIT_EMERGENCY_CALLBACK_MODE](1, { 1.175 + rilMessageType: "exitEmergencyCbMode", 1.176 + rilRequestError: ERROR_SUCCESS 1.177 + }); 1.178 + let postedMessage = workerHelper.postedMessage; 1.179 + 1.180 + // Should clear timeout event. 1.181 + do_check_eq(context.RIL._exitEmergencyCbModeTimeoutID, null); 1.182 + 1.183 + // Check indeed sent out REQUEST_EXIT_EMERGENCY_CALLBACK_MODE. 1.184 + do_check_neq(parcelTypes.indexOf(REQUEST_EXIT_EMERGENCY_CALLBACK_MODE), -1); 1.185 + 1.186 + // Send back the response. 1.187 + do_check_eq(postedMessage.rilMessageType, "exitEmergencyCbMode"); 1.188 + 1.189 + run_next_test(); 1.190 +}); 1.191 +