summaryrefslogtreecommitdiffstats
path: root/dom/system/gonk/tests/test_ril_worker_icc_ICCUtilsHelper.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/system/gonk/tests/test_ril_worker_icc_ICCUtilsHelper.js')
-rw-r--r--dom/system/gonk/tests/test_ril_worker_icc_ICCUtilsHelper.js326
1 files changed, 326 insertions, 0 deletions
diff --git a/dom/system/gonk/tests/test_ril_worker_icc_ICCUtilsHelper.js b/dom/system/gonk/tests/test_ril_worker_icc_ICCUtilsHelper.js
new file mode 100644
index 000000000..b23d0b598
--- /dev/null
+++ b/dom/system/gonk/tests/test_ril_worker_icc_ICCUtilsHelper.js
@@ -0,0 +1,326 @@
+/* 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();
+}
+
+/**
+ * Verify ICCUtilsHelper.isICCServiceAvailable.
+ */
+add_test(function test_is_icc_service_available() {
+ let worker = newUint8Worker();
+ let context = worker.ContextPool._contexts[0];
+ let ICCUtilsHelper = context.ICCUtilsHelper;
+ let RIL = context.RIL;
+
+ function test_table(sst, geckoService, simEnabled, usimEnabled) {
+ RIL.iccInfoPrivate.sst = sst;
+ RIL.appType = CARD_APPTYPE_SIM;
+ equal(ICCUtilsHelper.isICCServiceAvailable(geckoService), simEnabled);
+ RIL.appType = CARD_APPTYPE_USIM;
+ equal(ICCUtilsHelper.isICCServiceAvailable(geckoService), usimEnabled);
+ }
+
+ test_table([0x08], "ADN", true, false);
+ test_table([0x08], "FDN", false, false);
+ test_table([0x08], "SDN", false, true);
+
+ run_next_test();
+});
+
+/**
+ * Verify ICCUtilsHelper.isGsm8BitAlphabet
+ */
+add_test(function test_is_gsm_8bit_alphabet() {
+ let worker = newUint8Worker();
+ let context = worker.ContextPool._contexts[0];
+ let ICCUtilsHelper = context.ICCUtilsHelper;
+ const langTable = PDU_NL_LOCKING_SHIFT_TABLES[PDU_NL_IDENTIFIER_DEFAULT];
+ const langShiftTable = PDU_NL_SINGLE_SHIFT_TABLES[PDU_NL_IDENTIFIER_DEFAULT];
+
+ equal(ICCUtilsHelper.isGsm8BitAlphabet(langTable), true);
+ equal(ICCUtilsHelper.isGsm8BitAlphabet(langShiftTable), true);
+ equal(ICCUtilsHelper.isGsm8BitAlphabet("\uaaaa"), false);
+
+ run_next_test();
+});
+
+/**
+ * Verify ICCUtilsHelper.parsePbrTlvs
+ */
+add_test(function test_parse_pbr_tlvs() {
+ let worker = newUint8Worker();
+ let context = worker.ContextPool._contexts[0];
+ let buf = context.Buf;
+
+ let pbrTlvs = [
+ {tag: ICC_USIM_TYPE1_TAG,
+ length: 0x0F,
+ value: [{tag: ICC_USIM_EFADN_TAG,
+ length: 0x03,
+ value: [0x4F, 0x3A, 0x02]},
+ {tag: ICC_USIM_EFIAP_TAG,
+ length: 0x03,
+ value: [0x4F, 0x25, 0x01]},
+ {tag: ICC_USIM_EFPBC_TAG,
+ length: 0x03,
+ value: [0x4F, 0x09, 0x04]}]
+ },
+ {tag: ICC_USIM_TYPE2_TAG,
+ length: 0x05,
+ value: [{tag: ICC_USIM_EFEMAIL_TAG,
+ length: 0x03,
+ value: [0x4F, 0x50, 0x0B]},
+ {tag: ICC_USIM_EFANR_TAG,
+ length: 0x03,
+ value: [0x4F, 0x11, 0x02]},
+ {tag: ICC_USIM_EFANR_TAG,
+ length: 0x03,
+ value: [0x4F, 0x12, 0x03]}]
+ },
+ {tag: ICC_USIM_TYPE3_TAG,
+ length: 0x0A,
+ value: [{tag: ICC_USIM_EFCCP1_TAG,
+ length: 0x03,
+ value: [0x4F, 0x3D, 0x0A]},
+ {tag: ICC_USIM_EFEXT1_TAG,
+ length: 0x03,
+ value: [0x4F, 0x4A, 0x03]}]
+ },
+ ];
+
+ let pbr = context.ICCUtilsHelper.parsePbrTlvs(pbrTlvs);
+ equal(pbr.adn.fileId, 0x4F3a);
+ equal(pbr.iap.fileId, 0x4F25);
+ equal(pbr.pbc.fileId, 0x4F09);
+ equal(pbr.email.fileId, 0x4F50);
+ equal(pbr.anr0.fileId, 0x4f11);
+ equal(pbr.anr1.fileId, 0x4f12);
+ equal(pbr.ccp1.fileId, 0x4F3D);
+ equal(pbr.ext1.fileId, 0x4F4A);
+
+ run_next_test();
+});
+
+/**
+ * Verify MCC and MNC parsing
+ */
+add_test(function test_mcc_mnc_parsing() {
+ let worker = newUint8Worker();
+ let context = worker.ContextPool._contexts[0];
+ let helper = context.ICCUtilsHelper;
+
+ function do_test(imsi, mncLength, expectedMcc, expectedMnc) {
+ let result = helper.parseMccMncFromImsi(imsi, mncLength);
+
+ if (!imsi) {
+ equal(result, null);
+ return;
+ }
+
+ equal(result.mcc, expectedMcc);
+ equal(result.mnc, expectedMnc);
+ }
+
+ // Test the imsi is null.
+ do_test(null, null, null, null);
+
+ // Test MCC is Taiwan
+ do_test("466923202422409", 0x02, "466", "92");
+ do_test("466923202422409", 0x03, "466", "923");
+ do_test("466923202422409", null, "466", "92");
+
+ // Test MCC is US
+ do_test("310260542718417", 0x02, "310", "26");
+ do_test("310260542718417", 0x03, "310", "260");
+ do_test("310260542718417", null, "310", "260");
+
+ run_next_test();
+});
+
+add_test(function test_get_network_name_from_icc() {
+ let worker = newUint8Worker();
+ let context = worker.ContextPool._contexts[0];
+ let RIL = context.RIL;
+ let ICCUtilsHelper = context.ICCUtilsHelper;
+
+ function testGetNetworkNameFromICC(operatorData, expectedResult) {
+ let result = ICCUtilsHelper.getNetworkNameFromICC(operatorData.mcc,
+ operatorData.mnc,
+ operatorData.lac);
+
+ if (expectedResult == null) {
+ equal(result, expectedResult);
+ } else {
+ equal(result.fullName, expectedResult.longName);
+ equal(result.shortName, expectedResult.shortName);
+ }
+ }
+
+ // Before EF_OPL and EF_PNN have been loaded.
+ testGetNetworkNameFromICC({mcc: "123", mnc: "456", lac: 0x1000}, null);
+ testGetNetworkNameFromICC({mcc: "321", mnc: "654", lac: 0x2000}, null);
+
+ // Set HPLMN
+ RIL.iccInfo.mcc = "123";
+ RIL.iccInfo.mnc = "456";
+
+ RIL.voiceRegistrationState = {
+ cell: {
+ gsmLocationAreaCode: 0x1000
+ }
+ };
+ RIL.operator = {};
+
+ // Set EF_PNN
+ RIL.iccInfoPrivate = {
+ PNN: [
+ {"fullName": "PNN1Long", "shortName": "PNN1Short"},
+ {"fullName": "PNN2Long", "shortName": "PNN2Short"},
+ {"fullName": "PNN3Long", "shortName": "PNN3Short"},
+ {"fullName": "PNN4Long", "shortName": "PNN4Short"},
+ {"fullName": "PNN5Long", "shortName": "PNN5Short"},
+ {"fullName": "PNN6Long", "shortName": "PNN6Short"},
+ {"fullName": "PNN7Long", "shortName": "PNN7Short"},
+ {"fullName": "PNN8Long", "shortName": "PNN8Short"}
+ ]
+ };
+
+ // EF_OPL isn't available
+ ICCUtilsHelper.isICCServiceAvailable = function fakeIsICCServiceAvailable(service) {
+ return false;
+ };
+
+ // EF_OPL isn't available and current isn't in HPLMN,
+ testGetNetworkNameFromICC({mcc: "321", mnc: "654", lac: 0x1000}, null);
+
+ // EF_OPL isn't available and current is in HPLMN,
+ // the first record of PNN should be returned.
+ testGetNetworkNameFromICC({mcc: "123", mnc: "456", lac: 0x1000},
+ {longName: "PNN1Long", shortName: "PNN1Short"});
+
+ // EF_OPL is available
+ ICCUtilsHelper.isICCServiceAvailable = function fakeIsICCServiceAvailable(service) {
+ return service === "OPL";
+ };
+
+ // Set EF_OPL
+ RIL.iccInfoPrivate.OPL = [
+ {
+ "mcc": "123",
+ "mnc": "456",
+ "lacTacStart": 0,
+ "lacTacEnd": 0xFFFE,
+ "pnnRecordId": 4
+ },
+ {
+ "mcc": "321",
+ "mnc": "654",
+ "lacTacStart": 0,
+ "lacTacEnd": 0x0010,
+ "pnnRecordId": 3
+ },
+ {
+ "mcc": "321",
+ "mnc": "654",
+ "lacTacStart": 0x0100,
+ "lacTacEnd": 0x1010,
+ "pnnRecordId": 2
+ },
+ {
+ "mcc": ";;;",
+ "mnc": "01",
+ "lacTacStart": 0,
+ "lacTacEnd": 0xFFFE,
+ "pnnRecordId": 5
+ },
+ {
+ "mcc": "00;",
+ "mnc": "02",
+ "lacTacStart": 0,
+ "lacTacEnd": 0xFFFE,
+ "pnnRecordId": 6
+ },
+ {
+ "mcc": "001",
+ "mnc": ";;",
+ "lacTacStart": 0,
+ "lacTacEnd": 0xFFFE,
+ "pnnRecordId": 7
+ },
+ {
+ "mcc": "002",
+ "mnc": "0;",
+ "lacTacStart": 0,
+ "lacTacEnd": 0xFFFE,
+ "pnnRecordId": 8
+ }
+ ];
+
+ // Both EF_PNN and EF_OPL are presented, and current PLMN is HPLMN,
+ testGetNetworkNameFromICC({mcc: "123", mnc: "456", lac: 0x1000},
+ {longName: "PNN4Long", shortName: "PNN4Short"});
+
+ // Current PLMN is not HPLMN, and according to LAC, we should get
+ // the second PNN record.
+ testGetNetworkNameFromICC({mcc: "321", mnc: "654", lac: 0x1000},
+ {longName: "PNN2Long", shortName: "PNN2Short"});
+
+ // Current PLMN is not HPLMN, and according to LAC, we should get
+ // the thrid PNN record.
+ testGetNetworkNameFromICC({mcc: "321", mnc: "654", lac: 0x0001},
+ {longName: "PNN3Long", shortName: "PNN3Short"});
+
+ // Current PLMN is not HPLMN, and according to LAC, we should get
+ // the 5th PNN record after wild char (ie: ';') handling.
+ testGetNetworkNameFromICC({mcc: "001", mnc: "01", lac: 0x0001},
+ {longName: "PNN5Long", shortName: "PNN5Short"});
+
+ // Current PLMN is not HPLMN, and according to LAC, we should get
+ // the 6th PNN record after wild char (ie: ';') handling.
+ testGetNetworkNameFromICC({mcc: "001", mnc: "02", lac: 0x0001},
+ {longName: "PNN6Long", shortName: "PNN6Short"});
+
+ // Current PLMN is not HPLMN, and according to LAC, we should get
+ // the 7th PNN record after wild char (ie: ';') handling.
+ testGetNetworkNameFromICC({mcc: "001", mnc: "03", lac: 0x0001},
+ {longName: "PNN7Long", shortName: "PNN7Short"});
+
+ // Current PLMN is not HPLMN, and according to LAC, we should get
+ // the 8th PNN record after wild char (ie: ';') handling.
+ testGetNetworkNameFromICC({mcc: "002", mnc: "03", lac: 0x0001},
+ {longName: "PNN8Long", shortName: "PNN8Short"});
+
+ run_next_test();
+});
+
+/**
+ * Verify ICCUtilsHelper.isCphsServiceAvailable.
+ */
+add_test(function test_is_cphs_service_available() {
+ let worker = newUint8Worker();
+ let context = worker.ContextPool._contexts[0];
+ let ICCUtilsHelper = context.ICCUtilsHelper;
+ let RIL = context.RIL;
+ RIL.iccInfoPrivate.cphsSt = new Uint8Array(2);
+
+ function test_table(cphsSt, geckoService) {
+ RIL.iccInfoPrivate.cphsSt.set(cphsSt);
+
+ for (let service in GECKO_ICC_SERVICES.cphs) {
+ equal(ICCUtilsHelper.isCphsServiceAvailable(service),
+ geckoService == service);
+ }
+ }
+
+ test_table([0x03, 0x00], "CSP");
+ test_table([0x0C, 0x00], "SST");
+ test_table([0x30, 0x00], "MBN");
+ test_table([0xC0, 0x00], "ONSF");
+ test_table([0x00, 0x03], "INFO_NUM");
+
+ run_next_test();
+});