diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /dom/system/gonk/tests/test_ril_worker_cellbroadcast_gsm.js | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'dom/system/gonk/tests/test_ril_worker_cellbroadcast_gsm.js')
-rw-r--r-- | dom/system/gonk/tests/test_ril_worker_cellbroadcast_gsm.js | 230 |
1 files changed, 230 insertions, 0 deletions
diff --git a/dom/system/gonk/tests/test_ril_worker_cellbroadcast_gsm.js b/dom/system/gonk/tests/test_ril_worker_cellbroadcast_gsm.js new file mode 100644 index 000000000..b08b64135 --- /dev/null +++ b/dom/system/gonk/tests/test_ril_worker_cellbroadcast_gsm.js @@ -0,0 +1,230 @@ +/* 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(); +} + +add_test(function test_ril_worker_GsmPDUHelper_readCbDataCodingScheme() { + let worker = newWorker({ + postRILMessage: function(data) { + // Do nothing + }, + postMessage: function(message) { + // Do nothing + } + }); + + let context = worker.ContextPool._contexts[0]; + function test_dcs(dcs, encoding, language, hasLanguageIndicator, messageClass) { + context.Buf.readUint8 = function() { + return dcs; + }; + + let msg = {}; + context.GsmPDUHelper.readCbDataCodingScheme(msg); + + equal(msg.dcs, dcs); + equal(msg.encoding, encoding); + equal(msg.language, language); + equal(msg.hasLanguageIndicator, hasLanguageIndicator); + equal(msg.messageClass, messageClass); + } + + function test_dcs_throws(dcs) { + context.Buf.readUint8 = function() { + return dcs; + }; + + throws(function() { + context.GsmPDUHelper.readCbDataCodingScheme({}); + }, "Unsupported CBS data coding scheme: " + dcs); + } + + // Group 0000 + for (let i = 0; i < 16; i++) { + test_dcs(i, PDU_DCS_MSG_CODING_7BITS_ALPHABET, CB_DCS_LANG_GROUP_1[i], + false, GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_NORMAL]); + } + + // Group 0001 + // 0000 GSM 7 bit default alphabet; message preceded by language indication. + test_dcs(0x10, PDU_DCS_MSG_CODING_7BITS_ALPHABET, null, true, + GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_NORMAL]); + // 0001 UCS2; message preceded by language indication. + test_dcs(0x11, PDU_DCS_MSG_CODING_16BITS_ALPHABET, null, true, + GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_NORMAL]); + + // Group 0010 + // 0000..0100 + for (let i = 0; i < 5; i++) { + test_dcs(0x20 + i, PDU_DCS_MSG_CODING_7BITS_ALPHABET, + CB_DCS_LANG_GROUP_2[i], false, + GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_NORMAL]); + } + // 0101..1111 Reserved + for (let i = 5; i < 16; i++) { + test_dcs(0x20 + i, PDU_DCS_MSG_CODING_7BITS_ALPHABET, null, false, + GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_NORMAL]); + } + + // Group 0100, 0101, 1001 + for (let group of [0x40, 0x50, 0x90]) { + for (let i = 0; i < 16; i++) { + let encoding = i & 0x0C; + if (encoding == 0x0C) { + encoding = PDU_DCS_MSG_CODING_7BITS_ALPHABET; + } + let messageClass = GECKO_SMS_MESSAGE_CLASSES[i & PDU_DCS_MSG_CLASS_BITS]; + test_dcs(group + i, encoding, null, false, messageClass); + } + } + + // Group 1111 + for (let i = 0; i < 16; i ++) { + let encoding = i & 0x04 ? PDU_DCS_MSG_CODING_8BITS_ALPHABET + : PDU_DCS_MSG_CODING_7BITS_ALPHABET; + let messageClass; + switch(i & PDU_DCS_MSG_CLASS_BITS) { + case 0x01: messageClass = PDU_DCS_MSG_CLASS_USER_1; break; + case 0x02: messageClass = PDU_DCS_MSG_CLASS_USER_2; break; + case 0x03: messageClass = PDU_DCS_MSG_CLASS_3; break; + default: messageClass = PDU_DCS_MSG_CLASS_NORMAL; break; + } + test_dcs(0xF0 + i, encoding, null, false, + GECKO_SMS_MESSAGE_CLASSES[messageClass]); + } + + // Group 0011, 1000, 1010, 1011, 1100 + // 0000..1111 Reserved + for (let group of [0x30, 0x80, 0xA0, 0xB0, 0xC0]) { + for (let i = 0; i < 16; i++) { + test_dcs(group + i, PDU_DCS_MSG_CODING_7BITS_ALPHABET, null, false, + GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_NORMAL]); + } + } + + // Group 0110, 0111, 1101, 1110 + // TODO: unsupported + for (let group of [0x60, 0x70, 0xD0, 0xE0]) { + for (let i = 0; i < 16; i++) { + test_dcs_throws(group + i); + } + } + + run_next_test(); +}); + +add_test(function test_ril_worker_GsmPDUHelper_readGsmCbData() { + let worker = newWorker({ + postRILMessage: function(data) { + // Do nothing + }, + postMessage: function(message) { + // Do nothing + } + }); + + let context = worker.ContextPool._contexts[0]; + function test_data(options, expected) { + let readIndex = 0; + context.Buf.readUint8 = function() { + return options[3][readIndex++]; + }; + context.Buf.readUint8Array = function(length) { + let array = new Uint8Array(length); + for (let i = 0; i < length; i++) { + array[i] = this.readUint8(); + } + return array; + }; + + let msg = { + encoding: options[0], + language: options[1], + hasLanguageIndicator: options[2] + }; + context.GsmPDUHelper.readGsmCbData(msg, options[3].length); + + equal(msg.body, expected[0]); + equal(msg.data == null, expected[1] == null); + if (expected[1] != null) { + equal(msg.data.length, expected[1].length); + for (let i = 0; i < expected[1].length; i++) { + equal(msg.data[i], expected[1][i]); + } + } + equal(msg.language, expected[2]); + } + + // We're testing Cell Broadcast message body with all zeros octet stream. As + // shown in 3GPP TS 23.038, septet 0x00 will be decoded as '@' when both + // langTableIndex and langShiftTableIndex equal to + // PDU_DCS_MSG_CODING_7BITS_ALPHABET. + + // PDU_DCS_MSG_CODING_7BITS_ALPHABET + test_data([PDU_DCS_MSG_CODING_7BITS_ALPHABET, null, false, + [0]], + ["@", null, null]); + test_data([PDU_DCS_MSG_CODING_7BITS_ALPHABET, null, true, + [0, 0, 0, 0]], + ["@", null, "@@"]); + test_data([PDU_DCS_MSG_CODING_7BITS_ALPHABET, "@@", false, + [0]], + ["@", null, "@@"]); + + // PDU_DCS_MSG_CODING_8BITS_ALPHABET + test_data([PDU_DCS_MSG_CODING_8BITS_ALPHABET, null, false, + [0]], + [null, [0], null]); + + // PDU_DCS_MSG_CODING_16BITS_ALPHABET + test_data([PDU_DCS_MSG_CODING_16BITS_ALPHABET, null, false, + [0x00, 0x40]], + ["@", null, null]); + test_data([PDU_DCS_MSG_CODING_16BITS_ALPHABET, null, true, + [0x00, 0x00, 0x00, 0x40]], + ["@", null, "@@"]); + test_data([PDU_DCS_MSG_CODING_16BITS_ALPHABET, "@@", false, + [0x00, 0x40]], + ["@", null, "@@"]); + + run_next_test(); +}); + +add_test(function test_ril_worker_Sim_Download_Message() { + let worker = newWorker({ + postRILMessage: function(data) { + // Do nothing + }, + postMessage: function(message) { + ok(message.rilMessageType !== "cellbroadcast-received", + "Data-Download message shall be ignored."); + } + }); + + function buildPdu(aMessageId) { + return "C002" + aMessageId + "011154741914AFA7C76B9058" + + "FEBEBB41E6371EA4AEB7E173D0DB5E96" + + "83E8E832881DD6E741E4F7B9D168341A" + + "8D46A3D168341A8D46A3D168341A8D46" + + "A3D168341A8D46A3D168341A8D46A3D1" + + "68341A8D46A3D100"; + } + + ["1000", "107F", "1080", "10FF"].forEach(aMessageId => { + worker.onRILMessage( + 0, + newIncomingParcel( + -1, + RESPONSE_TYPE_UNSOLICITED, + UNSOLICITED_RESPONSE_NEW_BROADCAST_SMS, + hexStringToParcelByteArrayData(buildPdu(aMessageId)))); + }); + + ok(true, "All Data-Download Messages are ingored."); + + run_next_test(); +}); |