summaryrefslogtreecommitdiffstats
path: root/dom/system/gonk/tests/test_ril_worker_cellbroadcast_umts.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/system/gonk/tests/test_ril_worker_cellbroadcast_umts.js')
-rw-r--r--dom/system/gonk/tests/test_ril_worker_cellbroadcast_umts.js105
1 files changed, 105 insertions, 0 deletions
diff --git a/dom/system/gonk/tests/test_ril_worker_cellbroadcast_umts.js b/dom/system/gonk/tests/test_ril_worker_cellbroadcast_umts.js
new file mode 100644
index 000000000..0380c4122
--- /dev/null
+++ b/dom/system/gonk/tests/test_ril_worker_cellbroadcast_umts.js
@@ -0,0 +1,105 @@
+/* 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();
+}
+
+function buildHexStr(aNum, aNumSemiOctets) {
+ let str = aNum.toString(16);
+ while (str.length < aNumSemiOctets) {
+ str = "0" + str;
+ }
+ return str;
+}
+
+/**
+ * Verify GsmPDUHelper#readUmtsCbMessage with numOfPages from 1 to 15.
+ */
+add_test(function test_GsmPDUHelper_readUmtsCbMessage_MultiParts() {
+ let CB_UMTS_MESSAGE_PAGE_SIZE = 82;
+ let CB_MAX_CONTENT_PER_PAGE_7BIT = 93;
+ let workerHelper = newInterceptWorker(),
+ worker = workerHelper.worker,
+ context = worker.ContextPool._contexts[0],
+ GsmPDUHelper = context.GsmPDUHelper;
+
+ function test_MultiParts(aNumOfPages) {
+ let pdu = buildHexStr(CB_UMTS_MESSAGE_TYPE_CBS, 2) // msg_type
+ + buildHexStr(0, 4) // skip msg_id
+ + buildHexStr(0, 4) // skip SN
+ + buildHexStr(0, 2) // skip dcs
+ + buildHexStr(aNumOfPages, 2); // set num_of_pages
+ for (let i = 1; i <= aNumOfPages; i++) {
+ pdu = pdu + buildHexStr(0, CB_UMTS_MESSAGE_PAGE_SIZE * 2)
+ + buildHexStr(CB_UMTS_MESSAGE_PAGE_SIZE, 2); // msg_info_length
+ }
+
+ worker.onRILMessage(0, newIncomingParcel(-1,
+ RESPONSE_TYPE_UNSOLICITED,
+ UNSOLICITED_RESPONSE_NEW_BROADCAST_SMS,
+ hexStringToParcelByteArrayData(pdu)));
+
+ let postedMessage = workerHelper.postedMessage;
+ equal("cellbroadcast-received", postedMessage.rilMessageType);
+ equal(postedMessage.fullBody.length,
+ aNumOfPages * CB_MAX_CONTENT_PER_PAGE_7BIT);
+ }
+
+ [1, 5, 15].forEach(function(i) {
+ test_MultiParts(i);
+ });
+
+ run_next_test();
+});
+
+/**
+ * Verify GsmPDUHelper#readUmtsCbMessage with 8bit encoded.
+ */
+add_test(function test_GsmPDUHelper_readUmtsCbMessage_Binary() {
+ let CB_UMTS_MESSAGE_PAGE_SIZE = 82;
+ let CB_MAX_CONTENT_PER_PAGE_7BIT = 93;
+ let TEXT_BINARY = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ + "FFFF";
+ let workerHelper = newInterceptWorker(),
+ worker = workerHelper.worker,
+ context = worker.ContextPool._contexts[0],
+ GsmPDUHelper = context.GsmPDUHelper;
+
+ function test_MultiPartsBinary(aNumOfPages) {
+ let pdu = buildHexStr(CB_UMTS_MESSAGE_TYPE_CBS, 2) // msg_type
+ + buildHexStr(0, 4) // skip msg_id
+ + buildHexStr(0, 4) // skip SN
+ + buildHexStr(68, 2) // set DCS to 8bit data
+ + buildHexStr(aNumOfPages, 2); // set num_of_pages
+ for (let i = 1; i <= aNumOfPages; i++) {
+ pdu = pdu + TEXT_BINARY
+ + buildHexStr(CB_UMTS_MESSAGE_PAGE_SIZE, 2); // msg_info_length
+ }
+
+ worker.onRILMessage(0, newIncomingParcel(-1,
+ RESPONSE_TYPE_UNSOLICITED,
+ UNSOLICITED_RESPONSE_NEW_BROADCAST_SMS,
+ hexStringToParcelByteArrayData(pdu)));
+
+ let postedMessage = workerHelper.postedMessage;
+ equal("cellbroadcast-received", postedMessage.rilMessageType);
+ equal(postedMessage.fullData.length,
+ aNumOfPages * CB_UMTS_MESSAGE_PAGE_SIZE);
+ for (let i = 0; i < postedMessage.fullData.length; i++) {
+ equal(postedMessage.fullData[i], 255);
+ }
+ }
+
+ [1, 5, 15].forEach(function(i) {
+ test_MultiPartsBinary(i);
+ });
+
+ run_next_test();
+});