1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/system/gonk/tests/test_ril_worker_mmi.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,1001 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +subscriptLoader.loadSubScript("resource://gre/modules/ril_consts.js", this); 1.8 + 1.9 +function run_test() { 1.10 + run_next_test(); 1.11 +} 1.12 + 1.13 +function parseMMI(mmi) { 1.14 + let worker = newWorker({ 1.15 + postRILMessage: function(data) { 1.16 + // Do nothing 1.17 + }, 1.18 + postMessage: function(message) { 1.19 + // Do nothing 1.20 + } 1.21 + }); 1.22 + let context = worker.ContextPool._contexts[0]; 1.23 + return context.RIL._parseMMI(mmi); 1.24 +} 1.25 + 1.26 +function getWorker() { 1.27 + let _postedMessage; 1.28 + let _worker = newWorker({ 1.29 + postRILMessage: function(data) { 1.30 + }, 1.31 + postMessage: function(message) { 1.32 + _postedMessage = message; 1.33 + }, 1.34 + }); 1.35 + 1.36 + return { 1.37 + get postedMessage() { 1.38 + return _postedMessage; 1.39 + }, 1.40 + get worker() { 1.41 + return _worker; 1.42 + } 1.43 + }; 1.44 +} 1.45 + 1.46 +function testSendMMI(mmi, error) { 1.47 + let workerhelper = getWorker(); 1.48 + let worker = workerhelper.worker; 1.49 + let context = worker.ContextPool._contexts[0]; 1.50 + 1.51 + do_print("worker.postMessage " + worker.postMessage); 1.52 + 1.53 + context.RIL.radioState = GECKO_RADIOSTATE_READY; 1.54 + context.RIL.sendMMI({rilMessageType: "sendMMI", mmi: mmi}); 1.55 + 1.56 + let postedMessage = workerhelper.postedMessage; 1.57 + 1.58 + do_check_eq(postedMessage.rilMessageType, "sendMMI"); 1.59 + do_check_eq(postedMessage.errorMsg, error); 1.60 +} 1.61 + 1.62 +add_test(function test_parseMMI_empty() { 1.63 + let mmi = parseMMI(""); 1.64 + 1.65 + do_check_null(mmi); 1.66 + 1.67 + run_next_test(); 1.68 +}); 1.69 + 1.70 +add_test(function test_parseMMI_undefined() { 1.71 + let mmi = parseMMI(); 1.72 + 1.73 + do_check_null(mmi); 1.74 + 1.75 + run_next_test(); 1.76 +}); 1.77 + 1.78 +add_test(function test_parseMMI_one_digit_short_code() { 1.79 + let mmi = parseMMI("1"); 1.80 + 1.81 + do_check_eq(mmi.fullMMI, "1"); 1.82 + do_check_eq(mmi.procedure, undefined); 1.83 + do_check_eq(mmi.serviceCode, undefined); 1.84 + do_check_eq(mmi.sia, undefined); 1.85 + do_check_eq(mmi.sib, undefined); 1.86 + do_check_eq(mmi.sic, undefined); 1.87 + do_check_eq(mmi.pwd, undefined); 1.88 + do_check_eq(mmi.dialNumber, undefined); 1.89 + 1.90 + run_next_test(); 1.91 +}); 1.92 + 1.93 +add_test(function test_parseMMI_invalid_short_code() { 1.94 + let mmi = parseMMI("11"); 1.95 + 1.96 + do_check_null(mmi); 1.97 + 1.98 + run_next_test(); 1.99 +}); 1.100 + 1.101 +add_test(function test_parseMMI_short_code() { 1.102 + let mmi = parseMMI("21"); 1.103 + 1.104 + do_check_eq(mmi.fullMMI, "21"); 1.105 + do_check_eq(mmi.procedure, undefined); 1.106 + do_check_eq(mmi.serviceCode, undefined); 1.107 + do_check_eq(mmi.sia, undefined); 1.108 + do_check_eq(mmi.sib, undefined); 1.109 + do_check_eq(mmi.sic, undefined); 1.110 + do_check_eq(mmi.pwd, undefined); 1.111 + do_check_eq(mmi.dialNumber, undefined); 1.112 + 1.113 + run_next_test(); 1.114 +}); 1.115 + 1.116 +add_test(function test_parseMMI_dial_string() { 1.117 + let mmi = parseMMI("12345"); 1.118 + 1.119 + do_check_null(mmi); 1.120 + 1.121 + run_next_test(); 1.122 +}); 1.123 + 1.124 +add_test(function test_parseMMI_USSD_without_asterisk_prefix() { 1.125 + let mmi = parseMMI("123#"); 1.126 + 1.127 + do_check_eq(mmi.fullMMI, "123#"); 1.128 + do_check_eq(mmi.procedure, undefined); 1.129 + do_check_eq(mmi.serviceCode, undefined); 1.130 + do_check_eq(mmi.sia, undefined); 1.131 + do_check_eq(mmi.sib, undefined); 1.132 + do_check_eq(mmi.sic, undefined); 1.133 + do_check_eq(mmi.pwd, undefined); 1.134 + do_check_eq(mmi.dialNumber, undefined); 1.135 + 1.136 + run_next_test(); 1.137 +}); 1.138 + 1.139 +add_test(function test_parseMMI_USSD() { 1.140 + let mmi = parseMMI("*123#"); 1.141 + 1.142 + do_check_eq(mmi.fullMMI, "*123#"); 1.143 + do_check_eq(mmi.procedure, MMI_PROCEDURE_ACTIVATION); 1.144 + do_check_eq(mmi.serviceCode, "123"); 1.145 + do_check_eq(mmi.sia, undefined); 1.146 + do_check_eq(mmi.sib, undefined); 1.147 + do_check_eq(mmi.sic, undefined); 1.148 + do_check_eq(mmi.pwd, undefined); 1.149 + do_check_eq(mmi.dialNumber, ""); 1.150 + 1.151 + run_next_test(); 1.152 +}); 1.153 + 1.154 +add_test(function test_parseMMI_sia() { 1.155 + let mmi = parseMMI("*123*1#"); 1.156 + 1.157 + do_check_eq(mmi.fullMMI, "*123*1#"); 1.158 + do_check_eq(mmi.procedure, MMI_PROCEDURE_ACTIVATION); 1.159 + do_check_eq(mmi.serviceCode, "123"); 1.160 + do_check_eq(mmi.sia, "1"); 1.161 + do_check_eq(mmi.sib, undefined); 1.162 + do_check_eq(mmi.sic, undefined); 1.163 + do_check_eq(mmi.pwd, undefined); 1.164 + do_check_eq(mmi.dialNumber, ""); 1.165 + 1.166 + run_next_test(); 1.167 +}); 1.168 + 1.169 +add_test(function test_parseMMI_sib() { 1.170 + let mmi = parseMMI("*123**1#"); 1.171 + 1.172 + do_check_eq(mmi.fullMMI, "*123**1#"); 1.173 + do_check_eq(mmi.procedure, MMI_PROCEDURE_ACTIVATION); 1.174 + do_check_eq(mmi.serviceCode, "123"); 1.175 + do_check_eq(mmi.sia, ""); 1.176 + do_check_eq(mmi.sib, "1"); 1.177 + do_check_eq(mmi.sic, undefined); 1.178 + do_check_eq(mmi.pwd, undefined); 1.179 + do_check_eq(mmi.dialNumber, ""); 1.180 + 1.181 + run_next_test(); 1.182 +}); 1.183 + 1.184 +add_test(function test_parseMMI_sic() { 1.185 + let mmi = parseMMI("*123***1#"); 1.186 + 1.187 + do_check_eq(mmi.fullMMI, "*123***1#"); 1.188 + do_check_eq(mmi.procedure, MMI_PROCEDURE_ACTIVATION); 1.189 + do_check_eq(mmi.serviceCode, "123"); 1.190 + do_check_eq(mmi.sia, ""); 1.191 + do_check_eq(mmi.sib, ""); 1.192 + do_check_eq(mmi.sic, "1"); 1.193 + do_check_eq(mmi.pwd, undefined); 1.194 + do_check_eq(mmi.dialNumber, ""); 1.195 + 1.196 + run_next_test(); 1.197 +}); 1.198 + 1.199 +add_test(function test_parseMMI_sia_sib() { 1.200 + let mmi = parseMMI("*123*1*1#"); 1.201 + 1.202 + do_check_eq(mmi.fullMMI, "*123*1*1#"); 1.203 + do_check_eq(mmi.procedure, MMI_PROCEDURE_ACTIVATION); 1.204 + do_check_eq(mmi.serviceCode, "123"); 1.205 + do_check_eq(mmi.sia, "1"); 1.206 + do_check_eq(mmi.sib, "1"); 1.207 + do_check_eq(mmi.sic, undefined); 1.208 + do_check_eq(mmi.pwd, undefined); 1.209 + do_check_eq(mmi.dialNumber, ""); 1.210 + 1.211 + run_next_test(); 1.212 +}); 1.213 + 1.214 +add_test(function test_parseMMI_sia_sic() { 1.215 + let mmi = parseMMI("*123*1**1#"); 1.216 + 1.217 + do_check_eq(mmi.fullMMI, "*123*1**1#"); 1.218 + do_check_eq(mmi.procedure, MMI_PROCEDURE_ACTIVATION); 1.219 + do_check_eq(mmi.serviceCode, "123"); 1.220 + do_check_eq(mmi.sia, "1"); 1.221 + do_check_eq(mmi.sib, ""); 1.222 + do_check_eq(mmi.sic, "1"); 1.223 + do_check_eq(mmi.pwd, undefined); 1.224 + do_check_eq(mmi.dialNumber, ""); 1.225 + 1.226 + run_next_test(); 1.227 +}); 1.228 + 1.229 +add_test(function test_parseMMI_sib_sic() { 1.230 + let mmi = parseMMI("*123**1*1#"); 1.231 + 1.232 + do_check_eq(mmi.fullMMI, "*123**1*1#"); 1.233 + do_check_eq(mmi.procedure, MMI_PROCEDURE_ACTIVATION); 1.234 + do_check_eq(mmi.serviceCode, "123"); 1.235 + do_check_eq(mmi.sia, ""); 1.236 + do_check_eq(mmi.sib, "1"); 1.237 + do_check_eq(mmi.sic, "1"); 1.238 + do_check_eq(mmi.pwd, undefined); 1.239 + do_check_eq(mmi.dialNumber, ""); 1.240 + 1.241 + run_next_test(); 1.242 +}); 1.243 + 1.244 +add_test(function test_parseMMI_pwd() { 1.245 + let mmi = parseMMI("*123****1#"); 1.246 + 1.247 + do_check_eq(mmi.fullMMI, "*123****1#"); 1.248 + do_check_eq(mmi.procedure, MMI_PROCEDURE_ACTIVATION); 1.249 + do_check_eq(mmi.serviceCode, "123"); 1.250 + do_check_eq(mmi.sia, ""); 1.251 + do_check_eq(mmi.sib, ""); 1.252 + do_check_eq(mmi.sic, ""); 1.253 + do_check_eq(mmi.pwd, "1"); 1.254 + do_check_eq(mmi.dialNumber, ""); 1.255 + 1.256 + run_next_test(); 1.257 +}); 1.258 + 1.259 +add_test(function test_parseMMI_dial_number() { 1.260 + let mmi = parseMMI("*123#345"); 1.261 + 1.262 + do_check_eq(mmi.fullMMI, "*123#"); 1.263 + do_check_eq(mmi.procedure, MMI_PROCEDURE_ACTIVATION); 1.264 + do_check_eq(mmi.serviceCode, "123"); 1.265 + do_check_eq(mmi.sia, undefined); 1.266 + do_check_eq(mmi.sib, undefined); 1.267 + do_check_eq(mmi.sic, undefined); 1.268 + do_check_eq(mmi.pwd, undefined); 1.269 + do_check_eq(mmi.dialNumber, "345"); 1.270 + 1.271 + run_next_test(); 1.272 +}); 1.273 + 1.274 + 1.275 +/** 1.276 + * MMI procedures tests 1.277 + */ 1.278 + 1.279 +add_test(function test_parseMMI_activation() { 1.280 + let mmi = parseMMI("*00*12*34*56#"); 1.281 + 1.282 + do_check_eq(mmi.fullMMI, "*00*12*34*56#"); 1.283 + do_check_eq(mmi.procedure, MMI_PROCEDURE_ACTIVATION); 1.284 + do_check_eq(mmi.serviceCode, "00"); 1.285 + do_check_eq(mmi.sia, "12"); 1.286 + do_check_eq(mmi.sib, "34"); 1.287 + do_check_eq(mmi.sic, "56"); 1.288 + do_check_eq(mmi.pwd, undefined); 1.289 + do_check_eq(mmi.dialNumber, ""); 1.290 + 1.291 + run_next_test(); 1.292 +}); 1.293 + 1.294 +add_test(function test_parseMMI_deactivation() { 1.295 + let mmi = parseMMI("#00*12*34*56#"); 1.296 + 1.297 + do_check_eq(mmi.fullMMI, "#00*12*34*56#"); 1.298 + do_check_eq(mmi.procedure, MMI_PROCEDURE_DEACTIVATION); 1.299 + do_check_eq(mmi.serviceCode, "00"); 1.300 + do_check_eq(mmi.sia, "12"); 1.301 + do_check_eq(mmi.sib, "34"); 1.302 + do_check_eq(mmi.sic, "56"); 1.303 + do_check_eq(mmi.pwd, undefined); 1.304 + do_check_eq(mmi.dialNumber, ""); 1.305 + 1.306 + run_next_test(); 1.307 +}); 1.308 + 1.309 +add_test(function test_parseMMI_interrogation() { 1.310 + let mmi = parseMMI("*#00*12*34*56#"); 1.311 + 1.312 + do_check_eq(mmi.fullMMI, "*#00*12*34*56#"); 1.313 + do_check_eq(mmi.procedure, MMI_PROCEDURE_INTERROGATION); 1.314 + do_check_eq(mmi.serviceCode, "00"); 1.315 + do_check_eq(mmi.sia, "12"); 1.316 + do_check_eq(mmi.sib, "34"); 1.317 + do_check_eq(mmi.sic, "56"); 1.318 + do_check_eq(mmi.pwd, undefined); 1.319 + do_check_eq(mmi.dialNumber, ""); 1.320 + 1.321 + run_next_test(); 1.322 +}); 1.323 + 1.324 +add_test(function test_parseMMI_registration() { 1.325 + let mmi = parseMMI("**00*12*34*56#"); 1.326 + 1.327 + do_check_eq(mmi.fullMMI, "**00*12*34*56#"); 1.328 + do_check_eq(mmi.procedure, MMI_PROCEDURE_REGISTRATION); 1.329 + do_check_eq(mmi.serviceCode, "00"); 1.330 + do_check_eq(mmi.sia, "12"); 1.331 + do_check_eq(mmi.sib, "34"); 1.332 + do_check_eq(mmi.sic, "56"); 1.333 + do_check_eq(mmi.pwd, undefined); 1.334 + do_check_eq(mmi.dialNumber, ""); 1.335 + 1.336 + run_next_test(); 1.337 +}); 1.338 + 1.339 +add_test(function test_parseMMI_erasure() { 1.340 + let mmi = parseMMI("##00*12*34*56#"); 1.341 + 1.342 + do_check_eq(mmi.fullMMI, "##00*12*34*56#"); 1.343 + do_check_eq(mmi.procedure, MMI_PROCEDURE_ERASURE); 1.344 + do_check_eq(mmi.serviceCode, "00"); 1.345 + do_check_eq(mmi.sia, "12"); 1.346 + do_check_eq(mmi.sib, "34"); 1.347 + do_check_eq(mmi.sic, "56"); 1.348 + do_check_eq(mmi.pwd, undefined); 1.349 + do_check_eq(mmi.dialNumber, ""); 1.350 + 1.351 + run_next_test(); 1.352 +}); 1.353 + 1.354 +/** 1.355 + * sendMMI tests. 1.356 + */ 1.357 + 1.358 +add_test(function test_sendMMI_empty() { 1.359 + testSendMMI("", MMI_ERROR_KS_ERROR); 1.360 + 1.361 + run_next_test(); 1.362 +}); 1.363 + 1.364 +add_test(function test_sendMMI_undefined() { 1.365 + testSendMMI({}, MMI_ERROR_KS_ERROR); 1.366 + 1.367 + run_next_test(); 1.368 +}); 1.369 + 1.370 +add_test(function test_sendMMI_invalid() { 1.371 + testSendMMI("11", MMI_ERROR_KS_ERROR); 1.372 + 1.373 + run_next_test(); 1.374 +}); 1.375 + 1.376 +add_test(function test_sendMMI_short_code() { 1.377 + let workerhelper = getWorker(); 1.378 + let worker = workerhelper.worker; 1.379 + let context = worker.ContextPool._contexts[0]; 1.380 + 1.381 + let ussdOptions; 1.382 + 1.383 + context.RIL.sendUSSD = function fakeSendUSSD(options){ 1.384 + ussdOptions = options; 1.385 + context.RIL[REQUEST_SEND_USSD](0, { 1.386 + rilRequestError: ERROR_SUCCESS 1.387 + }); 1.388 + 1.389 + }; 1.390 + 1.391 + context.RIL.radioState = GECKO_RADIOSTATE_READY; 1.392 + context.RIL.sendMMI({mmi: "**"}); 1.393 + 1.394 + let postedMessage = workerhelper.postedMessage; 1.395 + do_check_eq(ussdOptions.ussd, "**"); 1.396 + do_check_eq (postedMessage.errorMsg, GECKO_ERROR_SUCCESS); 1.397 + do_check_true(postedMessage.success); 1.398 + do_check_true(context.RIL._ussdSession); 1.399 + 1.400 + run_next_test(); 1.401 +}); 1.402 + 1.403 +add_test(function test_sendMMI_dial_string() { 1.404 + testSendMMI("123", MMI_ERROR_KS_ERROR); 1.405 + 1.406 + run_next_test(); 1.407 +}); 1.408 + 1.409 +function setCallForwardSuccess(mmi) { 1.410 + let workerhelper = getWorker(); 1.411 + let worker = workerhelper.worker; 1.412 + let context = worker.ContextPool._contexts[0]; 1.413 + 1.414 + context.RIL.setCallForward = function fakeSetCallForward(options) { 1.415 + context.RIL[REQUEST_SET_CALL_FORWARD](0, { 1.416 + rilRequestError: ERROR_SUCCESS 1.417 + }); 1.418 + }; 1.419 + 1.420 + context.RIL.radioState = GECKO_RADIOSTATE_READY; 1.421 + context.RIL.sendMMI({mmi: mmi}); 1.422 + 1.423 + let postedMessage = workerhelper.postedMessage; 1.424 + 1.425 + do_check_eq(postedMessage.errorMsg, GECKO_ERROR_SUCCESS); 1.426 + do_check_true(postedMessage.success); 1.427 +} 1.428 + 1.429 +add_test(function test_sendMMI_call_forwarding_activation() { 1.430 + setCallForwardSuccess("*21*12345*99*10#"); 1.431 + 1.432 + run_next_test(); 1.433 +}); 1.434 + 1.435 +add_test(function test_sendMMI_call_forwarding_deactivation() { 1.436 + setCallForwardSuccess("#21*12345*99*10#"); 1.437 + 1.438 + run_next_test(); 1.439 +}); 1.440 + 1.441 +add_test(function test_sendMMI_call_forwarding_interrogation() { 1.442 + let workerhelper = getWorker(); 1.443 + let worker = workerhelper.worker; 1.444 + let context = worker.ContextPool._contexts[0]; 1.445 + 1.446 + context.Buf.readInt32 = function fakeReadUint32() { 1.447 + return context.Buf.int32Array.pop(); 1.448 + }; 1.449 + 1.450 + context.Buf.readString = function fakeReadString() { 1.451 + return "+34666222333"; 1.452 + }; 1.453 + 1.454 + context.RIL.queryCallForwardStatus = function fakeQueryCallForward(options) { 1.455 + context.Buf.int32Array = [ 1.456 + 0, // rules.timeSeconds 1.457 + 145, // rules.toa 1.458 + 49, // rules.serviceClass 1.459 + Ci.nsIDOMMozMobileCFInfo.CALL_FORWARD_REASON_UNCONDITIONAL, // rules.reason 1.460 + 1, // rules.active 1.461 + 1 // rulesLength 1.462 + ]; 1.463 + context.RIL[REQUEST_QUERY_CALL_FORWARD_STATUS](1, { 1.464 + rilRequestError: ERROR_SUCCESS 1.465 + }); 1.466 + }; 1.467 + 1.468 + context.RIL.radioState = GECKO_RADIOSTATE_READY; 1.469 + context.RIL.sendMMI({mmi: "*#21#"}); 1.470 + 1.471 + let postedMessage = workerhelper.postedMessage; 1.472 + 1.473 + do_check_eq(postedMessage.errorMsg, GECKO_ERROR_SUCCESS); 1.474 + do_check_true(postedMessage.success); 1.475 + do_check_true(Array.isArray(postedMessage.rules)); 1.476 + do_check_eq(postedMessage.rules.length, 1); 1.477 + do_check_true(postedMessage.rules[0].active); 1.478 + do_check_eq(postedMessage.rules[0].reason, 1.479 + Ci.nsIDOMMozMobileCFInfo.CALL_FORWARD_REASON_UNCONDITIONAL); 1.480 + do_check_eq(postedMessage.rules[0].number, "+34666222333"); 1.481 + run_next_test(); 1.482 +}); 1.483 + 1.484 +add_test(function test_sendMMI_call_forwarding_interrogation_no_rules() { 1.485 + let workerhelper = getWorker(); 1.486 + let worker = workerhelper.worker; 1.487 + let context = worker.ContextPool._contexts[0]; 1.488 + 1.489 + context.Buf.readInt32 = function fakeReadUint32() { 1.490 + return 0; 1.491 + }; 1.492 + 1.493 + context.RIL.queryCallForwardStatus = function fakeQueryCallForward(options) { 1.494 + context.RIL[REQUEST_QUERY_CALL_FORWARD_STATUS](1, { 1.495 + rilRequestError: ERROR_SUCCESS 1.496 + }); 1.497 + }; 1.498 + 1.499 + context.RIL.radioState = GECKO_RADIOSTATE_READY; 1.500 + context.RIL.sendMMI({mmi: "*#21#"}); 1.501 + 1.502 + let postedMessage = workerhelper.postedMessage; 1.503 + 1.504 + do_check_eq(postedMessage.errorMsg, GECKO_ERROR_GENERIC_FAILURE); 1.505 + do_check_false(postedMessage.success); 1.506 + 1.507 + run_next_test(); 1.508 +}); 1.509 + 1.510 + 1.511 +add_test(function test_sendMMI_call_forwarding_registration() { 1.512 + setCallForwardSuccess("**21*12345*99*10#"); 1.513 + 1.514 + run_next_test(); 1.515 +}); 1.516 + 1.517 +add_test(function test_sendMMI_call_forwarding_erasure() { 1.518 + setCallForwardSuccess("##21*12345*99#"); 1.519 + 1.520 + run_next_test(); 1.521 +}); 1.522 + 1.523 +add_test(function test_sendMMI_call_forwarding_CFB() { 1.524 + setCallForwardSuccess("*67*12345*99*10#"); 1.525 + 1.526 + run_next_test(); 1.527 +}); 1.528 + 1.529 +add_test(function test_sendMMI_call_forwarding_CFNRy() { 1.530 + setCallForwardSuccess("*61*12345*99*10#"); 1.531 + 1.532 + run_next_test(); 1.533 +}); 1.534 + 1.535 +add_test(function test_sendMMI_call_forwarding_CFNRc() { 1.536 + setCallForwardSuccess("*62*12345*99*10#"); 1.537 + 1.538 + run_next_test(); 1.539 +}); 1.540 + 1.541 +add_test(function test_sendMMI_call_forwarding_CFAll() { 1.542 + setCallForwardSuccess("*004*12345*99*10#"); 1.543 + 1.544 + run_next_test(); 1.545 +}); 1.546 + 1.547 +add_test(function test_sendMMI_call_forwarding_CFAllConditional() { 1.548 + setCallForwardSuccess("*002*12345*99*10#"); 1.549 + 1.550 + run_next_test(); 1.551 +}); 1.552 + 1.553 +add_test(function test_sendMMI_change_PIN() { 1.554 + let workerhelper = getWorker(); 1.555 + let worker = workerhelper.worker; 1.556 + let context = worker.ContextPool._contexts[0]; 1.557 + 1.558 + context.RIL.changeICCPIN = function fakeChangeICCPIN(options) { 1.559 + context.RIL[REQUEST_ENTER_SIM_PIN](0, { 1.560 + rilRequestError: ERROR_SUCCESS 1.561 + }); 1.562 + }; 1.563 + 1.564 + context.RIL.radioState = GECKO_RADIOSTATE_READY; 1.565 + context.RIL.sendMMI({mmi: "**04*1234*4567*4567#"}); 1.566 + 1.567 + let postedMessage = workerhelper.postedMessage; 1.568 + 1.569 + do_check_eq (postedMessage.errorMsg, GECKO_ERROR_SUCCESS); 1.570 + do_check_true(postedMessage.success); 1.571 + 1.572 + run_next_test(); 1.573 +}); 1.574 + 1.575 +add_test(function test_sendMMI_change_PIN_no_new_PIN() { 1.576 + testSendMMI("**04*1234**4567#", MMI_ERROR_KS_ERROR); 1.577 + 1.578 + run_next_test(); 1.579 +}); 1.580 + 1.581 +add_test(function test_sendMMI_change_PIN_no_old_PIN() { 1.582 + testSendMMI("**04**1234*4567#", MMI_ERROR_KS_ERROR); 1.583 + 1.584 + run_next_test(); 1.585 +}); 1.586 + 1.587 +add_test(function test_sendMMI_change_PIN_wrong_procedure() { 1.588 + testSendMMI("*04*1234*4567*4567#", MMI_ERROR_KS_INVALID_ACTION); 1.589 + 1.590 + run_next_test(); 1.591 +}); 1.592 + 1.593 +add_test(function test_sendMMI_change_PIN_new_PIN_mismatch() { 1.594 + testSendMMI("**04*4567*1234*4567#", MMI_ERROR_KS_MISMATCH_PIN); 1.595 + 1.596 + run_next_test(); 1.597 +}); 1.598 + 1.599 +add_test(function test_sendMMI_change_PIN2() { 1.600 + let workerhelper = getWorker(); 1.601 + let worker = workerhelper.worker; 1.602 + let context = worker.ContextPool._contexts[0]; 1.603 + 1.604 + context.RIL.changeICCPIN2 = function fakeChangeICCPIN2(options){ 1.605 + context.RIL[REQUEST_ENTER_SIM_PIN2](0, { 1.606 + rilRequestError: ERROR_SUCCESS 1.607 + }); 1.608 + }; 1.609 + 1.610 + context.RIL.radioState = GECKO_RADIOSTATE_READY; 1.611 + context.RIL.sendMMI({mmi: "**042*1234*4567*4567#"}); 1.612 + 1.613 + let postedMessage = workerhelper.postedMessage; 1.614 + 1.615 + do_check_eq (postedMessage.errorMsg, GECKO_ERROR_SUCCESS); 1.616 + do_check_true(postedMessage.success); 1.617 + 1.618 + run_next_test(); 1.619 +}); 1.620 + 1.621 +add_test(function test_sendMMI_change_PIN2_no_new_PIN2() { 1.622 + testSendMMI("**042*1234**4567#", MMI_ERROR_KS_ERROR); 1.623 + 1.624 + run_next_test(); 1.625 +}); 1.626 + 1.627 +add_test(function test_sendMMI_change_PIN2_no_old_PIN2() { 1.628 + testSendMMI("**042**1234*4567#", MMI_ERROR_KS_ERROR); 1.629 + 1.630 + run_next_test(); 1.631 +}); 1.632 + 1.633 +add_test(function test_sendMMI_change_PIN2_wrong_procedure() { 1.634 + testSendMMI("*042*1234*4567*4567#", MMI_ERROR_KS_INVALID_ACTION); 1.635 + 1.636 + run_next_test(); 1.637 +}); 1.638 + 1.639 +add_test(function test_sendMMI_change_PIN2_new_PIN2_mismatch() { 1.640 + testSendMMI("**042*4567*1234*4567#", MMI_ERROR_KS_MISMATCH_PIN); 1.641 + 1.642 + run_next_test(); 1.643 +}); 1.644 + 1.645 +add_test(function test_sendMMI_unblock_PIN() { 1.646 + let workerhelper = getWorker(); 1.647 + let worker = workerhelper.worker; 1.648 + let context = worker.ContextPool._contexts[0]; 1.649 + 1.650 + context.RIL.enterICCPUK = function fakeEnterICCPUK(options){ 1.651 + context.RIL[REQUEST_ENTER_SIM_PUK](0, { 1.652 + rilRequestError: ERROR_SUCCESS 1.653 + }); 1.654 + }; 1.655 + 1.656 + context.RIL.radioState = GECKO_RADIOSTATE_READY; 1.657 + context.RIL.sendMMI({mmi: "**05*1234*4567*4567#"}); 1.658 + 1.659 + let postedMessage = workerhelper.postedMessage; 1.660 + 1.661 + do_check_eq (postedMessage.errorMsg, GECKO_ERROR_SUCCESS); 1.662 + do_check_true(postedMessage.success); 1.663 + 1.664 + run_next_test(); 1.665 +}); 1.666 + 1.667 +add_test(function test_sendMMI_unblock_PIN_no_new_PIN() { 1.668 + testSendMMI("**05*1234**4567#", MMI_ERROR_KS_ERROR); 1.669 + 1.670 + run_next_test(); 1.671 +}); 1.672 + 1.673 +add_test(function test_sendMMI_unblock_PIN_no_PUK() { 1.674 + testSendMMI("**05**1234*4567#", MMI_ERROR_KS_ERROR); 1.675 + 1.676 + run_next_test(); 1.677 +}); 1.678 + 1.679 +add_test(function test_sendMMI_unblock_PIN_wrong_procedure() { 1.680 + testSendMMI("*05*1234*4567*4567#", MMI_ERROR_KS_INVALID_ACTION); 1.681 + 1.682 + run_next_test(); 1.683 +}); 1.684 + 1.685 +add_test(function test_sendMMI_unblock_PIN_new_PIN_mismatch() { 1.686 + testSendMMI("**05*4567*1234*4567#", MMI_ERROR_KS_MISMATCH_PIN); 1.687 + 1.688 + run_next_test(); 1.689 +}); 1.690 + 1.691 +add_test(function test_sendMMI_unblock_PIN2() { 1.692 + let workerhelper = getWorker(); 1.693 + let worker = workerhelper.worker; 1.694 + let context = worker.ContextPool._contexts[0]; 1.695 + 1.696 + context.RIL.enterICCPUK2 = function fakeEnterICCPUK2(options){ 1.697 + context.RIL[REQUEST_ENTER_SIM_PUK2](0, { 1.698 + rilRequestError: ERROR_SUCCESS 1.699 + }); 1.700 + }; 1.701 + 1.702 + context.RIL.radioState = GECKO_RADIOSTATE_READY; 1.703 + context.RIL.sendMMI({mmi: "**052*1234*4567*4567#"}); 1.704 + 1.705 + let postedMessage = workerhelper.postedMessage; 1.706 + 1.707 + do_check_eq (postedMessage.errorMsg, GECKO_ERROR_SUCCESS); 1.708 + do_check_true(postedMessage.success); 1.709 + 1.710 + run_next_test(); 1.711 +}); 1.712 + 1.713 +add_test(function test_sendMMI_unblock_PIN2_no_new_PIN2() { 1.714 + testSendMMI("**052*1234**4567#", MMI_ERROR_KS_ERROR); 1.715 + 1.716 + run_next_test(); 1.717 +}); 1.718 + 1.719 +add_test(function test_sendMMI_unblock_PIN2_no_PUK2() { 1.720 + testSendMMI("**052**1234*4567#", MMI_ERROR_KS_ERROR); 1.721 + 1.722 + run_next_test(); 1.723 +}); 1.724 + 1.725 +add_test(function test_sendMMI_unblock_PIN2_wrong_procedure() { 1.726 + testSendMMI("*052*1234*4567*4567#", MMI_ERROR_KS_INVALID_ACTION); 1.727 + 1.728 + run_next_test(); 1.729 +}); 1.730 + 1.731 +add_test(function test_sendMMI_unblock_PIN2_new_PIN_mismatch() { 1.732 + testSendMMI("**052*4567*1234*4567#", MMI_ERROR_KS_MISMATCH_PIN); 1.733 + 1.734 + run_next_test(); 1.735 +}); 1.736 + 1.737 +add_test(function test_sendMMI_get_IMEI() { 1.738 + let workerhelper = getWorker(); 1.739 + let worker = workerhelper.worker; 1.740 + let context = worker.ContextPool._contexts[0]; 1.741 + let mmiOptions; 1.742 + 1.743 + context.RIL.getIMEI = function getIMEI(options){ 1.744 + mmiOptions = options; 1.745 + context.RIL[REQUEST_SEND_USSD](0, { 1.746 + rilRequestError: ERROR_SUCCESS, 1.747 + }); 1.748 + }; 1.749 + 1.750 + context.RIL.sendMMI({mmi: "*#06#"}); 1.751 + 1.752 + let postedMessage = workerhelper.postedMessage; 1.753 + 1.754 + do_check_neq(mmiOptions.mmi, null); 1.755 + do_check_eq (postedMessage.errorMsg, GECKO_ERROR_SUCCESS); 1.756 + do_check_true(postedMessage.success); 1.757 + 1.758 + run_next_test(); 1.759 +}); 1.760 + 1.761 +add_test(function test_sendMMI_get_IMEI_error() { 1.762 + let workerhelper = getWorker(); 1.763 + let worker = workerhelper.worker; 1.764 + let context = worker.ContextPool._contexts[0]; 1.765 + let mmiOptions; 1.766 + 1.767 + context.RIL.getIMEI = function getIMEI(options){ 1.768 + mmiOptions = options; 1.769 + context.RIL[REQUEST_SEND_USSD](0, { 1.770 + rilRequestError: ERROR_RADIO_NOT_AVAILABLE, 1.771 + }); 1.772 + }; 1.773 + 1.774 + context.RIL.sendMMI({mmi: "*#06#"}); 1.775 + 1.776 + let postedMessage = workerhelper.postedMessage; 1.777 + 1.778 + do_check_neq(mmiOptions.mmi, null); 1.779 + do_check_eq (postedMessage.errorMsg, GECKO_ERROR_RADIO_NOT_AVAILABLE); 1.780 + do_check_false(postedMessage.success); 1.781 + 1.782 + run_next_test(); 1.783 +}); 1.784 + 1.785 +add_test(function test_sendMMI_call_barring_BAIC_interrogation_voice() { 1.786 + let workerhelper = getWorker(); 1.787 + let worker = workerhelper.worker; 1.788 + let context = worker.ContextPool._contexts[0]; 1.789 + 1.790 + context.Buf.readInt32List = function fakeReadUint32List() { 1.791 + return [1]; 1.792 + }; 1.793 + 1.794 + context.RIL.queryICCFacilityLock = 1.795 + function fakeQueryICCFacilityLock(options){ 1.796 + context.RIL[REQUEST_QUERY_FACILITY_LOCK](1, { 1.797 + rilMessageType: "sendMMI", 1.798 + rilRequestError: ERROR_SUCCESS 1.799 + }); 1.800 + }; 1.801 + 1.802 + context.RIL.radioState = GECKO_RADIOSTATE_READY; 1.803 + context.RIL.sendMMI({mmi: "*#33#"}); 1.804 + 1.805 + let postedMessage = workerhelper.postedMessage; 1.806 + 1.807 + do_check_true(postedMessage.success); 1.808 + do_check_true(postedMessage.enabled); 1.809 + do_check_eq(postedMessage.statusMessage, MMI_SM_KS_SERVICE_ENABLED_FOR); 1.810 + do_check_true(Array.isArray(postedMessage.additionalInformation)); 1.811 + do_check_eq(postedMessage.additionalInformation[0], "serviceClassVoice"); 1.812 + 1.813 + run_next_test(); 1.814 +}); 1.815 + 1.816 +add_test(function test_sendMMI_call_barring_BAIC_activation() { 1.817 + let workerhelper = getWorker(); 1.818 + let worker = workerhelper.worker; 1.819 + let context = worker.ContextPool._contexts[0]; 1.820 + let mmiOptions; 1.821 + 1.822 + context.RIL.setICCFacilityLock = 1.823 + function fakeSetICCFacilityLock(options){ 1.824 + mmiOptions = options; 1.825 + context.RIL[REQUEST_SET_FACILITY_LOCK](0, { 1.826 + rilMessageType: "sendMMI", 1.827 + procedure: MMI_PROCEDURE_ACTIVATION, 1.828 + rilRequestError: ERROR_SUCCESS 1.829 + }); 1.830 + }; 1.831 + 1.832 + context.RIL.radioState = GECKO_RADIOSTATE_READY; 1.833 + context.RIL.sendMMI({mmi: "*33#"}); 1.834 + 1.835 + let postedMessage = workerhelper.postedMessage; 1.836 + 1.837 + do_check_eq(mmiOptions.procedure, MMI_PROCEDURE_ACTIVATION); 1.838 + do_check_true(postedMessage.success); 1.839 + do_check_eq(postedMessage.statusMessage, MMI_SM_KS_SERVICE_ENABLED); 1.840 + 1.841 + run_next_test(); 1.842 +}); 1.843 + 1.844 +add_test(function test_sendMMI_call_barring_BAIC_deactivation() { 1.845 + let workerhelper = getWorker(); 1.846 + let worker = workerhelper.worker; 1.847 + let context = worker.ContextPool._contexts[0]; 1.848 + let mmiOptions; 1.849 + 1.850 + context.RIL.setICCFacilityLock = 1.851 + function fakeSetICCFacilityLock(options){ 1.852 + mmiOptions = options; 1.853 + context.RIL[REQUEST_SET_FACILITY_LOCK](0, { 1.854 + rilMessageType: "sendMMI", 1.855 + procedure: MMI_PROCEDURE_DEACTIVATION, 1.856 + rilRequestError: ERROR_SUCCESS 1.857 + }); 1.858 + }; 1.859 + 1.860 + context.RIL.radioState = GECKO_RADIOSTATE_READY; 1.861 + context.RIL.sendMMI({mmi: "#33#"}); 1.862 + 1.863 + let postedMessage = workerhelper.postedMessage; 1.864 + 1.865 + do_check_eq(mmiOptions.procedure, MMI_PROCEDURE_DEACTIVATION); 1.866 + do_check_true(postedMessage.success); 1.867 + do_check_eq(postedMessage.statusMessage, MMI_SM_KS_SERVICE_DISABLED); 1.868 + 1.869 + run_next_test(); 1.870 +}); 1.871 + 1.872 +add_test(function test_sendMMI_call_barring_BAIC_procedure_not_supported() { 1.873 + testSendMMI("**33*0000#", MMI_ERROR_KS_NOT_SUPPORTED); 1.874 + 1.875 + run_next_test(); 1.876 +}); 1.877 + 1.878 +add_test(function test_sendMMI_USSD() { 1.879 + let workerhelper = getWorker(); 1.880 + let worker = workerhelper.worker; 1.881 + let context = worker.ContextPool._contexts[0]; 1.882 + let ussdOptions; 1.883 + 1.884 + context.RIL.sendUSSD = function fakeSendUSSD(options){ 1.885 + ussdOptions = options; 1.886 + context.RIL[REQUEST_SEND_USSD](0, { 1.887 + rilRequestError: ERROR_SUCCESS 1.888 + }); 1.889 + }; 1.890 + 1.891 + context.RIL.radioState = GECKO_RADIOSTATE_READY; 1.892 + context.RIL.sendMMI({mmi: "*123#"}); 1.893 + 1.894 + let postedMessage = workerhelper.postedMessage; 1.895 + 1.896 + do_check_eq(ussdOptions.ussd, "*123#"); 1.897 + do_check_eq (postedMessage.errorMsg, GECKO_ERROR_SUCCESS); 1.898 + do_check_true(postedMessage.success); 1.899 + do_check_true(context.RIL._ussdSession); 1.900 + 1.901 + run_next_test(); 1.902 +}); 1.903 + 1.904 +add_test(function test_sendMMI_USSD_error() { 1.905 + let workerhelper = getWorker(); 1.906 + let worker = workerhelper.worker; 1.907 + let context = worker.ContextPool._contexts[0]; 1.908 + let ussdOptions; 1.909 + 1.910 + context.RIL.sendUSSD = function fakeSendUSSD(options){ 1.911 + ussdOptions = options; 1.912 + context.RIL[REQUEST_SEND_USSD](0, { 1.913 + rilRequestError: ERROR_GENERIC_FAILURE 1.914 + }); 1.915 + }; 1.916 + 1.917 + context.RIL.radioState = GECKO_RADIOSTATE_READY; 1.918 + context.RIL.sendMMI({mmi: "*123#"}); 1.919 + 1.920 + let postedMessage = workerhelper.postedMessage; 1.921 + 1.922 + do_check_eq(ussdOptions.ussd, "*123#"); 1.923 + do_check_eq (postedMessage.errorMsg, GECKO_ERROR_GENERIC_FAILURE); 1.924 + do_check_false(postedMessage.success); 1.925 + do_check_false(context.RIL._ussdSession); 1.926 + 1.927 + run_next_test(); 1.928 +}); 1.929 + 1.930 +function setCallWaitingSuccess(mmi) { 1.931 + let workerhelper = getWorker(); 1.932 + let worker = workerhelper.worker; 1.933 + let context = worker.ContextPool._contexts[0]; 1.934 + 1.935 + context.RIL.setCallWaiting = function fakeSetCallWaiting(options) { 1.936 + context.RIL[REQUEST_SET_CALL_WAITING](0, { 1.937 + rilRequestError: ERROR_SUCCESS 1.938 + }); 1.939 + }; 1.940 + 1.941 + context.RIL.radioState = GECKO_RADIOSTATE_READY; 1.942 + context.RIL.sendMMI({mmi: mmi}); 1.943 + 1.944 + let postedMessage = workerhelper.postedMessage; 1.945 + 1.946 + do_check_eq(postedMessage.errorMsg, GECKO_ERROR_SUCCESS); 1.947 + do_check_true(postedMessage.success); 1.948 +} 1.949 + 1.950 +add_test(function test_sendMMI_call_waiting_activation() { 1.951 + setCallWaitingSuccess("*43*10#"); 1.952 + 1.953 + run_next_test(); 1.954 +}); 1.955 + 1.956 +add_test(function test_sendMMI_call_waiting_deactivation() { 1.957 + setCallWaitingSuccess("#43#"); 1.958 + 1.959 + run_next_test(); 1.960 +}); 1.961 + 1.962 +add_test(function test_sendMMI_call_waiting_registration() { 1.963 + testSendMMI("**43#", MMI_ERROR_KS_NOT_SUPPORTED); 1.964 + 1.965 + run_next_test(); 1.966 +}); 1.967 + 1.968 +add_test(function test_sendMMI_call_waiting_erasure() { 1.969 + testSendMMI("##43#", MMI_ERROR_KS_NOT_SUPPORTED); 1.970 + 1.971 + run_next_test(); 1.972 +}); 1.973 + 1.974 +add_test(function test_sendMMI_call_waiting_interrogation() { 1.975 + let workerhelper = getWorker(); 1.976 + let worker = workerhelper.worker; 1.977 + let context = worker.ContextPool._contexts[0]; 1.978 + 1.979 + context.Buf.readInt32 = function fakeReadUint32() { 1.980 + return context.Buf.int32Array.pop(); 1.981 + }; 1.982 + 1.983 + context.RIL.queryCallWaiting = function fakeQueryCallWaiting(options) { 1.984 + context.Buf.int32Array = [ 1.985 + 7, // serviceClass 1.986 + 1, // enabled 1.987 + 2 // length 1.988 + ]; 1.989 + context.RIL[REQUEST_QUERY_CALL_WAITING](1, { 1.990 + rilRequestError: ERROR_SUCCESS 1.991 + }); 1.992 + }; 1.993 + 1.994 + context.RIL.radioState = GECKO_RADIOSTATE_READY; 1.995 + context.RIL.sendMMI({mmi: "*#43#"}); 1.996 + 1.997 + let postedMessage = workerhelper.postedMessage; 1.998 + 1.999 + do_check_eq(postedMessage.errorMsg, GECKO_ERROR_SUCCESS); 1.1000 + do_check_true(postedMessage.success); 1.1001 + do_check_eq(postedMessage.length, 2); 1.1002 + do_check_true(postedMessage.enabled); 1.1003 + run_next_test(); 1.1004 +});