1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/mobilemessage/tests/marionette/test_outgoing.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,203 @@ 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 +SpecialPowers.setBoolPref("dom.sms.enabled", true); 1.10 +SpecialPowers.setBoolPref("dom.sms.strict7BitEncoding", false); 1.11 +SpecialPowers.setBoolPref("dom.sms.requestStatusReport", true); 1.12 +SpecialPowers.addPermission("sms", true, document); 1.13 + 1.14 +const SENDER = "15555215554"; // the emulator's number 1.15 + 1.16 +let manager = window.navigator.mozMobileMessage; 1.17 +ok(manager instanceof MozMobileMessageManager, 1.18 + "manager is instance of " + manager.constructor); 1.19 + 1.20 +const SHORT_BODY = "Hello SMS world!"; 1.21 +const LONG_BODY = "Let me not to the marriage of true minds\n" 1.22 + + "Admit impediments. Love is not love\n" 1.23 + + "Which alters when it alteration finds,\n" 1.24 + + "Or bends with the remover to remove:\n\n" 1.25 + + "O, no! it is an ever-fix`ed mark,\n" 1.26 + + "That looks on tempests and is never shaken;\n" 1.27 + + "It is the star to every wand'ring bark,\n" 1.28 + + "Whose worth's unknown, although his heighth be taken.\n\n" 1.29 + + "Love's not Time's fool, though rosy lips and cheeks\n" 1.30 + + "Within his bending sickle's compass come;\n" 1.31 + + "Love alters not with his brief hours and weeks,\n" 1.32 + + "But bears it out even to the edge of doom:\n\n" 1.33 + + "If this be error and upon me proved,\n" 1.34 + + "I never writ, nor no man ever loved. "; 1.35 + 1.36 +function checkMessage(message, delivery, body) { 1.37 + ok(message, "message is valid"); 1.38 + ok(message instanceof MozSmsMessage, 1.39 + "message is instanceof " + message.constructor); 1.40 + 1.41 + ok(message.id, "message.id"); 1.42 + ok(message.threadId, "message.threadId"); 1.43 + is(message.delivery, delivery, "message.delivery"); 1.44 + is(message.deliveryStatus, "pending", "message.deliveryStatus"); 1.45 + is(message.sender, SENDER, "message.sender"); 1.46 + ok(message.receiver, "message.receiver"); 1.47 + is(message.body, body, "message.body"); 1.48 + is(message.messageClass, "normal", "message.messageClass"); 1.49 + is(message.read, true, "message.read"); 1.50 + 1.51 + // TODO: bug 788928 - add test cases for deliverysuccess event. 1.52 + is(message.deliveryTimestamp, 0, "deliveryTimestamp is 0"); 1.53 + 1.54 + // Test message.sentTimestamp. 1.55 + if (message.delivery == "sending") { 1.56 + ok(message.sentTimestamp == 0, "message.sentTimestamp should be 0"); 1.57 + } else if (message.delivery == "sent") { 1.58 + ok(message.sentTimestamp != 0, "message.sentTimestamp shouldn't be 0"); 1.59 + } 1.60 +} 1.61 + 1.62 +function doSendMessageAndCheckSuccess(receivers, body, callback) { 1.63 + let options = {}; 1.64 + let now = Date.now(); 1.65 + 1.66 + function done() { 1.67 + let rs = Array.isArray(receivers) ? receivers : [receivers]; 1.68 + // Make sure we've send a message to each distinct receiver. 1.69 + for (let i = 0; i < rs.length; i++) { 1.70 + let opt = options[rs[i]]; 1.71 + if (!(opt && opt.onSentCalled && opt.onRequestSuccessCalled)) { 1.72 + return; 1.73 + } 1.74 + } 1.75 + 1.76 + manager.removeEventListener("sending", onSmsSending); 1.77 + manager.removeEventListener("sent", onSmsSent); 1.78 + 1.79 + log("Done!"); 1.80 + window.setTimeout(callback, 0); 1.81 + } 1.82 + 1.83 + function checkSentMessage(message, mark) { 1.84 + checkMessage(message, "sent", body); 1.85 + 1.86 + let receiver = message && message.receiver; 1.87 + if (!receiver) { 1.88 + ok(false, "message.receiver should be valid."); 1.89 + return; 1.90 + } 1.91 + 1.92 + let opt = options[receiver]; 1.93 + if (!opt) { 1.94 + ok(false, "onsent should be called after onsending."); 1.95 + return; 1.96 + } 1.97 + 1.98 + let saved = opt.saved; 1.99 + is(message.id, saved.id, "message.id"); 1.100 + is(message.receiver, saved.receiver, "message.receiver"); 1.101 + is(message.body, saved.body, "message.body"); 1.102 + is(message.timestamp, saved.timestamp, "message.timestamp"); 1.103 + 1.104 + opt[mark] = true; 1.105 + 1.106 + done(); 1.107 + } 1.108 + 1.109 + function onRequestSuccess(event) { 1.110 + log("request.onsuccess event received."); 1.111 + 1.112 + ok(event.target instanceof DOMRequest, 1.113 + "event.target is instanceof " + event.target.constructor); 1.114 + event.target.removeEventListener("success", onRequestSuccess); 1.115 + 1.116 + checkSentMessage(event.target.result, "onRequestSuccessCalled"); 1.117 + } 1.118 + 1.119 + function onSmsSending(event) { 1.120 + log("onsending event received."); 1.121 + 1.122 + // Bug 838542: following check throws an exception and fails this case. 1.123 + // ok(event instanceof MozSmsEvent, 1.124 + // "event is instanceof " + event.constructor) 1.125 + ok(event, "event is valid"); 1.126 + 1.127 + let message = event.message; 1.128 + checkMessage(message, "sending", body); 1.129 + // timestamp is in seconds. 1.130 + ok(Math.floor(message.timestamp / 1000) >= Math.floor(now / 1000), 1.131 + "sent timestamp is valid"); 1.132 + 1.133 + let receiver = message.receiver; 1.134 + if (!receiver) { 1.135 + return; 1.136 + } 1.137 + 1.138 + if (options[receiver]) { 1.139 + ok(false, "duplicated onsending events found!"); 1.140 + return; 1.141 + } 1.142 + 1.143 + options[receiver] = { 1.144 + saved: message, 1.145 + onSentCalled: false, 1.146 + onRequestSuccessCalled: false 1.147 + }; 1.148 + } 1.149 + 1.150 + function onSmsSent(event) { 1.151 + log("onsent event received."); 1.152 + 1.153 + // Bug 838542: following check throws an exception and fails this case. 1.154 + // ok(event instanceof MozSmsEvent, 1.155 + // "event is instanceof " + event.constructor) 1.156 + ok(event, "event is valid"); 1.157 + 1.158 + checkSentMessage(event.message, "onSentCalled"); 1.159 + } 1.160 + 1.161 + manager.addEventListener("sending", onSmsSending); 1.162 + manager.addEventListener("sent", onSmsSent); 1.163 + 1.164 + let result = manager.send(receivers, body); 1.165 + is(Array.isArray(result), Array.isArray(receivers), 1.166 + "send() returns an array of requests if receivers is an array"); 1.167 + if (Array.isArray(receivers)) { 1.168 + is(result.length, receivers.length, "returned array length"); 1.169 + } else { 1.170 + result = [result]; 1.171 + } 1.172 + 1.173 + for (let i = 0; i < result.length; i++) { 1.174 + let request = result[i]; 1.175 + ok(request instanceof DOMRequest, 1.176 + "request is instanceof " + request.constructor); 1.177 + request.addEventListener("success", onRequestSuccess); 1.178 + } 1.179 +} 1.180 + 1.181 +function testSendMessage() { 1.182 + log("Testing sending message to one receiver:"); 1.183 + doSendMessageAndCheckSuccess("1", SHORT_BODY, testSendMultipartMessage); 1.184 +} 1.185 + 1.186 +function testSendMultipartMessage() { 1.187 + log("Testing sending message to one receiver:"); 1.188 + doSendMessageAndCheckSuccess("1", LONG_BODY, 1.189 + testSendMessageToMultipleRecipients); 1.190 +} 1.191 + 1.192 +function testSendMessageToMultipleRecipients() { 1.193 + log("Testing sending message to multiple receivers:"); 1.194 + // TODO: bug 788928 - add test cases for ondelivered event. 1.195 + doSendMessageAndCheckSuccess(["1", "2"], SHORT_BODY, cleanUp); 1.196 +} 1.197 + 1.198 +function cleanUp() { 1.199 + SpecialPowers.removePermission("sms", document); 1.200 + SpecialPowers.clearUserPref("dom.sms.enabled"); 1.201 + SpecialPowers.clearUserPref("dom.sms.strict7BitEncoding"); 1.202 + SpecialPowers.clearUserPref("dom.sms.requestStatusReport"); 1.203 + finish(); 1.204 +} 1.205 + 1.206 +testSendMessage();