1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/mobilemessage/tests/marionette/test_message_classes.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,260 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + * http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +MARIONETTE_TIMEOUT = 60000; 1.8 + 1.9 +const PDU_SMSC = "00"; // No SMSC Address 1.10 +const PDU_FIRST_OCTET = "00"; // RP:no, UDHI:no, SRI:no, MMS:no, MTI:SMS-DELIVER 1.11 +const PDU_SENDER = "0191F1"; // +1 1.12 +const PDU_PID_NORMAL = "00"; 1.13 +const PDU_PID_ANSI_136_R_DATA = "7C"; 1.14 +const PDU_PID_USIM_DATA_DOWNLOAD = "7F"; 1.15 +const PDU_TIMESTAMP = "00101000000000"; // 2000/01/01 1.16 +const PDU_UDL = "01"; 1.17 +const PDU_UD = "41"; 1.18 + 1.19 +const SENT_TIMESTAMP = Date.UTC(2000, 0, 1); // Must be equal to PDU_TIMESTAMP. 1.20 + 1.21 +SpecialPowers.addPermission("sms", true, document); 1.22 + 1.23 +let manager = window.navigator.mozMobileMessage; 1.24 +ok(manager instanceof MozMobileMessageManager, 1.25 + "manager is instance of " + manager.constructor); 1.26 + 1.27 +let pendingEmulatorCmdCount = 0; 1.28 +function sendSmsPduToEmulator(pdu) { 1.29 + ++pendingEmulatorCmdCount; 1.30 + 1.31 + let cmd = "sms pdu " + pdu; 1.32 + runEmulatorCmd(cmd, function(result) { 1.33 + --pendingEmulatorCmdCount; 1.34 + 1.35 + is(result[0], "OK", "Emulator response"); 1.36 + }); 1.37 +} 1.38 + 1.39 +function checkMessage(message, id, threadId, messageClass) { 1.40 + ok(message instanceof MozSmsMessage, 1.41 + "message is instanceof " + message.constructor); 1.42 + if (id == null) { 1.43 + ok(message.id > 0, "message.id"); 1.44 + } else { 1.45 + is(message.id, id, "message.id"); 1.46 + } 1.47 + if (threadId == null) { 1.48 + ok(message.threadId > 0, "message.threadId"); 1.49 + } else { 1.50 + is(message.threadId, threadId, "message.threadId"); 1.51 + } 1.52 + is(message.delivery, "received", "message.delivery"); 1.53 + is(message.deliveryStatus, "success", "message.deliveryStatus"); 1.54 + is(message.sender, "+1", "message.sender"); 1.55 + is(message.body, "A", "message.body"); 1.56 + is(message.messageClass, messageClass, "message.messageClass"); 1.57 + is(message.deliveryTimestamp, 0, "deliveryTimestamp is 0"); 1.58 + is(message.read, false, "message.read"); 1.59 +} 1.60 + 1.61 +function test_message_class_0() { 1.62 + let allDCSs = [ 1.63 + "10", // General Group: 00xx 1.64 + "50", // Automatica Deletion Group: 01xx 1.65 + "F0" // (no name) Group: 1111 1.66 + ]; 1.67 + 1.68 + function do_test(dcsIndex) { 1.69 + manager.addEventListener("received", function onReceived(event) { 1.70 + manager.removeEventListener("received", onReceived); 1.71 + 1.72 + let message = event.message; 1.73 + checkMessage(message, -1, 0, "class-0"); 1.74 + ok(event.message.timestamp >= timeBeforeSend, 1.75 + "Message's timestamp should be greater then the timetamp of sending"); 1.76 + ok(event.message.timestamp <= Date.now(), 1.77 + "Message's timestamp should be lesser than the timestamp of now"); 1.78 + is(event.message.sentTimestamp, SENT_TIMESTAMP, 1.79 + "Message's sentTimestamp should be equal to SENT_TIMESTAMP"); 1.80 + 1.81 + // Make sure the message is not stored. 1.82 + let cursor = manager.getMessages(null, false); 1.83 + cursor.onsuccess = function onsuccess() { 1.84 + if (cursor.result) { 1.85 + // Here we check whether there is any message of the same sender. 1.86 + isnot(cursor.result.sender, message.sender, "cursor.result.sender"); 1.87 + 1.88 + cursor.continue(); 1.89 + return; 1.90 + } 1.91 + 1.92 + // All messages checked. Done. 1.93 + ++dcsIndex; 1.94 + if (dcsIndex >= allDCSs.length) { 1.95 + window.setTimeout(test_message_class_1, 0); 1.96 + } else { 1.97 + window.setTimeout(do_test.bind(null, dcsIndex), 0); 1.98 + } 1.99 + }; 1.100 + cursor.onerror = function onerror() { 1.101 + ok(false, "Can't fetch messages from SMS database"); 1.102 + }; 1.103 + }); 1.104 + 1.105 + let dcs = allDCSs[dcsIndex]; 1.106 + log(" Testing DCS " + dcs); 1.107 + let pdu = PDU_SMSC + PDU_FIRST_OCTET + PDU_SENDER + PDU_PID_NORMAL + 1.108 + dcs + PDU_TIMESTAMP + PDU_UDL + PDU_UD; 1.109 + let timeBeforeSend = Date.now(); 1.110 + sendSmsPduToEmulator(pdu); 1.111 + } 1.112 + 1.113 + log("Checking Message Class 0"); 1.114 + do_test(0); 1.115 +} 1.116 + 1.117 +function doTestMessageClassGeneric(allDCSs, messageClass, next) { 1.118 + function do_test(dcsIndex) { 1.119 + manager.addEventListener("received", function onReceived(event) { 1.120 + manager.removeEventListener("received", onReceived); 1.121 + 1.122 + // Make sure we can correctly receive the message 1.123 + checkMessage(event.message, null, null, messageClass); 1.124 + ok(event.message.timestamp >= timeBeforeSend, 1.125 + "Message's timestamp should be greater then the timetamp of sending"); 1.126 + ok(event.message.timestamp <= Date.now(), 1.127 + "Message's timestamp should be lesser than the timestamp of now"); 1.128 + is(event.message.sentTimestamp, SENT_TIMESTAMP, 1.129 + "Message's sentTimestamp should be equal to SENT_TIMESTAMP"); 1.130 + 1.131 + ++dcsIndex; 1.132 + if (dcsIndex >= allDCSs.length) { 1.133 + window.setTimeout(next, 0); 1.134 + } else { 1.135 + window.setTimeout(do_test.bind(null, dcsIndex), 0); 1.136 + } 1.137 + }); 1.138 + 1.139 + let dcs = allDCSs[dcsIndex]; 1.140 + log(" Testing DCS " + dcs); 1.141 + let pdu = PDU_SMSC + PDU_FIRST_OCTET + PDU_SENDER + PDU_PID_NORMAL + 1.142 + dcs + PDU_TIMESTAMP + PDU_UDL + PDU_UD; 1.143 + 1.144 + let timeBeforeSend = Date.now(); 1.145 + sendSmsPduToEmulator(pdu); 1.146 + } 1.147 + 1.148 + do_test(0); 1.149 +} 1.150 + 1.151 +function test_message_class_1() { 1.152 + let allDCSs = [ 1.153 + "11", // General Group: 00xx 1.154 + "51", // Automatica Deletion Group: 01xx 1.155 + "F1" // (no name) Group: 1111 1.156 + ]; 1.157 + 1.158 + log("Checking Message Class 1"); 1.159 + doTestMessageClassGeneric(allDCSs, "class-1", test_message_class_2); 1.160 +} 1.161 + 1.162 +function test_message_class_2() { 1.163 + let allDCSs = [ 1.164 + "12", // General Group: 00xx 1.165 + "52", // Automatica Deletion Group: 01xx 1.166 + "F2" // (no name) Group: 1111 1.167 + ]; 1.168 + 1.169 + let allPIDs = [ 1.170 + PDU_PID_NORMAL, 1.171 + PDU_PID_ANSI_136_R_DATA, 1.172 + PDU_PID_USIM_DATA_DOWNLOAD 1.173 + ]; 1.174 + 1.175 + function do_test_dcs(dcsIndex) { 1.176 + function do_test_pid(pidIndex) { 1.177 + function onReceived(event) { 1.178 + if (pidIndex == 0) { 1.179 + // Make sure we can correctly receive the message 1.180 + checkMessage(event.message, null, null, "class-2"); 1.181 + ok(event.message.timestamp >= timeBeforeSend, 1.182 + "Message's timestamp should be greater then the timetamp of sending"); 1.183 + ok(event.message.timestamp <= Date.now(), 1.184 + "Message's timestamp should be lesser than the timestamp of now"); 1.185 + is(event.message.sentTimestamp, SENT_TIMESTAMP, 1.186 + "Message's sentTimestamp should be equal to SENT_TIMESTAMP"); 1.187 + 1.188 + next(); 1.189 + return; 1.190 + } 1.191 + 1.192 + // TODO: Bug 792798 - B2G SMS: develop test cases for Message Class 2 1.193 + // Since we have "data download via SMS Point-to-Point" service enabled 1.194 + // but no working implementation in emulator SIM, all class 2 messages 1.195 + // bug normal ones should goto `dataDownloadViaSMSPP()` and we should 1.196 + // not receive the message in content page. 1.197 + ok(false, "SMS-PP messages shouldn't be sent to content"); 1.198 + } 1.199 + 1.200 + function next() { 1.201 + manager.removeEventListener("received", onReceived); 1.202 + 1.203 + ++pidIndex; 1.204 + if (pidIndex >= allPIDs.length) { 1.205 + ++dcsIndex; 1.206 + if (dcsIndex >= allDCSs.length) { 1.207 + window.setTimeout(test_message_class_3, 0); 1.208 + } else { 1.209 + window.setTimeout(do_test_dcs.bind(null, dcsIndex), 0); 1.210 + } 1.211 + } else { 1.212 + window.setTimeout(do_test_pid.bind(null, pidIndex), 0); 1.213 + } 1.214 + } 1.215 + 1.216 + manager.addEventListener("received", onReceived); 1.217 + 1.218 + if (pidIndex != 0) { 1.219 + // Wait for three seconds to ensure we don't receive the message. 1.220 + window.setTimeout(next, 3000); 1.221 + } 1.222 + 1.223 + let pid = allPIDs[pidIndex]; 1.224 + log(" Testing PID " + pid); 1.225 + 1.226 + let pdu = PDU_SMSC + PDU_FIRST_OCTET + PDU_SENDER + pid + dcs + 1.227 + PDU_TIMESTAMP + PDU_UDL + PDU_UD; 1.228 + let timeBeforeSend = Date.now(); 1.229 + sendSmsPduToEmulator(pdu); 1.230 + } 1.231 + 1.232 + let dcs = allDCSs[dcsIndex]; 1.233 + log(" Testing DCS " + dcs); 1.234 + 1.235 + do_test_pid(0); 1.236 + } 1.237 + 1.238 + log("Checking Message Class 2"); 1.239 + do_test_dcs(0); 1.240 +} 1.241 + 1.242 +function test_message_class_3() { 1.243 + let allDCSs = [ 1.244 + "13", // General Group: 00xx 1.245 + "53", // Automatica Deletion Group: 01xx 1.246 + "F3" // (no name) Group: 1111 1.247 + ]; 1.248 + 1.249 + log("Checking Message Class 3"); 1.250 + doTestMessageClassGeneric(allDCSs, "class-3", cleanUp); 1.251 +} 1.252 + 1.253 +function cleanUp() { 1.254 + if (pendingEmulatorCmdCount) { 1.255 + window.setTimeout(cleanUp, 100); 1.256 + return; 1.257 + } 1.258 + 1.259 + SpecialPowers.removePermission("sms", document); 1.260 + finish(); 1.261 +} 1.262 + 1.263 +test_message_class_0();