dom/mobilemessage/tests/marionette/test_outgoing.js

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

michael@0 1 /* Any copyright is dedicated to the Public Domain.
michael@0 2 * http://creativecommons.org/publicdomain/zero/1.0/ */
michael@0 3
michael@0 4 MARIONETTE_TIMEOUT = 60000;
michael@0 5
michael@0 6 SpecialPowers.setBoolPref("dom.sms.enabled", true);
michael@0 7 SpecialPowers.setBoolPref("dom.sms.strict7BitEncoding", false);
michael@0 8 SpecialPowers.setBoolPref("dom.sms.requestStatusReport", true);
michael@0 9 SpecialPowers.addPermission("sms", true, document);
michael@0 10
michael@0 11 const SENDER = "15555215554"; // the emulator's number
michael@0 12
michael@0 13 let manager = window.navigator.mozMobileMessage;
michael@0 14 ok(manager instanceof MozMobileMessageManager,
michael@0 15 "manager is instance of " + manager.constructor);
michael@0 16
michael@0 17 const SHORT_BODY = "Hello SMS world!";
michael@0 18 const LONG_BODY = "Let me not to the marriage of true minds\n"
michael@0 19 + "Admit impediments. Love is not love\n"
michael@0 20 + "Which alters when it alteration finds,\n"
michael@0 21 + "Or bends with the remover to remove:\n\n"
michael@0 22 + "O, no! it is an ever-fix`ed mark,\n"
michael@0 23 + "That looks on tempests and is never shaken;\n"
michael@0 24 + "It is the star to every wand'ring bark,\n"
michael@0 25 + "Whose worth's unknown, although his heighth be taken.\n\n"
michael@0 26 + "Love's not Time's fool, though rosy lips and cheeks\n"
michael@0 27 + "Within his bending sickle's compass come;\n"
michael@0 28 + "Love alters not with his brief hours and weeks,\n"
michael@0 29 + "But bears it out even to the edge of doom:\n\n"
michael@0 30 + "If this be error and upon me proved,\n"
michael@0 31 + "I never writ, nor no man ever loved. ";
michael@0 32
michael@0 33 function checkMessage(message, delivery, body) {
michael@0 34 ok(message, "message is valid");
michael@0 35 ok(message instanceof MozSmsMessage,
michael@0 36 "message is instanceof " + message.constructor);
michael@0 37
michael@0 38 ok(message.id, "message.id");
michael@0 39 ok(message.threadId, "message.threadId");
michael@0 40 is(message.delivery, delivery, "message.delivery");
michael@0 41 is(message.deliveryStatus, "pending", "message.deliveryStatus");
michael@0 42 is(message.sender, SENDER, "message.sender");
michael@0 43 ok(message.receiver, "message.receiver");
michael@0 44 is(message.body, body, "message.body");
michael@0 45 is(message.messageClass, "normal", "message.messageClass");
michael@0 46 is(message.read, true, "message.read");
michael@0 47
michael@0 48 // TODO: bug 788928 - add test cases for deliverysuccess event.
michael@0 49 is(message.deliveryTimestamp, 0, "deliveryTimestamp is 0");
michael@0 50
michael@0 51 // Test message.sentTimestamp.
michael@0 52 if (message.delivery == "sending") {
michael@0 53 ok(message.sentTimestamp == 0, "message.sentTimestamp should be 0");
michael@0 54 } else if (message.delivery == "sent") {
michael@0 55 ok(message.sentTimestamp != 0, "message.sentTimestamp shouldn't be 0");
michael@0 56 }
michael@0 57 }
michael@0 58
michael@0 59 function doSendMessageAndCheckSuccess(receivers, body, callback) {
michael@0 60 let options = {};
michael@0 61 let now = Date.now();
michael@0 62
michael@0 63 function done() {
michael@0 64 let rs = Array.isArray(receivers) ? receivers : [receivers];
michael@0 65 // Make sure we've send a message to each distinct receiver.
michael@0 66 for (let i = 0; i < rs.length; i++) {
michael@0 67 let opt = options[rs[i]];
michael@0 68 if (!(opt && opt.onSentCalled && opt.onRequestSuccessCalled)) {
michael@0 69 return;
michael@0 70 }
michael@0 71 }
michael@0 72
michael@0 73 manager.removeEventListener("sending", onSmsSending);
michael@0 74 manager.removeEventListener("sent", onSmsSent);
michael@0 75
michael@0 76 log("Done!");
michael@0 77 window.setTimeout(callback, 0);
michael@0 78 }
michael@0 79
michael@0 80 function checkSentMessage(message, mark) {
michael@0 81 checkMessage(message, "sent", body);
michael@0 82
michael@0 83 let receiver = message && message.receiver;
michael@0 84 if (!receiver) {
michael@0 85 ok(false, "message.receiver should be valid.");
michael@0 86 return;
michael@0 87 }
michael@0 88
michael@0 89 let opt = options[receiver];
michael@0 90 if (!opt) {
michael@0 91 ok(false, "onsent should be called after onsending.");
michael@0 92 return;
michael@0 93 }
michael@0 94
michael@0 95 let saved = opt.saved;
michael@0 96 is(message.id, saved.id, "message.id");
michael@0 97 is(message.receiver, saved.receiver, "message.receiver");
michael@0 98 is(message.body, saved.body, "message.body");
michael@0 99 is(message.timestamp, saved.timestamp, "message.timestamp");
michael@0 100
michael@0 101 opt[mark] = true;
michael@0 102
michael@0 103 done();
michael@0 104 }
michael@0 105
michael@0 106 function onRequestSuccess(event) {
michael@0 107 log("request.onsuccess event received.");
michael@0 108
michael@0 109 ok(event.target instanceof DOMRequest,
michael@0 110 "event.target is instanceof " + event.target.constructor);
michael@0 111 event.target.removeEventListener("success", onRequestSuccess);
michael@0 112
michael@0 113 checkSentMessage(event.target.result, "onRequestSuccessCalled");
michael@0 114 }
michael@0 115
michael@0 116 function onSmsSending(event) {
michael@0 117 log("onsending event received.");
michael@0 118
michael@0 119 // Bug 838542: following check throws an exception and fails this case.
michael@0 120 // ok(event instanceof MozSmsEvent,
michael@0 121 // "event is instanceof " + event.constructor)
michael@0 122 ok(event, "event is valid");
michael@0 123
michael@0 124 let message = event.message;
michael@0 125 checkMessage(message, "sending", body);
michael@0 126 // timestamp is in seconds.
michael@0 127 ok(Math.floor(message.timestamp / 1000) >= Math.floor(now / 1000),
michael@0 128 "sent timestamp is valid");
michael@0 129
michael@0 130 let receiver = message.receiver;
michael@0 131 if (!receiver) {
michael@0 132 return;
michael@0 133 }
michael@0 134
michael@0 135 if (options[receiver]) {
michael@0 136 ok(false, "duplicated onsending events found!");
michael@0 137 return;
michael@0 138 }
michael@0 139
michael@0 140 options[receiver] = {
michael@0 141 saved: message,
michael@0 142 onSentCalled: false,
michael@0 143 onRequestSuccessCalled: false
michael@0 144 };
michael@0 145 }
michael@0 146
michael@0 147 function onSmsSent(event) {
michael@0 148 log("onsent event received.");
michael@0 149
michael@0 150 // Bug 838542: following check throws an exception and fails this case.
michael@0 151 // ok(event instanceof MozSmsEvent,
michael@0 152 // "event is instanceof " + event.constructor)
michael@0 153 ok(event, "event is valid");
michael@0 154
michael@0 155 checkSentMessage(event.message, "onSentCalled");
michael@0 156 }
michael@0 157
michael@0 158 manager.addEventListener("sending", onSmsSending);
michael@0 159 manager.addEventListener("sent", onSmsSent);
michael@0 160
michael@0 161 let result = manager.send(receivers, body);
michael@0 162 is(Array.isArray(result), Array.isArray(receivers),
michael@0 163 "send() returns an array of requests if receivers is an array");
michael@0 164 if (Array.isArray(receivers)) {
michael@0 165 is(result.length, receivers.length, "returned array length");
michael@0 166 } else {
michael@0 167 result = [result];
michael@0 168 }
michael@0 169
michael@0 170 for (let i = 0; i < result.length; i++) {
michael@0 171 let request = result[i];
michael@0 172 ok(request instanceof DOMRequest,
michael@0 173 "request is instanceof " + request.constructor);
michael@0 174 request.addEventListener("success", onRequestSuccess);
michael@0 175 }
michael@0 176 }
michael@0 177
michael@0 178 function testSendMessage() {
michael@0 179 log("Testing sending message to one receiver:");
michael@0 180 doSendMessageAndCheckSuccess("1", SHORT_BODY, testSendMultipartMessage);
michael@0 181 }
michael@0 182
michael@0 183 function testSendMultipartMessage() {
michael@0 184 log("Testing sending message to one receiver:");
michael@0 185 doSendMessageAndCheckSuccess("1", LONG_BODY,
michael@0 186 testSendMessageToMultipleRecipients);
michael@0 187 }
michael@0 188
michael@0 189 function testSendMessageToMultipleRecipients() {
michael@0 190 log("Testing sending message to multiple receivers:");
michael@0 191 // TODO: bug 788928 - add test cases for ondelivered event.
michael@0 192 doSendMessageAndCheckSuccess(["1", "2"], SHORT_BODY, cleanUp);
michael@0 193 }
michael@0 194
michael@0 195 function cleanUp() {
michael@0 196 SpecialPowers.removePermission("sms", document);
michael@0 197 SpecialPowers.clearUserPref("dom.sms.enabled");
michael@0 198 SpecialPowers.clearUserPref("dom.sms.strict7BitEncoding");
michael@0 199 SpecialPowers.clearUserPref("dom.sms.requestStatusReport");
michael@0 200 finish();
michael@0 201 }
michael@0 202
michael@0 203 testSendMessage();

mercurial