gecko-dev/dom/icc/tests/marionette/test_icc_info.js

96 строки
3.2 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
MARIONETTE_TIMEOUT = 30000;
SpecialPowers.addPermission("mobileconnection", true, document);
// Permission changes can't change existing Navigator.prototype
// objects, so grab our objects from a new Navigator
let ifr = document.createElement("iframe");
let icc;
let iccInfo;
ifr.onload = function() {
icc = ifr.contentWindow.navigator.mozIccManager;
ok(icc instanceof ifr.contentWindow.MozIccManager,
"icc is instanceof " + icc.constructor);
iccInfo = icc.iccInfo;
// The emulator's hard coded iccid value.
// See it here {B2G_HOME}/external/qemu/telephony/sim_card.c#L299.
is(iccInfo.iccid, 89014103211118510720);
// The emulator's hard coded mcc and mnc codes.
// See it here {B2G_HOME}/external/qemu/telephony/android_modem.c#L2465.
is(iccInfo.mcc, 310);
is(iccInfo.mnc, 260);
is(iccInfo.spn, "Android");
// Phone number is hardcoded in MSISDN
// See {B2G_HOME}/external/qemu/telephony/sim_card.c, in asimcard_io()
is(iccInfo.msisdn, "15555215554");
testDisplayConditionChange(testSPN, [
// [MCC, MNC, isDisplayNetworkNameRequired, isDisplaySpnRequired]
[123, 456, false, true], // Not in HPLMN.
[234, 136, true, true], // Not in HPLMN, but in PLMN specified in SPDI.
[123, 456, false, true], // Not in HPLMN. Triggering iccinfochange
[466, 92, true, true], // Not in HPLMN, but in another PLMN specified in SPDI.
[123, 456, false, true], // Not in HPLMN. Triggering iccinfochange
[310, 260, true, true], // inside HPLMN.
], finalize);
};
document.body.appendChild(ifr);
let emulatorCmdPendingCount = 0;
function sendEmulatorCommand(cmd, callback) {
emulatorCmdPendingCount++;
runEmulatorCmd(cmd, function (result) {
emulatorCmdPendingCount--;
is(result[result.length - 1], "OK");
callback(result);
});
}
function setEmulatorMccMnc(mcc, mnc) {
let cmd = "operator set 0 Android,Android," + mcc + mnc;
sendEmulatorCommand(cmd, function (result) {
let re = new RegExp("" + mcc + mnc + "$");
ok(result[0].match(re), "MCC/MNC should be changed.");
});
}
function waitForIccInfoChange(callback) {
icc.addEventListener("iccinfochange", function handler() {
icc.removeEventListener("iccinfochange", handler);
callback();
});
}
function finalize() {
SpecialPowers.removePermission("mobileconnection", document);
finish();
}
// Test display condition change.
function testDisplayConditionChange(func, caseArray, oncomplete) {
(function do_call(index) {
let next = index < (caseArray.length - 1) ? do_call.bind(null, index + 1) : oncomplete;
caseArray[index].push(next);
func.apply(null, caseArray[index]);
})(0);
}
function testSPN(mcc, mnc, expectedIsDisplayNetworkNameRequired,
expectedIsDisplaySpnRequired, callback) {
waitForIccInfoChange(function() {
is(iccInfo.isDisplayNetworkNameRequired,
expectedIsDisplayNetworkNameRequired);
is(iccInfo.isDisplaySpnRequired,
expectedIsDisplaySpnRequired);
// operatorchange will be ignored if we send commands too soon.
window.setTimeout(callback, 100);
});
setEmulatorMccMnc(mcc, mnc);
}