Thu, 22 Jan 2015 13:21:57 +0100
Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6
1 /* Any copyright is dedicated to the Public Domain.
2 http://creativecommons.org/publicdomain/zero/1.0/ */
4 subscriptLoader.loadSubScript("resource://gre/modules/ril_consts.js", this);
6 function run_test() {
7 run_next_test();
8 }
10 function _getWorker() {
11 let _postedMessage;
12 let _worker = newWorker({
13 postRILMessage: function(data) {
14 },
15 postMessage: function(message) {
16 _postedMessage = message;
17 }
18 });
19 return {
20 get postedMessage() {
21 return _postedMessage;
22 },
23 get worker() {
24 return _worker;
25 }
26 };
27 }
29 var timeoutCallback = null;
30 var timeoutDelayMs = 0;
31 const TIMER_ID = 1234;
32 const TIMEOUT_VALUE = 300000; // 5 mins.
34 // No window in xpcshell-test. Create our own timer mechanism.
36 function setTimeout(callback, timeoutMs) {
37 timeoutCallback = callback;
38 timeoutDelayMs = timeoutMs;
39 do_check_eq(timeoutMs, TIMEOUT_VALUE);
40 return TIMER_ID;
41 }
43 function clearTimeout(timeoutId) {
44 do_check_eq(timeoutId, TIMER_ID);
45 timeoutCallback = null;
46 }
48 function fireTimeout() {
49 do_check_neq(timeoutCallback, null);
50 if (timeoutCallback) {
51 timeoutCallback();
52 timeoutCallback = null;
53 }
54 }
56 add_test(function test_enter_emergencyCbMode() {
57 let workerHelper = _getWorker();
58 let worker = workerHelper.worker;
59 let context = worker.ContextPool._contexts[0];
61 // Do it twice. Should always send the event.
62 for (let i = 0; i < 2; ++i) {
63 context.RIL[UNSOLICITED_ENTER_EMERGENCY_CALLBACK_MODE]();
64 let postedMessage = workerHelper.postedMessage;
66 // Should store the mode.
67 do_check_eq(context.RIL._isInEmergencyCbMode, true);
69 // Should notify change.
70 do_check_eq(postedMessage.rilMessageType, "emergencyCbModeChange");
71 do_check_eq(postedMessage.active, true);
72 do_check_eq(postedMessage.timeoutMs, TIMEOUT_VALUE);
74 // Should start timer.
75 do_check_eq(context.RIL._exitEmergencyCbModeTimeoutID, TIMER_ID);
76 }
78 run_next_test();
79 });
81 add_test(function test_exit_emergencyCbMode() {
82 let workerHelper = _getWorker();
83 let worker = workerHelper.worker;
84 let context = worker.ContextPool._contexts[0];
86 context.RIL[UNSOLICITED_ENTER_EMERGENCY_CALLBACK_MODE]();
87 context.RIL[UNSOLICITED_EXIT_EMERGENCY_CALLBACK_MODE]();
88 let postedMessage = workerHelper.postedMessage;
90 // Should store the mode.
91 do_check_eq(context.RIL._isInEmergencyCbMode, false);
93 // Should notify change.
94 do_check_eq(postedMessage.rilMessageType, "emergencyCbModeChange");
95 do_check_eq(postedMessage.active, false);
97 // Should clear timer.
98 do_check_eq(context.RIL._exitEmergencyCbModeTimeoutID, null);
100 run_next_test();
101 });
103 add_test(function test_request_exit_emergencyCbMode_when_timeout() {
104 let workerHelper = _getWorker();
105 let worker = workerHelper.worker;
106 let context = worker.ContextPool._contexts[0];
108 context.RIL[UNSOLICITED_ENTER_EMERGENCY_CALLBACK_MODE]();
109 do_check_eq(context.RIL._isInEmergencyCbMode, true);
110 do_check_eq(context.RIL._exitEmergencyCbModeTimeoutID, TIMER_ID);
112 let parcelTypes = [];
113 context.Buf.newParcel = function(type, options) {
114 parcelTypes.push(type);
115 };
117 // Timeout.
118 fireTimeout();
120 // Should clear timeout event.
121 do_check_eq(context.RIL._exitEmergencyCbModeTimeoutID, null);
123 // Check indeed sent out REQUEST_EXIT_EMERGENCY_CALLBACK_MODE.
124 do_check_neq(parcelTypes.indexOf(REQUEST_EXIT_EMERGENCY_CALLBACK_MODE), -1);
126 run_next_test();
127 });
129 add_test(function test_request_exit_emergencyCbMode_when_dial() {
130 let workerHelper = _getWorker();
131 let worker = workerHelper.worker;
132 let context = worker.ContextPool._contexts[0];
134 context.RIL[UNSOLICITED_ENTER_EMERGENCY_CALLBACK_MODE]();
135 do_check_eq(context.RIL._isInEmergencyCbMode, true);
136 do_check_eq(context.RIL._exitEmergencyCbModeTimeoutID, TIMER_ID);
138 let parcelTypes = [];
139 context.Buf.newParcel = function(type, options) {
140 parcelTypes.push(type);
141 };
143 // Dial non-emergency call.
144 context.RIL.dial({number: "0912345678",
145 isDialEmergency: false});
147 // Should clear timeout event.
148 do_check_eq(context.RIL._exitEmergencyCbModeTimeoutID, null);
150 // Check indeed sent out REQUEST_EXIT_EMERGENCY_CALLBACK_MODE.
151 do_check_neq(parcelTypes.indexOf(REQUEST_EXIT_EMERGENCY_CALLBACK_MODE), -1);
153 run_next_test();
154 });
156 add_test(function test_request_exit_emergencyCbMode_explicitly() {
157 let workerHelper = _getWorker();
158 let worker = workerHelper.worker;
159 let context = worker.ContextPool._contexts[0];
161 context.RIL[UNSOLICITED_ENTER_EMERGENCY_CALLBACK_MODE]();
162 do_check_eq(context.RIL._isInEmergencyCbMode, true);
163 do_check_eq(context.RIL._exitEmergencyCbModeTimeoutID, TIMER_ID);
165 let parcelTypes = [];
166 context.Buf.newParcel = function(type, options) {
167 parcelTypes.push(type);
168 };
170 context.RIL.handleChromeMessage({rilMessageType: "exitEmergencyCbMode"});
171 context.RIL[REQUEST_EXIT_EMERGENCY_CALLBACK_MODE](1, {
172 rilMessageType: "exitEmergencyCbMode",
173 rilRequestError: ERROR_SUCCESS
174 });
175 let postedMessage = workerHelper.postedMessage;
177 // Should clear timeout event.
178 do_check_eq(context.RIL._exitEmergencyCbModeTimeoutID, null);
180 // Check indeed sent out REQUEST_EXIT_EMERGENCY_CALLBACK_MODE.
181 do_check_neq(parcelTypes.indexOf(REQUEST_EXIT_EMERGENCY_CALLBACK_MODE), -1);
183 // Send back the response.
184 do_check_eq(postedMessage.rilMessageType, "exitEmergencyCbMode");
186 run_next_test();
187 });