gecko/dom/system/gonk/tests/test_ril_worker_ecm.js

189 lines
5.3 KiB
JavaScript

/* 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();
}
function _getWorker() {
let _postedMessage;
let _worker = newWorker({
postRILMessage: function(data) {
},
postMessage: function(message) {
_postedMessage = message;
}
});
return {
get postedMessage() {
return _postedMessage;
},
get worker() {
return _worker;
}
};
}
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;
do_check_eq(timeoutMs, TIMEOUT_VALUE);
return TIMER_ID;
}
function clearTimeout(timeoutId) {
do_check_eq(timeoutId, TIMER_ID);
timeoutCallback = null;
}
function fireTimeout() {
do_check_neq(timeoutCallback, null);
if (timeoutCallback) {
timeoutCallback();
timeoutCallback = null;
}
}
add_test(function test_enter_emergencyCbMode() {
let workerHelper = _getWorker();
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.
do_check_eq(context.RIL._isInEmergencyCbMode, true);
// Should notify change.
do_check_eq(postedMessage.rilMessageType, "emergencyCbModeChange");
do_check_eq(postedMessage.active, true);
do_check_eq(postedMessage.timeoutMs, TIMEOUT_VALUE);
// Should start timer.
do_check_eq(context.RIL._exitEmergencyCbModeTimeoutID, TIMER_ID);
}
run_next_test();
});
add_test(function test_exit_emergencyCbMode() {
let workerHelper = _getWorker();
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.
do_check_eq(context.RIL._isInEmergencyCbMode, false);
// Should notify change.
do_check_eq(postedMessage.rilMessageType, "emergencyCbModeChange");
do_check_eq(postedMessage.active, false);
// Should clear timer.
do_check_eq(context.RIL._exitEmergencyCbModeTimeoutID, null);
run_next_test();
});
add_test(function test_request_exit_emergencyCbMode_when_timeout() {
let workerHelper = _getWorker();
let worker = workerHelper.worker;
let context = worker.ContextPool._contexts[0];
context.RIL[UNSOLICITED_ENTER_EMERGENCY_CALLBACK_MODE]();
do_check_eq(context.RIL._isInEmergencyCbMode, true);
do_check_eq(context.RIL._exitEmergencyCbModeTimeoutID, TIMER_ID);
let parcelTypes = [];
context.Buf.newParcel = function(type, options) {
parcelTypes.push(type);
};
// Timeout.
fireTimeout();
// Should clear timeout event.
do_check_eq(context.RIL._exitEmergencyCbModeTimeoutID, null);
// Check indeed sent out REQUEST_EXIT_EMERGENCY_CALLBACK_MODE.
do_check_neq(parcelTypes.indexOf(REQUEST_EXIT_EMERGENCY_CALLBACK_MODE), -1);
run_next_test();
});
add_test(function test_request_exit_emergencyCbMode_when_dial() {
let workerHelper = _getWorker();
let worker = workerHelper.worker;
let context = worker.ContextPool._contexts[0];
context.RIL[UNSOLICITED_ENTER_EMERGENCY_CALLBACK_MODE]();
do_check_eq(context.RIL._isInEmergencyCbMode, true);
do_check_eq(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",
isDialEmergency: false});
// Should clear timeout event.
do_check_eq(context.RIL._exitEmergencyCbModeTimeoutID, null);
// Check indeed sent out REQUEST_EXIT_EMERGENCY_CALLBACK_MODE.
do_check_neq(parcelTypes.indexOf(REQUEST_EXIT_EMERGENCY_CALLBACK_MODE), -1);
run_next_test();
});
add_test(function test_request_exit_emergencyCbMode_explicitly() {
let workerHelper = _getWorker();
let worker = workerHelper.worker;
let context = worker.ContextPool._contexts[0];
context.RIL[UNSOLICITED_ENTER_EMERGENCY_CALLBACK_MODE]();
do_check_eq(context.RIL._isInEmergencyCbMode, true);
do_check_eq(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",
rilRequestError: ERROR_SUCCESS
});
let postedMessage = workerHelper.postedMessage;
// Should clear timeout event.
do_check_eq(context.RIL._exitEmergencyCbModeTimeoutID, null);
// Check indeed sent out REQUEST_EXIT_EMERGENCY_CALLBACK_MODE.
do_check_neq(parcelTypes.indexOf(REQUEST_EXIT_EMERGENCY_CALLBACK_MODE), -1);
// Send back the response.
do_check_eq(postedMessage.rilMessageType, "exitEmergencyCbMode");
run_next_test();
});