diff options
Diffstat (limited to 'dom/system/gonk/tests/test_ril_worker_ecm.js')
-rw-r--r-- | dom/system/gonk/tests/test_ril_worker_ecm.js | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/dom/system/gonk/tests/test_ril_worker_ecm.js b/dom/system/gonk/tests/test_ril_worker_ecm.js new file mode 100644 index 000000000..d10cba9ec --- /dev/null +++ b/dom/system/gonk/tests/test_ril_worker_ecm.js @@ -0,0 +1,168 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +subscriptLoader.loadSubScript("resource://gre/modules/ril_consts.js", this); + +function run_test() { + run_next_test(); +} + +var timeoutCallback = null; +var timeoutDelayMs = 0; +const TIMER_ID = 1234; +const TIMEOUT_VALUE = 300000; // 5 mins. + +// No window in xpcshell-test. Create our own timer mechanism. + +function setTimeout(callback, timeoutMs) { + timeoutCallback = callback; + timeoutDelayMs = timeoutMs; + equal(timeoutMs, TIMEOUT_VALUE); + return TIMER_ID; +} + +function clearTimeout(timeoutId) { + equal(timeoutId, TIMER_ID); + timeoutCallback = null; +} + +function fireTimeout() { + notEqual(timeoutCallback, null); + if (timeoutCallback) { + timeoutCallback(); + timeoutCallback = null; + } +} + +add_test(function test_enter_emergencyCbMode() { + let workerHelper = newInterceptWorker(); + let worker = workerHelper.worker; + let context = worker.ContextPool._contexts[0]; + + // Do it twice. Should always send the event. + for (let i = 0; i < 2; ++i) { + context.RIL[UNSOLICITED_ENTER_EMERGENCY_CALLBACK_MODE](); + let postedMessage = workerHelper.postedMessage; + + // Should store the mode. + equal(context.RIL._isInEmergencyCbMode, true); + + // Should notify change. + equal(postedMessage.rilMessageType, "emergencyCbModeChange"); + equal(postedMessage.active, true); + equal(postedMessage.timeoutMs, TIMEOUT_VALUE); + + // Should start timer. + equal(context.RIL._exitEmergencyCbModeTimeoutID, TIMER_ID); + } + + run_next_test(); +}); + +add_test(function test_exit_emergencyCbMode() { + let workerHelper = newInterceptWorker(); + let worker = workerHelper.worker; + let context = worker.ContextPool._contexts[0]; + + context.RIL[UNSOLICITED_ENTER_EMERGENCY_CALLBACK_MODE](); + context.RIL[UNSOLICITED_EXIT_EMERGENCY_CALLBACK_MODE](); + let postedMessage = workerHelper.postedMessage; + + // Should store the mode. + equal(context.RIL._isInEmergencyCbMode, false); + + // Should notify change. + equal(postedMessage.rilMessageType, "emergencyCbModeChange"); + equal(postedMessage.active, false); + + // Should clear timer. + equal(context.RIL._exitEmergencyCbModeTimeoutID, null); + + run_next_test(); +}); + +add_test(function test_request_exit_emergencyCbMode_when_timeout() { + let workerHelper = newInterceptWorker(); + let worker = workerHelper.worker; + let context = worker.ContextPool._contexts[0]; + + context.RIL[UNSOLICITED_ENTER_EMERGENCY_CALLBACK_MODE](); + equal(context.RIL._isInEmergencyCbMode, true); + equal(context.RIL._exitEmergencyCbModeTimeoutID, TIMER_ID); + + let parcelTypes = []; + context.Buf.newParcel = function(type, options) { + parcelTypes.push(type); + }; + + // Timeout. + fireTimeout(); + + // Should clear timeout event. + equal(context.RIL._exitEmergencyCbModeTimeoutID, null); + + // Check indeed sent out REQUEST_EXIT_EMERGENCY_CALLBACK_MODE. + notEqual(parcelTypes.indexOf(REQUEST_EXIT_EMERGENCY_CALLBACK_MODE), -1); + + run_next_test(); +}); + +add_test(function test_request_exit_emergencyCbMode_when_dial() { + let workerHelper = newInterceptWorker(); + let worker = workerHelper.worker; + let context = worker.ContextPool._contexts[0]; + + context.RIL[UNSOLICITED_ENTER_EMERGENCY_CALLBACK_MODE](); + equal(context.RIL._isInEmergencyCbMode, true); + equal(context.RIL._exitEmergencyCbModeTimeoutID, TIMER_ID); + + let parcelTypes = []; + context.Buf.newParcel = function(type, options) { + parcelTypes.push(type); + }; + + // Dial non-emergency call. + context.RIL.dial({number: "0912345678", + isEmergency: false, + isDialEmergency: false}); + + // Should clear timeout event. + equal(context.RIL._exitEmergencyCbModeTimeoutID, null); + + // Check indeed sent out REQUEST_EXIT_EMERGENCY_CALLBACK_MODE. + notEqual(parcelTypes.indexOf(REQUEST_EXIT_EMERGENCY_CALLBACK_MODE), -1); + + run_next_test(); +}); + +add_test(function test_request_exit_emergencyCbMode_explicitly() { + let workerHelper = newInterceptWorker(); + let worker = workerHelper.worker; + let context = worker.ContextPool._contexts[0]; + + context.RIL[UNSOLICITED_ENTER_EMERGENCY_CALLBACK_MODE](); + equal(context.RIL._isInEmergencyCbMode, true); + equal(context.RIL._exitEmergencyCbModeTimeoutID, TIMER_ID); + + let parcelTypes = []; + context.Buf.newParcel = function(type, options) { + parcelTypes.push(type); + }; + + context.RIL.handleChromeMessage({rilMessageType: "exitEmergencyCbMode"}); + context.RIL[REQUEST_EXIT_EMERGENCY_CALLBACK_MODE](1, { + rilMessageType: "exitEmergencyCbMode" + }); + let postedMessage = workerHelper.postedMessage; + + // Should clear timeout event. + equal(context.RIL._exitEmergencyCbModeTimeoutID, null); + + // Check indeed sent out REQUEST_EXIT_EMERGENCY_CALLBACK_MODE. + notEqual(parcelTypes.indexOf(REQUEST_EXIT_EMERGENCY_CALLBACK_MODE), -1); + + // Send back the response. + equal(postedMessage.rilMessageType, "exitEmergencyCbMode"); + + run_next_test(); +}); |