|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
3 |
|
4 subscriptLoader.loadSubScript("resource://gre/modules/ril_consts.js", this); |
|
5 |
|
6 function run_test() { |
|
7 run_next_test(); |
|
8 } |
|
9 |
|
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 } |
|
28 |
|
29 var timeoutCallback = null; |
|
30 var timeoutDelayMs = 0; |
|
31 const TIMER_ID = 1234; |
|
32 const TIMEOUT_VALUE = 300000; // 5 mins. |
|
33 |
|
34 // No window in xpcshell-test. Create our own timer mechanism. |
|
35 |
|
36 function setTimeout(callback, timeoutMs) { |
|
37 timeoutCallback = callback; |
|
38 timeoutDelayMs = timeoutMs; |
|
39 do_check_eq(timeoutMs, TIMEOUT_VALUE); |
|
40 return TIMER_ID; |
|
41 } |
|
42 |
|
43 function clearTimeout(timeoutId) { |
|
44 do_check_eq(timeoutId, TIMER_ID); |
|
45 timeoutCallback = null; |
|
46 } |
|
47 |
|
48 function fireTimeout() { |
|
49 do_check_neq(timeoutCallback, null); |
|
50 if (timeoutCallback) { |
|
51 timeoutCallback(); |
|
52 timeoutCallback = null; |
|
53 } |
|
54 } |
|
55 |
|
56 add_test(function test_enter_emergencyCbMode() { |
|
57 let workerHelper = _getWorker(); |
|
58 let worker = workerHelper.worker; |
|
59 let context = worker.ContextPool._contexts[0]; |
|
60 |
|
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; |
|
65 |
|
66 // Should store the mode. |
|
67 do_check_eq(context.RIL._isInEmergencyCbMode, true); |
|
68 |
|
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); |
|
73 |
|
74 // Should start timer. |
|
75 do_check_eq(context.RIL._exitEmergencyCbModeTimeoutID, TIMER_ID); |
|
76 } |
|
77 |
|
78 run_next_test(); |
|
79 }); |
|
80 |
|
81 add_test(function test_exit_emergencyCbMode() { |
|
82 let workerHelper = _getWorker(); |
|
83 let worker = workerHelper.worker; |
|
84 let context = worker.ContextPool._contexts[0]; |
|
85 |
|
86 context.RIL[UNSOLICITED_ENTER_EMERGENCY_CALLBACK_MODE](); |
|
87 context.RIL[UNSOLICITED_EXIT_EMERGENCY_CALLBACK_MODE](); |
|
88 let postedMessage = workerHelper.postedMessage; |
|
89 |
|
90 // Should store the mode. |
|
91 do_check_eq(context.RIL._isInEmergencyCbMode, false); |
|
92 |
|
93 // Should notify change. |
|
94 do_check_eq(postedMessage.rilMessageType, "emergencyCbModeChange"); |
|
95 do_check_eq(postedMessage.active, false); |
|
96 |
|
97 // Should clear timer. |
|
98 do_check_eq(context.RIL._exitEmergencyCbModeTimeoutID, null); |
|
99 |
|
100 run_next_test(); |
|
101 }); |
|
102 |
|
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]; |
|
107 |
|
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); |
|
111 |
|
112 let parcelTypes = []; |
|
113 context.Buf.newParcel = function(type, options) { |
|
114 parcelTypes.push(type); |
|
115 }; |
|
116 |
|
117 // Timeout. |
|
118 fireTimeout(); |
|
119 |
|
120 // Should clear timeout event. |
|
121 do_check_eq(context.RIL._exitEmergencyCbModeTimeoutID, null); |
|
122 |
|
123 // Check indeed sent out REQUEST_EXIT_EMERGENCY_CALLBACK_MODE. |
|
124 do_check_neq(parcelTypes.indexOf(REQUEST_EXIT_EMERGENCY_CALLBACK_MODE), -1); |
|
125 |
|
126 run_next_test(); |
|
127 }); |
|
128 |
|
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]; |
|
133 |
|
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); |
|
137 |
|
138 let parcelTypes = []; |
|
139 context.Buf.newParcel = function(type, options) { |
|
140 parcelTypes.push(type); |
|
141 }; |
|
142 |
|
143 // Dial non-emergency call. |
|
144 context.RIL.dial({number: "0912345678", |
|
145 isDialEmergency: false}); |
|
146 |
|
147 // Should clear timeout event. |
|
148 do_check_eq(context.RIL._exitEmergencyCbModeTimeoutID, null); |
|
149 |
|
150 // Check indeed sent out REQUEST_EXIT_EMERGENCY_CALLBACK_MODE. |
|
151 do_check_neq(parcelTypes.indexOf(REQUEST_EXIT_EMERGENCY_CALLBACK_MODE), -1); |
|
152 |
|
153 run_next_test(); |
|
154 }); |
|
155 |
|
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]; |
|
160 |
|
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); |
|
164 |
|
165 let parcelTypes = []; |
|
166 context.Buf.newParcel = function(type, options) { |
|
167 parcelTypes.push(type); |
|
168 }; |
|
169 |
|
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; |
|
176 |
|
177 // Should clear timeout event. |
|
178 do_check_eq(context.RIL._exitEmergencyCbModeTimeoutID, null); |
|
179 |
|
180 // Check indeed sent out REQUEST_EXIT_EMERGENCY_CALLBACK_MODE. |
|
181 do_check_neq(parcelTypes.indexOf(REQUEST_EXIT_EMERGENCY_CALLBACK_MODE), -1); |
|
182 |
|
183 // Send back the response. |
|
184 do_check_eq(postedMessage.rilMessageType, "exitEmergencyCbMode"); |
|
185 |
|
186 run_next_test(); |
|
187 }); |
|
188 |