зеркало из https://github.com/mozilla/gecko-dev.git
Bug 774621 - Part 5/5: test cases, r=rwood
This commit is contained in:
Родитель
68fc97c798
Коммит
32953d682d
|
@ -1,15 +1,13 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
MARIONETTE_TIMEOUT = 20000;
|
||||
MARIONETTE_TIMEOUT = 40000;
|
||||
|
||||
SpecialPowers.setBoolPref("dom.sms.enabled", true);
|
||||
SpecialPowers.setBoolPref("dom.sms.strict7BitEncoding", false);
|
||||
SpecialPowers.addPermission("sms", true, document);
|
||||
SpecialPowers.addPermission("mobileconnection", true, document);
|
||||
|
||||
let sms = window.navigator.mozSms;
|
||||
let receiver = "5555552368";
|
||||
const SHORT_BODY = "Hello SMS world!";
|
||||
const LONG_BODY = "Let me not to the marriage of true minds\n"
|
||||
+ "Admit impediments. Love is not love\n"
|
||||
|
@ -26,66 +24,67 @@ const LONG_BODY = "Let me not to the marriage of true minds\n"
|
|||
+ "If this be error and upon me proved,\n"
|
||||
+ "I never writ, nor no man ever loved. ";
|
||||
|
||||
function checkSentMessage(message, body, sentDate) {
|
||||
function checkMessage(message, delivery, body) {
|
||||
ok(message, "message is valid");
|
||||
ok(message instanceof MozSmsMessage,
|
||||
"message is instanceof " + message.constructor);
|
||||
|
||||
ok(message.id, "message.id is valid");
|
||||
is(message.delivery, "sent", "message.delivery");
|
||||
ok(message.id, "message.id");
|
||||
is(message.delivery, delivery, "message.delivery");
|
||||
is(message.deliveryStatus, "pending", "message.deliveryStatus");
|
||||
is(message.sender, null, "message.sender");
|
||||
is(message.receiver, receiver, "message.receiver");
|
||||
ok(message.receiver, "message.receiver");
|
||||
is(message.body, body, "message.body");
|
||||
is(message.messageClass, "normal", "messageClass");
|
||||
is(message.messageClass, "normal", "message.messageClass");
|
||||
ok(message.timestamp instanceof Date,
|
||||
"message.timestamp is instanceof " + message.timestamp.constructor);
|
||||
// SMSC timestamp is in seconds.
|
||||
ok(Math.floor(message.timestamp.getTime() / 1000) >= Math.floor(sentDate / 1000),
|
||||
"sent timestamp is valid");
|
||||
is(message.read, true, "message.read");
|
||||
}
|
||||
|
||||
let sentMessages = null;
|
||||
function checkSameSentMessage(message, body, now) {
|
||||
checkSentMessage(message, body, now);
|
||||
|
||||
let sentMessage = sentMessages[message.id];
|
||||
if (!sentMessage) {
|
||||
sentMessages[message.id] = message;
|
||||
return;
|
||||
}
|
||||
|
||||
// The two message instance should be exactly the same, but since we had
|
||||
// already checked most attributes of them, we only compare their
|
||||
// timestamps here.
|
||||
ok(sentMessage.timestamp.getTime() == message.timestamp.getTime(),
|
||||
"the messages got from onsent event and request result must be the same");
|
||||
}
|
||||
|
||||
function doSendMessageAndCheckSuccess(receivers, body, callback) {
|
||||
sentMessages = [];
|
||||
|
||||
let options = {};
|
||||
let now = Date.now();
|
||||
let count;
|
||||
|
||||
function done() {
|
||||
if (--count > 0) {
|
||||
let rs = Array.isArray(receivers) ? receivers : [receivers];
|
||||
// Make sure we've send a message to each distinct receiver.
|
||||
for (let i = 0; i < rs.length; i++) {
|
||||
let opt = options[rs[i]];
|
||||
if (!(opt && opt.onSentCalled && opt.onRequestSuccessCalled)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
sms.removeEventListener("sending", onSmsSending);
|
||||
sms.removeEventListener("sent", onSmsSent);
|
||||
|
||||
log("Done!");
|
||||
window.setTimeout(callback, 0);
|
||||
}
|
||||
|
||||
function checkSentMessage(message, mark) {
|
||||
checkMessage(message, "sent", body);
|
||||
|
||||
let receiver = message && message.receiver;
|
||||
if (!receiver) {
|
||||
ok(false, "message.receiver should be valid.");
|
||||
return;
|
||||
}
|
||||
|
||||
sms.removeEventListener("sent", onSmsSent);
|
||||
setTimeout(callback, 0);
|
||||
}
|
||||
let opt = options[receiver];
|
||||
if (!opt) {
|
||||
ok(false, "onsent should be called after onsending.");
|
||||
return;
|
||||
}
|
||||
|
||||
function onSmsSent(event) {
|
||||
log("SmsManager.onsent event received.");
|
||||
let saved = opt.saved;
|
||||
is(message.id, saved.id, "message.id");
|
||||
is(message.receiver, saved.receiver, "message.receiver");
|
||||
is(message.body, saved.body, "message.body");
|
||||
is(message.timestamp.getTime(), saved.timestamp.getTime(),
|
||||
"the messages got from onsent event and request result must be the same");
|
||||
|
||||
ok(event instanceof MozSmsEvent,
|
||||
"event is instanceof " + event.constructor);
|
||||
// Event listener is removed in done().
|
||||
|
||||
checkSameSentMessage(event.message, body, now);
|
||||
opt[mark] = true;
|
||||
|
||||
done();
|
||||
}
|
||||
|
@ -97,72 +96,89 @@ function doSendMessageAndCheckSuccess(receivers, body, callback) {
|
|||
"event.target is instanceof " + event.target.constructor);
|
||||
event.target.removeEventListener("success", onRequestSuccess);
|
||||
|
||||
checkSameSentMessage(event.target.result, body, now);
|
||||
|
||||
done();
|
||||
checkSentMessage(event.target.result, "onRequestSuccessCalled");
|
||||
}
|
||||
|
||||
function onSmsSending(event) {
|
||||
log("SmsManager.onsending event received.");
|
||||
|
||||
ok(event instanceof MozSmsEvent,
|
||||
"event is instanceof " + event.constructor);
|
||||
|
||||
let message = event.message;
|
||||
checkMessage(message, "sending", body);
|
||||
// SMSC timestamp is in seconds.
|
||||
ok(Math.floor(message.timestamp.getTime() / 1000) >= Math.floor(now / 1000),
|
||||
"sent timestamp is valid");
|
||||
|
||||
let receiver = message.receiver;
|
||||
if (!receiver) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (options[receiver]) {
|
||||
ok(false, "duplicated onsending events found!");
|
||||
return;
|
||||
}
|
||||
|
||||
options[receiver] = {
|
||||
saved: message,
|
||||
onSentCalled: false,
|
||||
onRequestSuccessCalled: false
|
||||
};
|
||||
}
|
||||
|
||||
function onSmsSent(event) {
|
||||
log("SmsManager.onsent event received.");
|
||||
|
||||
ok(event instanceof MozSmsEvent,
|
||||
"event is instanceof " + event.constructor);
|
||||
|
||||
checkSentMessage(event.message, "onSentCalled");
|
||||
}
|
||||
|
||||
sms.addEventListener("sending", onSmsSending);
|
||||
sms.addEventListener("sent", onSmsSent);
|
||||
|
||||
let result = sms.send(receivers, body);
|
||||
is(Array.isArray(result), Array.isArray(receivers),
|
||||
"send() returns an array of requests if receivers is an array");
|
||||
if (Array.isArray(receivers)) {
|
||||
ok(Array.isArray(result),
|
||||
"send() returns an array of requests if receivers is an array");
|
||||
is(result.length, receivers.length, "returned array length");
|
||||
|
||||
// `receivers` is an array, so we have N request.onsuccess and N sms.onsent.
|
||||
count = result.length * 2;
|
||||
|
||||
for (let i = 0; i < result.length; i++) {
|
||||
let request = result[i];
|
||||
ok(request instanceof MozSmsRequest,
|
||||
"request is instanceof " + request.constructor);
|
||||
request.addEventListener("success", onRequestSuccess);
|
||||
}
|
||||
|
||||
return;
|
||||
} else {
|
||||
result = [result];
|
||||
}
|
||||
|
||||
// `receivers` is not an array, so we have one request.onsuccess and one
|
||||
// sms.onsent.
|
||||
count = 2;
|
||||
|
||||
let request = result;
|
||||
ok(request instanceof MozSmsRequest,
|
||||
"request is instanceof " + request.constructor);
|
||||
request.addEventListener("success", onRequestSuccess);
|
||||
for (let i = 0; i < result.length; i++) {
|
||||
let request = result[i];
|
||||
ok(request instanceof MozSmsRequest,
|
||||
"request is instanceof " + request.constructor);
|
||||
request.addEventListener("success", onRequestSuccess);
|
||||
}
|
||||
}
|
||||
|
||||
function testSendMessage() {
|
||||
log("Testing sending message to one receiver:");
|
||||
doSendMessageAndCheckSuccess(receiver, SHORT_BODY, testSendMultipartMessage);
|
||||
doSendMessageAndCheckSuccess("1", SHORT_BODY, testSendMultipartMessage);
|
||||
}
|
||||
|
||||
function testSendMultipartMessage() {
|
||||
log("Testing sending message to one receiver:");
|
||||
doSendMessageAndCheckSuccess(receiver, LONG_BODY,
|
||||
doSendMessageAndCheckSuccess("1", LONG_BODY,
|
||||
testSendMessageToMultipleRecipients);
|
||||
}
|
||||
|
||||
function testSendMessageToMultipleRecipients() {
|
||||
log("Testing sending message to multiple receivers:");
|
||||
// TODO: bug 788928 - add test cases for nsIDOMSmsManager.ondelivered event
|
||||
doSendMessageAndCheckSuccess([receiver, receiver], SHORT_BODY, cleanUp);
|
||||
doSendMessageAndCheckSuccess(["1", "2"], SHORT_BODY, cleanUp);
|
||||
}
|
||||
|
||||
function cleanUp() {
|
||||
SpecialPowers.removePermission("sms", document);
|
||||
SpecialPowers.removePermission("mobileconnection", document);
|
||||
SpecialPowers.clearUserPref("dom.sms.enabled");
|
||||
SpecialPowers.clearUserPref("dom.sms.strict7BitEncoding");
|
||||
finish();
|
||||
}
|
||||
|
||||
waitFor(testSendMessage, function () {
|
||||
let connected = navigator.mozMobileConnection.voice.connected;
|
||||
if (!connected) {
|
||||
log("MobileConnection is not ready yet.");
|
||||
}
|
||||
return connected;
|
||||
});
|
||||
|
||||
testSendMessage();
|
||||
|
|
Загрузка…
Ссылка в новой задаче