summaryrefslogtreecommitdiffstats
path: root/dom/system/gonk/tests/test_ril_worker_ecm.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/system/gonk/tests/test_ril_worker_ecm.js')
-rw-r--r--dom/system/gonk/tests/test_ril_worker_ecm.js168
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();
+});