зеркало из https://github.com/mozilla/gecko-dev.git
Bug 993817: convert mobilemssage marionette test cases to Promise. r=gene
This commit is contained in:
Родитель
abc8270f73
Коммит
2fd1cb34af
|
@ -5,6 +5,29 @@ const {Cc: Cc, Ci: Ci, Cr: Cr, Cu: Cu} = SpecialPowers;
|
|||
|
||||
let Promise = Cu.import("resource://gre/modules/Promise.jsm").Promise;
|
||||
|
||||
/**
|
||||
* Push a list of preference settings. Never reject.
|
||||
*
|
||||
* Fulfill params: (none)
|
||||
*
|
||||
* @param aPrefs
|
||||
* An JS object. For example:
|
||||
*
|
||||
* {'set': [['foo.bar', 2], ['magic.pref', 'baz']],
|
||||
* 'clear': [['clear.this'], ['also.this']] };
|
||||
*
|
||||
* @return A deferred promise.
|
||||
*/
|
||||
function pushPrefEnv(aPrefs) {
|
||||
let deferred = Promise.defer();
|
||||
|
||||
SpecialPowers.pushPrefEnv(aPrefs, function() {
|
||||
deferred.resolve();
|
||||
});
|
||||
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
/**
|
||||
* Push required permissions and test if |navigator.mozMobileMessage| exists.
|
||||
* Resolve if it does, reject otherwise.
|
||||
|
@ -54,16 +77,24 @@ function ensureMobileMessage() {
|
|||
*
|
||||
* @param aEventName
|
||||
* A string event name.
|
||||
* @param aMatchFunc [optional]
|
||||
* An additional callback function to match the interested event
|
||||
* before removing the listener and going to resolve the promise.
|
||||
*
|
||||
* @return A deferred promise.
|
||||
*/
|
||||
function waitForManagerEvent(aEventName) {
|
||||
function waitForManagerEvent(aEventName, aMatchFunc) {
|
||||
let deferred = Promise.defer();
|
||||
|
||||
manager.addEventListener(aEventName, function onevent(aEvent) {
|
||||
manager.removeEventListener(aEventName, onevent);
|
||||
if (aMatchFunc && !aMatchFunc(aEvent)) {
|
||||
ok(true, "MobileMessageManager event '" + aEventName + "' got" +
|
||||
" but is not interested.");
|
||||
return;
|
||||
}
|
||||
|
||||
ok(true, "MobileMessageManager event '" + aEventName + "' got.");
|
||||
manager.removeEventListener(aEventName, onevent);
|
||||
deferred.resolve(aEvent);
|
||||
});
|
||||
|
||||
|
@ -184,6 +215,24 @@ function sendMmsWithFailure(aMmsParameters, aSendParameters) {
|
|||
error: aResults[1] }; });
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve message by message id.
|
||||
*
|
||||
* Fulfill params: MozSmsMessage
|
||||
* Reject params:
|
||||
* event -- a DOMEvent
|
||||
*
|
||||
* @param aId
|
||||
* A numeric message id.
|
||||
*
|
||||
* @return A deferred promise.
|
||||
*/
|
||||
function getMessage(aId) {
|
||||
let request = manager.getMessage(aId);
|
||||
return wrapDomRequestAsPromise(request)
|
||||
.then((aEvent) => { return aEvent.target.result; });
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve messages from database.
|
||||
*
|
||||
|
@ -396,6 +445,11 @@ function runEmulatorCmdSafe(aCommand) {
|
|||
* Reject params:
|
||||
* result -- an array of emulator response lines.
|
||||
*
|
||||
* @param aFrom
|
||||
* A string-typed from address.
|
||||
* @param aText
|
||||
* A string-typed message body.
|
||||
*
|
||||
* @return A deferred promise.
|
||||
*/
|
||||
function sendTextSmsToEmulator(aFrom, aText) {
|
||||
|
@ -403,6 +457,26 @@ function sendTextSmsToEmulator(aFrom, aText) {
|
|||
return runEmulatorCmdSafe(command);
|
||||
}
|
||||
|
||||
/**
|
||||
* Send simple text SMS to emulator and wait for a received event.
|
||||
*
|
||||
* Fulfill params: MozSmsMessage
|
||||
* Reject params: (none)
|
||||
*
|
||||
* @param aFrom
|
||||
* A string-typed from address.
|
||||
* @param aText
|
||||
* A string-typed message body.
|
||||
*
|
||||
* @return A deferred promise.
|
||||
*/
|
||||
function sendTextSmsToEmulatorAndWait(aFrom, aText) {
|
||||
let promises = [];
|
||||
promises.push(waitForManagerEvent("received"));
|
||||
promises.push(sendTextSmsToEmulator(aFrom, aText));
|
||||
return Promise.all(promises).then(aResults => aResults[0].message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Send raw SMS TPDU to emulator.
|
||||
*
|
||||
|
@ -464,16 +538,35 @@ function messagesToIds(aMessages) {
|
|||
return ids;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convenient function to compare two SMS messages.
|
||||
*/
|
||||
function compareSmsMessage(aFrom, aTo) {
|
||||
const FIELDS = ["id", "threadId", "iccId", "body", "delivery",
|
||||
"deliveryStatus", "read", "receiver", "sender",
|
||||
"messageClass", "timestamp", "deliveryTimestamp",
|
||||
"sentTimestamp"];
|
||||
|
||||
for (let field of FIELDS) {
|
||||
is(aFrom[field], aTo[field], "message." + field);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Flush permission settings and call |finish()|.
|
||||
*/
|
||||
function cleanUp() {
|
||||
ok(true, ":: CLEANING UP ::");
|
||||
|
||||
waitFor(function() {
|
||||
SpecialPowers.flushPermissions(function() {
|
||||
// Use ok here so that we have at least one test run.
|
||||
ok(true, "permissions flushed");
|
||||
|
||||
finish();
|
||||
SpecialPowers.flushPrefEnv(function() {
|
||||
ok(true, "preferences flushed");
|
||||
|
||||
finish();
|
||||
})
|
||||
});
|
||||
}, function() {
|
||||
return pendingEmulatorCmdCount === 0;
|
||||
|
|
|
@ -12,10 +12,8 @@ qemu = true
|
|||
[test_outgoing_delete.js]
|
||||
[test_getmessage.js]
|
||||
[test_getmessage_notfound.js]
|
||||
[test_incoming_multipart.js]
|
||||
[test_getmessages.js]
|
||||
[test_filter_date.js]
|
||||
[test_filter_date_notfound.js]
|
||||
[test_filter_number.js]
|
||||
[test_filter_received.js]
|
||||
[test_filter_sent.js]
|
||||
|
|
|
@ -2,22 +2,10 @@
|
|||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
MARIONETTE_TIMEOUT = 60000;
|
||||
MARIONETTE_HEAD_JS = 'head.js';
|
||||
|
||||
const SELF = "5554";
|
||||
|
||||
SpecialPowers.setBoolPref("dom.sms.enabled", true);
|
||||
SpecialPowers.addPermission("sms", true, document);
|
||||
|
||||
function cleanUp() {
|
||||
SpecialPowers.removePermission("sms", document);
|
||||
SpecialPowers.clearUserPref("dom.sms.enabled");
|
||||
finish();
|
||||
}
|
||||
|
||||
let manager = window.navigator.mozMobileMessage;
|
||||
ok(manager instanceof MozMobileMessageManager,
|
||||
"manager is instance of " + manager.constructor);
|
||||
|
||||
function randomString16() {
|
||||
return Math.random().toString(36).substr(2, 16);
|
||||
}
|
||||
|
@ -26,30 +14,21 @@ function times(str, n) {
|
|||
return (new Array(n + 1)).join(str);
|
||||
}
|
||||
|
||||
function repeat(func, array, oncomplete) {
|
||||
(function do_call(index) {
|
||||
let next = index < (array.length - 1) ? do_call.bind(null, index + 1) : oncomplete;
|
||||
func.apply(null, [array[index], next]);
|
||||
})(0);
|
||||
function test(aBody) {
|
||||
let promises = [];
|
||||
|
||||
promises.push(waitForManagerEvent('received')
|
||||
.then(function(aEvent) {
|
||||
let message = aEvent.message;
|
||||
is(message.body, aBody, "message.body");
|
||||
}));
|
||||
|
||||
promises.push(sendSmsWithSuccess(SELF, aBody));
|
||||
|
||||
return Promise.all(promises);
|
||||
}
|
||||
|
||||
function doTest(body, callback) {
|
||||
manager.addEventListener("received", function onReceived(event) {
|
||||
event.target.removeEventListener(event.type, arguments.callee);
|
||||
|
||||
let message = event.message;
|
||||
is(message.body, body, "message.body");
|
||||
|
||||
window.setTimeout(callback, 0);
|
||||
});
|
||||
|
||||
let request = manager.send(SELF, body);
|
||||
request.onerror = function onerror() {
|
||||
ok(false, "failed to send message '" + body + "' to '" + SELF + "'");
|
||||
};
|
||||
}
|
||||
|
||||
repeat(doTest, [
|
||||
const TEST_DATA = [
|
||||
// Random alphanumeric string of 16 characters.
|
||||
randomString16(),
|
||||
// Long long text message for multipart messages.
|
||||
|
@ -75,4 +54,18 @@ repeat(doTest, [
|
|||
// 2) problem in decoding strings encoded with GSM 7Bit Alphabets and
|
||||
// containing characters on extension tables.
|
||||
"\u20ac****",
|
||||
], cleanUp);
|
||||
];
|
||||
|
||||
startTestBase(function testCaseMain() {
|
||||
return ensureMobileMessage()
|
||||
.then(function() {
|
||||
let promise = Promise.resolve();
|
||||
|
||||
for (let i = 0; i < TEST_DATA.length; i++) {
|
||||
let text = TEST_DATA[i];
|
||||
promise = promise.then(() => test(text));
|
||||
}
|
||||
|
||||
return promise;
|
||||
});
|
||||
});
|
||||
|
|
|
@ -2,193 +2,118 @@
|
|||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
MARIONETTE_TIMEOUT = 60000;
|
||||
MARIONETTE_HEAD_JS = 'head.js';
|
||||
|
||||
SpecialPowers.addPermission("sms", true, document);
|
||||
SpecialPowers.setBoolPref("dom.sms.enabled", true);
|
||||
|
||||
let manager = window.navigator.mozMobileMessage;
|
||||
let numberMsgs = 10;
|
||||
let smsList = new Array();
|
||||
|
||||
function verifyInitialState() {
|
||||
log("Verifying initial state.");
|
||||
ok(manager instanceof MozMobileMessageManager,
|
||||
"manager is instance of " + manager.constructor);
|
||||
// Ensure test is starting clean with no existing sms messages
|
||||
deleteAllMsgs(simulateIncomingSms);
|
||||
}
|
||||
|
||||
function deleteAllMsgs(nextFunction) {
|
||||
let msgList = new Array();
|
||||
let filter = new MozSmsFilter;
|
||||
|
||||
let cursor = manager.getMessages(filter, false);
|
||||
ok(cursor instanceof DOMCursor,
|
||||
"cursor is instanceof " + cursor.constructor);
|
||||
|
||||
cursor.onsuccess = function(event) {
|
||||
// Check if message was found
|
||||
if (cursor.result) {
|
||||
msgList.push(cursor.result.id);
|
||||
// Now get next message in the list
|
||||
cursor.continue();
|
||||
} else {
|
||||
// No (more) messages found
|
||||
if (msgList.length) {
|
||||
log("Found " + msgList.length + " SMS messages to delete.");
|
||||
deleteMsgs(msgList, nextFunction);
|
||||
} else {
|
||||
log("No SMS messages found.");
|
||||
nextFunction();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
cursor.onerror = function(event) {
|
||||
log("Received 'onerror' event.");
|
||||
ok(event.target.error, "domerror obj");
|
||||
log("manager.getMessages error: " + event.target.error.name);
|
||||
ok(false,"Could not get SMS messages");
|
||||
cleanUp();
|
||||
};
|
||||
}
|
||||
|
||||
function deleteMsgs(msgList, nextFunction) {
|
||||
let smsId = msgList.shift();
|
||||
|
||||
log("Deleting SMS (id: " + smsId + ").");
|
||||
let request = manager.delete(smsId);
|
||||
ok(request instanceof DOMRequest,
|
||||
"request is instanceof " + request.constructor);
|
||||
|
||||
request.onsuccess = function(event) {
|
||||
log("Received 'onsuccess' smsrequest event.");
|
||||
if (event.target.result) {
|
||||
// Message deleted, continue until none are left
|
||||
if (msgList.length) {
|
||||
deleteMsgs(msgList, nextFunction);
|
||||
} else {
|
||||
log("Finished deleting SMS messages.");
|
||||
nextFunction();
|
||||
}
|
||||
} else {
|
||||
log("SMS delete failed.");
|
||||
ok(false,"manager.delete request returned false");
|
||||
cleanUp();
|
||||
}
|
||||
};
|
||||
|
||||
request.onerror = function(event) {
|
||||
log("Received 'onerror' smsrequest event.");
|
||||
ok(event.target.error, "domerror obj");
|
||||
ok(false, "manager.delete request returned unexpected error: "
|
||||
+ event.target.error.name );
|
||||
cleanUp();
|
||||
};
|
||||
}
|
||||
const NUMBER_OF_MESSAGES = 10;
|
||||
const REMOTE = "5552229797";
|
||||
|
||||
function simulateIncomingSms() {
|
||||
let text = "Incoming SMS number " + (smsList.length + 1);
|
||||
let remoteNumber = "5552229797";
|
||||
let promise = Promise.resolve();
|
||||
let messages = [];
|
||||
|
||||
log("Simulating incoming SMS number " + (smsList.length + 1) + " of "
|
||||
+ numberMsgs + ".");
|
||||
|
||||
// Simulate incoming sms sent from remoteNumber to our emulator
|
||||
rcvdEmulatorCallback = false;
|
||||
runEmulatorCmd("sms send " + remoteNumber + " " + text, function(result) {
|
||||
is(result[0], "OK", "emulator callback");
|
||||
rcvdEmulatorCallback = true;
|
||||
});
|
||||
}
|
||||
|
||||
// Callback for incoming sms
|
||||
manager.onreceived = function onreceived(event) {
|
||||
log("Received 'onreceived' sms event.");
|
||||
let incomingSms = event.message;
|
||||
log("Received SMS (id: " + incomingSms.id + ").");
|
||||
|
||||
smsList.push(incomingSms);
|
||||
|
||||
// Wait for emulator to catch up before continuing
|
||||
waitFor(nextRep,function() {
|
||||
return(rcvdEmulatorCallback);
|
||||
});
|
||||
};
|
||||
|
||||
function nextRep() {
|
||||
if (smsList.length < numberMsgs) {
|
||||
simulateIncomingSms();
|
||||
} else {
|
||||
// Now test the filter
|
||||
getMsgs();
|
||||
for (let i = 0; i < NUMBER_OF_MESSAGES; i++) {
|
||||
let text = "Incoming SMS number " + i;
|
||||
promise = promise.then(() => sendTextSmsToEmulatorAndWait(REMOTE, text))
|
||||
.then(function(aMessage) {
|
||||
messages.push(aMessage);
|
||||
return messages;
|
||||
});
|
||||
}
|
||||
|
||||
return promise;
|
||||
}
|
||||
|
||||
function getMsgs() {
|
||||
var filter = new MozSmsFilter();
|
||||
let foundSmsList = new Array();
|
||||
function test(aStartDate, aEndDate, aExpectedMessages) {
|
||||
let filter = new MozSmsFilter();
|
||||
if (aStartDate) {
|
||||
filter.startDate = aStartDate;
|
||||
}
|
||||
if (aEndDate) {
|
||||
filter.endDate = aEndDate;
|
||||
}
|
||||
|
||||
// Set filter for start date yesterday and end date tomorrow
|
||||
let yesterday = new Date(Date.now() - 86400000); // 24 hours = 86400000 ms
|
||||
let tomorrow = new Date(Date.now() + 86400000);
|
||||
filter.startDate = yesterday;
|
||||
filter.endDate = tomorrow;
|
||||
return getMessages(filter, false)
|
||||
.then(function(aFoundMessages) {
|
||||
log(" Found " + aFoundMessages.length + " messages, expected " +
|
||||
aExpectedMessages.length);
|
||||
is(aFoundMessages.length, aExpectedMessages.length, "aFoundMessages.length");
|
||||
});
|
||||
}
|
||||
|
||||
log("Getting SMS messages with dates between " + yesterday + " and "
|
||||
+ tomorrow +".");
|
||||
let cursor = manager.getMessages(filter, false);
|
||||
ok(cursor instanceof DOMCursor,
|
||||
"cursor is instanceof " + cursor.constructor);
|
||||
|
||||
cursor.onsuccess = function(event) {
|
||||
log("Received 'onsuccess' event.");
|
||||
|
||||
if (cursor.result) {
|
||||
// Another message found
|
||||
log("Got SMS (id: " + cursor.result.id + ").");
|
||||
// Store found message
|
||||
foundSmsList.push(cursor.result);
|
||||
// Now get next message in the list
|
||||
cursor.continue();
|
||||
} else {
|
||||
// No more messages; ensure correct number found
|
||||
if (foundSmsList.length == smsList.length) {
|
||||
log("SMS getMessages returned " + foundSmsList.length +
|
||||
" messages as expected.");
|
||||
verifyFoundMsgs(foundSmsList);
|
||||
} else {
|
||||
log("SMS getMessages returned " + foundSmsList.length +
|
||||
" messages, but expected " + smsList.length + ".");
|
||||
ok(false, "Incorrect number of messages returned by manager.getMessages");
|
||||
deleteAllMsgs(cleanUp);
|
||||
}
|
||||
function reduceMessages(aMessages, aCompare) {
|
||||
return aMessages.reduce(function(results, message) {
|
||||
if (aCompare(message.timestamp)) {
|
||||
results.push(message);
|
||||
}
|
||||
};
|
||||
|
||||
cursor.onerror = function(event) {
|
||||
log("Received 'onerror' event.");
|
||||
ok(event.target.error, "domerror obj");
|
||||
log("manager.getMessages error: " + event.target.error.name);
|
||||
ok(false,"Could not get SMS messages");
|
||||
cleanUp();
|
||||
};
|
||||
return results;
|
||||
}, []);
|
||||
}
|
||||
|
||||
function verifyFoundMsgs(foundSmsList) {
|
||||
for (var x = 0; x < foundSmsList.length; x++) {
|
||||
is(foundSmsList[x].id, smsList[x].id, "id");
|
||||
is(foundSmsList[x].timestamp, smsList[x].timestamp, "timestmap");
|
||||
}
|
||||
deleteAllMsgs(cleanUp);
|
||||
}
|
||||
startTestCommon(function testCaseMain() {
|
||||
let startTime, endTime;
|
||||
let allMessages;
|
||||
|
||||
function cleanUp() {
|
||||
manager.onreceived = null;
|
||||
SpecialPowers.removePermission("sms", document);
|
||||
SpecialPowers.clearUserPref("dom.sms.enabled");
|
||||
finish();
|
||||
}
|
||||
return simulateIncomingSms()
|
||||
.then((aMessages) => {
|
||||
allMessages = aMessages;
|
||||
startTime = aMessages[0].timestamp;
|
||||
endTime = aMessages[NUMBER_OF_MESSAGES - 1].timestamp;
|
||||
log("startTime: " + startTime + ", endTime: " + endTime);
|
||||
})
|
||||
|
||||
// Start the test
|
||||
verifyInitialState();
|
||||
// Should return all messages.
|
||||
//
|
||||
.then(() => log("Testing [startTime, )"))
|
||||
.then(() => test(new Date(startTime), null, allMessages))
|
||||
.then(() => log("Testing (, endTime]"))
|
||||
.then(() => test(null, new Date(endTime), allMessages))
|
||||
.then(() => log("Testing [startTime, endTime]"))
|
||||
.then(() => test(new Date(startTime), new Date(endTime), allMessages))
|
||||
|
||||
// Should return only messages with timestamp <= startTime.
|
||||
//
|
||||
.then(() => log("Testing [, startTime)"))
|
||||
.then(() => test(null, new Date(startTime),
|
||||
reduceMessages(allMessages,
|
||||
(function(a, b) {
|
||||
return b <= a;
|
||||
}).bind(null, startTime))))
|
||||
|
||||
// Should return only messages with timestamp <= startTime + 1.
|
||||
//
|
||||
.then(() => log("Testing [, startTime + 1)"))
|
||||
.then(() => test(null, new Date(startTime + 1),
|
||||
reduceMessages(allMessages,
|
||||
(function(a, b) {
|
||||
return b <= a;
|
||||
}).bind(null, startTime + 1))))
|
||||
|
||||
// Should return only messages with timestamp >= endTime.
|
||||
//
|
||||
.then(() => log("Testing [endTime, )"))
|
||||
.then(() => test(new Date(endTime), null,
|
||||
reduceMessages(allMessages,
|
||||
(function(a, b) {
|
||||
return b >= a;
|
||||
}).bind(null, endTime))))
|
||||
|
||||
// Should return only messages with timestamp >= endTime - 1.
|
||||
//
|
||||
.then(() => log("Testing [endTime - 1, )"))
|
||||
.then(() => test(new Date(endTime - 1), null,
|
||||
reduceMessages(allMessages,
|
||||
(function(a, b) {
|
||||
return b >= a;
|
||||
}).bind(null, endTime - 1))))
|
||||
|
||||
// Should return none.
|
||||
//
|
||||
.then(() => log("Testing [endTime + 1, )"))
|
||||
.then(() => test(new Date(endTime + 1), null, []))
|
||||
.then(() => log("Testing [endTime + 1, endTime + 86400000]"))
|
||||
.then(() => test(new Date(endTime + 1), new Date(endTime + 86400000), []))
|
||||
.then(() => log("Testing (, startTime - 1]"))
|
||||
.then(() => test(null, new Date(startTime - 1), []))
|
||||
.then(() => log("Testing [startTime - 86400000, startTime - 1]"))
|
||||
.then(() => test(new Date(startTime - 86400000), new Date(startTime - 1), []));
|
||||
});
|
||||
|
|
|
@ -1,176 +0,0 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
MARIONETTE_TIMEOUT = 60000;
|
||||
|
||||
SpecialPowers.addPermission("sms", true, document);
|
||||
SpecialPowers.setBoolPref("dom.sms.enabled", true);
|
||||
|
||||
let manager = window.navigator.mozMobileMessage;
|
||||
let numberMsgs = 10;
|
||||
let smsList = new Array();
|
||||
|
||||
function verifyInitialState() {
|
||||
log("Verifying initial state.");
|
||||
ok(manager instanceof MozMobileMessageManager,
|
||||
"manager is instance of " + manager.constructor);
|
||||
// Ensure test is starting clean with no existing sms messages
|
||||
deleteAllMsgs(simulateIncomingSms);
|
||||
}
|
||||
|
||||
function deleteAllMsgs(nextFunction) {
|
||||
let msgList = new Array();
|
||||
let filter = new MozSmsFilter;
|
||||
|
||||
let cursor = manager.getMessages(filter, false);
|
||||
ok(cursor instanceof DOMCursor,
|
||||
"cursor is instanceof " + cursor.constructor);
|
||||
|
||||
cursor.onsuccess = function(event) {
|
||||
// Check if message was found
|
||||
if (cursor.result) {
|
||||
msgList.push(cursor.result.id);
|
||||
// Now get next message in the list
|
||||
cursor.continue();
|
||||
} else {
|
||||
// No (more) messages found
|
||||
if (msgList.length) {
|
||||
log("Found " + msgList.length + " SMS messages to delete.");
|
||||
deleteMsgs(msgList, nextFunction);
|
||||
} else {
|
||||
log("No SMS messages found.");
|
||||
nextFunction();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
cursor.onerror = function(event) {
|
||||
log("Received 'onerror' event.");
|
||||
ok(event.target.error, "domerror obj");
|
||||
log("manager.getMessages error: " + event.target.error.name);
|
||||
ok(false,"Could not get SMS messages");
|
||||
cleanUp();
|
||||
};
|
||||
}
|
||||
|
||||
function deleteMsgs(msgList, nextFunction) {
|
||||
let smsId = msgList.shift();
|
||||
|
||||
log("Deleting SMS (id: " + smsId + ").");
|
||||
let request = manager.delete(smsId);
|
||||
ok(request instanceof DOMRequest,
|
||||
"request is instanceof " + request.constructor);
|
||||
|
||||
request.onsuccess = function(event) {
|
||||
log("Received 'onsuccess' smsrequest event.");
|
||||
if (event.target.result) {
|
||||
// Message deleted, continue until none are left
|
||||
if (msgList.length) {
|
||||
deleteMsgs(msgList, nextFunction);
|
||||
} else {
|
||||
log("Finished deleting SMS messages.");
|
||||
nextFunction();
|
||||
}
|
||||
} else {
|
||||
log("SMS delete failed.");
|
||||
ok(false,"manager.delete request returned false");
|
||||
cleanUp();
|
||||
}
|
||||
};
|
||||
|
||||
request.onerror = function(event) {
|
||||
log("Received 'onerror' smsrequest event.");
|
||||
ok(event.target.error, "domerror obj");
|
||||
ok(false, "manager.delete request returned unexpected error: "
|
||||
+ event.target.error.name );
|
||||
cleanUp();
|
||||
};
|
||||
}
|
||||
|
||||
function simulateIncomingSms() {
|
||||
let text = "Incoming SMS number " + (smsList.length + 1);
|
||||
let remoteNumber = "5552229797";
|
||||
|
||||
log("Simulating incoming SMS number " + (smsList.length + 1) + " of "
|
||||
+ numberMsgs + ".");
|
||||
|
||||
// Simulate incoming sms sent from remoteNumber to our emulator
|
||||
rcvdEmulatorCallback = false;
|
||||
runEmulatorCmd("sms send " + remoteNumber + " " + text, function(result) {
|
||||
is(result[0], "OK", "emulator callback");
|
||||
rcvdEmulatorCallback = true;
|
||||
});
|
||||
}
|
||||
|
||||
// Callback for incoming sms
|
||||
manager.onreceived = function onreceived(event) {
|
||||
log("Received 'onreceived' sms event.");
|
||||
let incomingSms = event.message;
|
||||
log("Received SMS (id: " + incomingSms.id + ").");
|
||||
|
||||
smsList.push(incomingSms);
|
||||
|
||||
// Wait for emulator to catch up before continuing
|
||||
waitFor(nextRep,function() {
|
||||
return(rcvdEmulatorCallback);
|
||||
});
|
||||
};
|
||||
|
||||
function nextRep() {
|
||||
if (smsList.length < numberMsgs) {
|
||||
simulateIncomingSms();
|
||||
} else {
|
||||
// Now test the filter
|
||||
getMsgs();
|
||||
}
|
||||
}
|
||||
|
||||
function getMsgs() {
|
||||
var filter = new MozSmsFilter();
|
||||
let foundSmsList = new Array();
|
||||
|
||||
// Set filter for start date 2 days ago and end date yesterday (so 0 found)
|
||||
let yesterday = new Date(Date.now() - 86400000); // 24 hours = 86400000 ms
|
||||
let twoDaysAgo = new Date(Date.now() - 172800000);
|
||||
filter.startDate = twoDaysAgo;
|
||||
filter.endDate = yesterday;
|
||||
|
||||
log("Getting SMS messages with dates between " + twoDaysAgo + " and "
|
||||
+ yesterday +".");
|
||||
let cursor = manager.getMessages(filter, false);
|
||||
ok(cursor instanceof DOMCursor,
|
||||
"cursor is instanceof " + cursor.constructor);
|
||||
|
||||
cursor.onsuccess = function(event) {
|
||||
log("Received 'onsuccess' event.");
|
||||
|
||||
if (cursor.result) {
|
||||
// Another message found
|
||||
log("Got SMS (id: " + cursor.result.id + ").");
|
||||
log("SMS getMessages returned a message but should not have.");
|
||||
ok(false, "SMS date filter did not work");
|
||||
} else {
|
||||
// No messages found as expected
|
||||
log("SMS getMessages returned zero messages as expected.");
|
||||
}
|
||||
deleteAllMsgs(cleanUp);
|
||||
};
|
||||
|
||||
cursor.onerror = function(event) {
|
||||
log("Received 'onerror' event.");
|
||||
ok(event.target.error, "domerror obj");
|
||||
log("manager.getMessages error: " + event.target.error.name);
|
||||
ok(false,"Could not get SMS messages");
|
||||
cleanUp();
|
||||
};
|
||||
}
|
||||
|
||||
function cleanUp() {
|
||||
manager.onreceived = null;
|
||||
SpecialPowers.removePermission("sms", document);
|
||||
SpecialPowers.clearUserPref("dom.sms.enabled");
|
||||
finish();
|
||||
}
|
||||
|
||||
// Start the test
|
||||
verifyInitialState();
|
|
@ -2,227 +2,30 @@
|
|||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
MARIONETTE_TIMEOUT = 60000;
|
||||
|
||||
SpecialPowers.setBoolPref("dom.sms.enabled", true);
|
||||
SpecialPowers.setBoolPref("dom.sms.requestStatusReport", true);
|
||||
SpecialPowers.addPermission("sms", true, document);
|
||||
MARIONETTE_HEAD_JS = 'head.js';
|
||||
|
||||
const REMOTE = "5559997777"; // the remote number
|
||||
const EMULATOR = "15555215554"; // the emulator's number
|
||||
|
||||
let manager = window.navigator.mozMobileMessage;
|
||||
let inText = "Incoming SMS message. Mozilla Firefox OS!";
|
||||
let outText = "Outgoing SMS message. Mozilla Firefox OS!";
|
||||
let gotSmsOnsent = false;
|
||||
let gotReqOnsuccess = false;
|
||||
let inSmsId = 0;
|
||||
let outSmsId = 0;
|
||||
let inThreadId = 0;
|
||||
let outThreadId = 0;
|
||||
let inSmsTimeStamp;
|
||||
let inSmsSentTimeStamp;
|
||||
let outSmsTimeStamp;
|
||||
let outSmsSentTimeStamp;
|
||||
const IN_TEXT = "Incoming SMS message. Mozilla Firefox OS!";
|
||||
const OUT_TEXT = "Outgoing SMS message. Mozilla Firefox OS!";
|
||||
|
||||
function verifyInitialState() {
|
||||
log("Verifying initial state.");
|
||||
ok(manager instanceof MozMobileMessageManager,
|
||||
"manager is instance of " + manager.constructor);
|
||||
simulateIncomingSms();
|
||||
}
|
||||
startTestBase(function testCaseMain() {
|
||||
let incomingSms, outgoingSms;
|
||||
|
||||
function simulateIncomingSms() {
|
||||
log("Simulating incoming SMS.");
|
||||
return ensureMobileMessage()
|
||||
|
||||
manager.onreceived = function onreceived(event) {
|
||||
log("Received 'onreceived' event.");
|
||||
let incomingSms = event.message;
|
||||
ok(incomingSms, "incoming sms");
|
||||
ok(incomingSms.id, "sms id");
|
||||
inSmsId = incomingSms.id;
|
||||
log("Received SMS (id: " + inSmsId + ").");
|
||||
ok(incomingSms.threadId, "thread id");
|
||||
inThreadId = incomingSms.threadId;
|
||||
is(incomingSms.body, inText, "msg body");
|
||||
is(incomingSms.delivery, "received", "delivery");
|
||||
is(incomingSms.deliveryStatus, "success", "deliveryStatus");
|
||||
is(incomingSms.read, false, "read");
|
||||
is(incomingSms.receiver, EMULATOR, "receiver");
|
||||
is(incomingSms.sender, REMOTE, "sender");
|
||||
is(incomingSms.messageClass, "normal", "messageClass");
|
||||
inSmsTimeStamp = incomingSms.timestamp;
|
||||
inSmsSentTimeStamp = incomingSms.sentTimestamp;
|
||||
sendSms();
|
||||
};
|
||||
// Simulate incoming sms sent from remoteNumber to our emulator
|
||||
runEmulatorCmd("sms send " + REMOTE + " " + inText, function(result) {
|
||||
is(result[0], "OK", "emulator output");
|
||||
});
|
||||
}
|
||||
.then(() => sendTextSmsToEmulatorAndWait(REMOTE, IN_TEXT))
|
||||
.then((aMessage) => { incomingSms = aMessage; })
|
||||
|
||||
function sendSms() {
|
||||
log("Sending an SMS.");
|
||||
manager.onsent = function(event) {
|
||||
log("Received 'onsent' event.");
|
||||
gotSmsOnsent = true;
|
||||
let sentSms = event.message;
|
||||
ok(sentSms, "outgoing sms");
|
||||
ok(sentSms.id, "sms id");
|
||||
outSmsId = sentSms.id;
|
||||
log("Sent SMS (id: " + outSmsId + ").");
|
||||
ok(sentSms.threadId, "thread id");
|
||||
outThreadId = sentSms.threadId;
|
||||
is(sentSms.body, outText, "msg body");
|
||||
is(sentSms.delivery, "sent", "delivery");
|
||||
is(sentSms.deliveryStatus, "pending", "deliveryStatus");
|
||||
is(sentSms.read, true, "read");
|
||||
is(sentSms.receiver, REMOTE, "receiver");
|
||||
is(sentSms.sender, EMULATOR, "sender");
|
||||
is(sentSms.messageClass, "normal", "messageClass");
|
||||
outSmsTimeStamp = sentSms.timestamp;
|
||||
outSmsSentTimeStamp = sentSms.sentTimestamp;
|
||||
is(sentSms.deliveryTimestamp, 0, "deliveryTimestamp is 0");
|
||||
.then(() => sendSmsWithSuccess(REMOTE, OUT_TEXT))
|
||||
.then((aMessage) => { outgoingSms = aMessage; })
|
||||
|
||||
if (gotSmsOnsent && gotReqOnsuccess) { getReceivedSms(); }
|
||||
};
|
||||
.then(() => getMessage(incomingSms.id))
|
||||
.then((aMessage) => compareSmsMessage(aMessage, incomingSms))
|
||||
|
||||
let requestRet = manager.send(REMOTE, outText);
|
||||
ok(requestRet, "smsrequest obj returned");
|
||||
.then(() => getMessage(outgoingSms.id))
|
||||
.then((aMessage) => compareSmsMessage(aMessage, outgoingSms))
|
||||
|
||||
requestRet.onsuccess = function(event) {
|
||||
log("Received 'onsuccess' smsrequest event.");
|
||||
gotReqOnsuccess = true;
|
||||
if(event.target.result){
|
||||
if (gotSmsOnsent && gotReqOnsuccess) { getReceivedSms(); }
|
||||
} else {
|
||||
log("smsrequest returned false for manager.send");
|
||||
ok(false,"SMS send failed");
|
||||
cleanUp();
|
||||
}
|
||||
};
|
||||
|
||||
requestRet.onerror = function(event) {
|
||||
log("Received 'onerror' smsrequest event.");
|
||||
ok(event.target.error, "domerror obj");
|
||||
ok(false, "manager.send request returned unexpected error: "
|
||||
+ event.target.error.name );
|
||||
cleanUp();
|
||||
};
|
||||
}
|
||||
|
||||
function getReceivedSms() {
|
||||
log("Getting the received SMS message (id: " + inSmsId + ").");
|
||||
|
||||
let requestRet = manager.getMessage(inSmsId);
|
||||
ok(requestRet, "smsrequest obj returned");
|
||||
|
||||
requestRet.onsuccess = function(event) {
|
||||
log("Received 'onsuccess' smsrequest event.");
|
||||
ok(event.target.result, "smsrequest event.target.result");
|
||||
let foundSms = event.target.result;
|
||||
is(foundSms.id, inSmsId, "SMS id matches");
|
||||
log("Got SMS (id: " + foundSms.id + ").");
|
||||
is(foundSms.threadId, inThreadId, "thread id matches");
|
||||
is(foundSms.body, inText, "SMS msg text matches");
|
||||
is(foundSms.delivery, "received", "delivery");
|
||||
is(foundSms.deliveryStatus, "success", "deliveryStatus");
|
||||
is(foundSms.read, false, "read");
|
||||
is(foundSms.receiver, EMULATOR, "receiver");
|
||||
is(foundSms.sender, REMOTE, "sender");
|
||||
is(foundSms.messageClass, "normal", "messageClass");
|
||||
is(foundSms.timestamp, inSmsTimeStamp, "timestamp matches");
|
||||
is(foundSms.sentTimestamp, inSmsSentTimeStamp, "sentTimestamp matches");
|
||||
getSentSms();
|
||||
};
|
||||
|
||||
requestRet.onerror = function(event) {
|
||||
log("Received 'onerror' smsrequest event.");
|
||||
ok(event.target.error, "domerror obj");
|
||||
is(event.target.error.name, "NotFoundError", "error returned");
|
||||
log("Could not get SMS (id: " + inSmsId + ") but should have.");
|
||||
ok(false,"Could not get received SMS");
|
||||
cleanUp();
|
||||
};
|
||||
}
|
||||
|
||||
function getSentSms() {
|
||||
log("Getting the sent SMS message (id: " + outSmsId + ").");
|
||||
let requestRet = manager.getMessage(outSmsId);
|
||||
ok(requestRet, "smsrequest obj returned");
|
||||
|
||||
requestRet.onsuccess = function(event) {
|
||||
log("Received 'onsuccess' smsrequest event.");
|
||||
ok(event.target.result, "smsrequest event.target.result");
|
||||
let foundSms = event.target.result;
|
||||
is(foundSms.id, outSmsId, "SMS id matches");
|
||||
log("Got SMS (id: " + foundSms.id + ").");
|
||||
is(foundSms.threadId, outThreadId, "thread id matches");
|
||||
is(foundSms.body, outText, "SMS msg text matches");
|
||||
is(foundSms.delivery, "sent", "delivery");
|
||||
is(foundSms.deliveryStatus, "pending", "deliveryStatus");
|
||||
is(foundSms.read, true, "read");
|
||||
is(foundSms.receiver, REMOTE, "receiver");
|
||||
is(foundSms.sender, EMULATOR, "sender");
|
||||
is(foundSms.messageClass, "normal", "messageClass");
|
||||
is(foundSms.timestamp, outSmsTimeStamp, "timestamp matches");
|
||||
is(foundSms.sentTimestamp, outSmsSentTimeStamp, "sentTimestamp matches");
|
||||
deleteMsgs();
|
||||
};
|
||||
|
||||
requestRet.onerror = function(event) {
|
||||
log("Received 'onerror' smsrequest event.");
|
||||
ok(event.target.error, "domerror obj");
|
||||
is(event.target.error.name, "NotFoundError", "error returned");
|
||||
log("Could not get SMS (id: " + outSmsId + ") but should have.");
|
||||
ok(false,"Could not get sent SMS");
|
||||
cleanUp();
|
||||
};
|
||||
}
|
||||
|
||||
function deleteMsgs() {
|
||||
log("Deleting SMS (id: " + inSmsId + ").");
|
||||
let requestRet = manager.delete(inSmsId);
|
||||
ok(requestRet,"smsrequest obj returned");
|
||||
|
||||
requestRet.onsuccess = function(event) {
|
||||
log("Received 'onsuccess' smsrequest event.");
|
||||
if(event.target.result){
|
||||
log("Deleting SMS (id: " + outSmsId + ").");
|
||||
let nextReqRet = manager.delete(outSmsId);
|
||||
ok(nextReqRet,"smsrequest obj returned");
|
||||
|
||||
nextReqRet.onsuccess = function(event) {
|
||||
log("Received 'onsuccess' smsrequest event.");
|
||||
if(event.target.result) {
|
||||
cleanUp();
|
||||
} else {
|
||||
log("smsrequest returned false for manager.delete");
|
||||
ok(false,"SMS delete failed");
|
||||
}
|
||||
};
|
||||
} else {
|
||||
log("smsrequest returned false for manager.delete");
|
||||
ok(false,"SMS delete failed");
|
||||
}
|
||||
};
|
||||
|
||||
requestRet.onerror = function(event) {
|
||||
log("Received 'onerror' smsrequest event.");
|
||||
ok(event.target.error, "domerror obj");
|
||||
ok(false, "manager.delete request returned unexpected error: "
|
||||
+ event.target.error.name );
|
||||
cleanUp();
|
||||
};
|
||||
}
|
||||
|
||||
function cleanUp() {
|
||||
manager.onreceived = null;
|
||||
SpecialPowers.removePermission("sms", document);
|
||||
SpecialPowers.clearUserPref("dom.sms.enabled");
|
||||
SpecialPowers.clearUserPref("dom.sms.requestStatusReport");
|
||||
|
||||
finish();
|
||||
}
|
||||
|
||||
// Start the test
|
||||
verifyInitialState();
|
||||
.then(deleteAllMessages);
|
||||
});
|
||||
|
|
|
@ -2,119 +2,49 @@
|
|||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
MARIONETTE_TIMEOUT = 60000;
|
||||
MARIONETTE_HEAD_JS = 'head.js';
|
||||
|
||||
SpecialPowers.setBoolPref("dom.sms.enabled", true);
|
||||
SpecialPowers.addPermission("sms", true, document);
|
||||
const TEXT = "Incoming SMS message. Mozilla Firefox OS!";
|
||||
const REMOTE = "5559997777";
|
||||
|
||||
let manager = window.navigator.mozMobileMessage;
|
||||
let myNumber = "15555215554";
|
||||
let inText = "Incoming SMS message. Mozilla Firefox OS!";
|
||||
let remoteNumber = "5559997777";
|
||||
let inSmsId = 0;
|
||||
function getNonExistentMsg(aId) {
|
||||
log("Attempting to get non-existent message (id: " + aId + ").");
|
||||
|
||||
function verifyInitialState() {
|
||||
log("Verifying initial state.");
|
||||
ok(manager instanceof MozMobileMessageManager,
|
||||
"manager is instance of " + manager.constructor);
|
||||
simulateIncomingSms();
|
||||
return getMessage(aId)
|
||||
.then(function onresolve() {
|
||||
ok(false, "request succeeded when tried to get non-existent sms");
|
||||
}, function onreject(aEvent) {
|
||||
let error = aEvent.target.error;
|
||||
ok(error, "DOMError");
|
||||
is(error.name, "NotFoundError", "error.name");
|
||||
});
|
||||
}
|
||||
|
||||
function simulateIncomingSms() {
|
||||
log("Simulating incoming SMS.");
|
||||
function getMsgInvalidId(aId) {
|
||||
log("Attempting to get sms with invalid id (id: " + aId + ").");
|
||||
|
||||
manager.onreceived = function onreceived(event) {
|
||||
log("Received 'onreceived' event.");
|
||||
let incomingSms = event.message;
|
||||
ok(incomingSms, "incoming sms");
|
||||
ok(incomingSms.id, "sms id");
|
||||
inSmsId = incomingSms.id;
|
||||
log("Received SMS (id: " + inSmsId + ").");
|
||||
is(incomingSms.body, inText, "msg body");
|
||||
is(incomingSms.delivery, "received", "delivery");
|
||||
getNonExistentMsg();
|
||||
};
|
||||
// Simulate incoming sms sent from remoteNumber to our emulator
|
||||
runEmulatorCmd("sms send " + remoteNumber + " " + inText, function(result) {
|
||||
is(result[0], "OK", "emulator output");
|
||||
});
|
||||
return getMessage(aId)
|
||||
.then(function onresolve() {
|
||||
ok(false, "request succeeded when tried to get message with " +
|
||||
"invalid id (id: " + aId + ").");
|
||||
}, function onreject(aEvent) {
|
||||
let error = aEvent.target.error;
|
||||
ok(error, "DOMError");
|
||||
is(error.name, "NotFoundError", "error.name");
|
||||
});
|
||||
}
|
||||
|
||||
function getNonExistentMsg() {
|
||||
let msgIdNoExist = inSmsId + 1;
|
||||
log("Attempting to get non-existent message (id: " + msgIdNoExist + ").");
|
||||
let requestRet = manager.getMessage(msgIdNoExist);
|
||||
ok(requestRet, "smsrequest obj returned");
|
||||
startTestBase(function testCaseMain() {
|
||||
let lastMessageId;
|
||||
|
||||
requestRet.onsuccess = function(event) {
|
||||
log("Received 'onsuccess' smsrequest event.");
|
||||
ok(event.target.result, "smsrequest event.target.result");
|
||||
let foundSms = event.target.result;
|
||||
log("Got SMS (id: " + foundSms.id + ") but should not have.");
|
||||
ok(false, "Smsrequest successful when tried to get non-existent sms");
|
||||
getMsgInvalidId();
|
||||
};
|
||||
return ensureMobileMessage()
|
||||
|
||||
requestRet.onerror = function(event) {
|
||||
log("Received 'onerror' smsrequest event.");
|
||||
ok(event.target.error, "domerror obj");
|
||||
is(event.target.error.name, "NotFoundError", "error returned");
|
||||
log("Could not get SMS (id: " + msgIdNoExist + ") as expected.");
|
||||
getMsgInvalidId();
|
||||
};
|
||||
}
|
||||
.then(() => sendTextSmsToEmulatorAndWait(REMOTE, TEXT))
|
||||
.then((aMessage) => { lastMessageId = aMessage.id; })
|
||||
|
||||
function getMsgInvalidId() {
|
||||
invalidId = -1;
|
||||
log("Attempting to get sms with invalid id (id: " + invalidId + ").");
|
||||
let requestRet = manager.getMessage(invalidId);
|
||||
ok(requestRet, "smsrequest obj returned");
|
||||
.then(() => getNonExistentMsg(lastMessageId + 1))
|
||||
.then(() => getMsgInvalidId(-1))
|
||||
.then(() => getMsgInvalidId(0))
|
||||
|
||||
requestRet.onsuccess = function(event) {
|
||||
log("Received 'onsuccess' smsrequest event.");
|
||||
ok(event.target.result, "smsrequest event.target.result");
|
||||
let foundSms = event.target.result;
|
||||
log("Got SMS (id: " + foundSms.id + ") but should not have.");
|
||||
ok(false, "Smsrequest successful when tried to get message with " +
|
||||
"invalid id (id: " + invalidId + ").");
|
||||
deleteMsg();
|
||||
};
|
||||
|
||||
requestRet.onerror = function(event) {
|
||||
log("Received 'onerror' smsrequest event.");
|
||||
ok(event.target.error, "domerror obj");
|
||||
is(event.target.error.name, "NotFoundError", "error returned");
|
||||
log("Could not get SMS (id: -1) as expected.");
|
||||
deleteMsg();
|
||||
};
|
||||
}
|
||||
|
||||
function deleteMsg() {
|
||||
log("Deleting SMS (id: " + inSmsId + ").");
|
||||
let requestRet = manager.delete(inSmsId);
|
||||
ok(requestRet,"smsrequest obj returned");
|
||||
|
||||
requestRet.onsuccess = function(event) {
|
||||
log("Received 'onsuccess' smsrequest event.");
|
||||
if(event.target.result){
|
||||
cleanUp();
|
||||
}
|
||||
};
|
||||
|
||||
requestRet.onerror = function(event) {
|
||||
log("Received 'onerror' smsrequest event.");
|
||||
ok(event.target.error, "domerror obj");
|
||||
ok(false, "manager.delete request returned unexpected error: "
|
||||
+ event.target.error.name );
|
||||
cleanUp();
|
||||
};
|
||||
}
|
||||
|
||||
function cleanUp() {
|
||||
manager.onreceived = null;
|
||||
SpecialPowers.removePermission("sms", document);
|
||||
SpecialPowers.setBoolPref("dom.sms.enabled", false);
|
||||
finish();
|
||||
}
|
||||
|
||||
// Start the test
|
||||
verifyInitialState();
|
||||
.then(deleteAllMessages);
|
||||
});
|
||||
|
|
|
@ -2,226 +2,45 @@
|
|||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
MARIONETTE_TIMEOUT = 60000;
|
||||
MARIONETTE_HEAD_JS = 'head.js';
|
||||
|
||||
SpecialPowers.addPermission("sms", true, document);
|
||||
SpecialPowers.setBoolPref("dom.sms.enabled", true);
|
||||
|
||||
let manager = window.navigator.mozMobileMessage;
|
||||
let numberMsgs = 10;
|
||||
let smsList = new Array();
|
||||
|
||||
function verifyInitialState() {
|
||||
log("Verifying initial state.");
|
||||
ok(manager instanceof MozMobileMessageManager,
|
||||
"manager is instance of " + manager.constructor);
|
||||
// Ensure test is starting clean with no existing sms messages
|
||||
deleteAllMsgs(simulateIncomingSms);
|
||||
}
|
||||
|
||||
function isIn(aVal, aArray, aMsg) {
|
||||
ok(aArray.indexOf(aVal) >= 0, aMsg);
|
||||
}
|
||||
|
||||
function deleteAllMsgs(nextFunction) {
|
||||
let msgList = new Array();
|
||||
let smsFilter = new MozSmsFilter;
|
||||
|
||||
let cursor = manager.getMessages(smsFilter, false);
|
||||
ok(cursor instanceof DOMCursor,
|
||||
"cursor is instanceof " + cursor.constructor);
|
||||
|
||||
cursor.onsuccess = function(event) {
|
||||
// Check if message was found
|
||||
if (cursor.result) {
|
||||
msgList.push(cursor.result.id);
|
||||
// Now get next message in the list
|
||||
cursor.continue();
|
||||
} else {
|
||||
// No (more) messages found
|
||||
if (msgList.length) {
|
||||
log("Found " + msgList.length + " SMS messages to delete.");
|
||||
deleteMsgs(msgList, nextFunction);
|
||||
} else {
|
||||
log("No SMS messages found.");
|
||||
nextFunction();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
cursor.onerror = function(event) {
|
||||
log("Received 'onerror' event.");
|
||||
ok(event.target.error, "domerror obj");
|
||||
log("manager.getMessages error: " + event.target.error.name);
|
||||
ok(false,"Could not get SMS messages");
|
||||
cleanUp();
|
||||
};
|
||||
}
|
||||
|
||||
function deleteMsgs(msgList, nextFunction) {
|
||||
let smsId = msgList.shift();
|
||||
|
||||
log("Deleting SMS (id: " + smsId + ").");
|
||||
let request = manager.delete(smsId);
|
||||
ok(request instanceof DOMRequest,
|
||||
"request is instanceof " + request.constructor);
|
||||
|
||||
request.onsuccess = function(event) {
|
||||
log("Received 'onsuccess' smsrequest event.");
|
||||
if (event.target.result) {
|
||||
// Message deleted, continue until none are left
|
||||
if (msgList.length) {
|
||||
deleteMsgs(msgList, nextFunction);
|
||||
} else {
|
||||
log("Finished deleting SMS messages.");
|
||||
nextFunction();
|
||||
}
|
||||
} else {
|
||||
log("SMS delete failed.");
|
||||
ok(false,"manager.delete request returned false");
|
||||
cleanUp();
|
||||
}
|
||||
};
|
||||
|
||||
request.onerror = function(event) {
|
||||
log("Received 'onerror' smsrequest event.");
|
||||
ok(event.target.error, "domerror obj");
|
||||
ok(false, "manager.delete request returned unexpected error: "
|
||||
+ event.target.error.name );
|
||||
cleanUp();
|
||||
};
|
||||
}
|
||||
const NUMBER_OF_MESSAGES = 10;
|
||||
const REMOTE = "5552229797";
|
||||
|
||||
function simulateIncomingSms() {
|
||||
let text = "Incoming SMS number " + (smsList.length + 1);
|
||||
let remoteNumber = "5552229797";
|
||||
let promise = Promise.resolve();
|
||||
let messages = [];
|
||||
|
||||
log("Simulating incoming SMS number " + (smsList.length + 1) + " of "
|
||||
+ numberMsgs + ".");
|
||||
|
||||
// Simulate incoming sms sent from remoteNumber to our emulator
|
||||
rcvdEmulatorCallback = false;
|
||||
runEmulatorCmd("sms send " + remoteNumber + " " + text, function(result) {
|
||||
is(result[0], "OK", "emulator callback");
|
||||
rcvdEmulatorCallback = true;
|
||||
});
|
||||
}
|
||||
|
||||
// Callback for incoming sms
|
||||
manager.onreceived = function onreceived(event) {
|
||||
log("Received 'onreceived' sms event.");
|
||||
let incomingSms = event.message;
|
||||
log("Received SMS (id: " + incomingSms.id + ").");
|
||||
|
||||
// Add newly received message to array of received msgs
|
||||
smsList.push(incomingSms);
|
||||
|
||||
// Wait for emulator to catch up before continuing
|
||||
waitFor(nextRep,function() {
|
||||
return(rcvdEmulatorCallback);
|
||||
});
|
||||
};
|
||||
|
||||
function nextRep() {
|
||||
if (smsList.length < numberMsgs) {
|
||||
simulateIncomingSms();
|
||||
} else {
|
||||
log("Received " + numberMsgs + " sms messages in total.");
|
||||
getMsgs(false);
|
||||
}
|
||||
}
|
||||
|
||||
function getMsgs(reverse) {
|
||||
let smsFilter = new MozSmsFilter;
|
||||
let foundSmsCount = 0;
|
||||
let foundSmsList = new Array();
|
||||
|
||||
if (!reverse) {
|
||||
log("Getting the sms messages.");
|
||||
} else {
|
||||
log("Getting the sms messages in reverse order.");
|
||||
for (let i = 0; i< NUMBER_OF_MESSAGES; i++) {
|
||||
let text = "Incoming SMS number " + i;
|
||||
promise = promise.then(() => sendTextSmsToEmulatorAndWait(REMOTE, text))
|
||||
.then(function(aMessage) {
|
||||
messages.push(aMessage);
|
||||
return messages;
|
||||
});
|
||||
}
|
||||
|
||||
// Note: This test is intended for getMessages, so just a basic test with
|
||||
// no filter (default); separate tests will be written for sms filtering
|
||||
let cursor = manager.getMessages(smsFilter, reverse);
|
||||
ok(cursor instanceof DOMCursor,
|
||||
"cursor is instanceof " + cursor.constructor);
|
||||
|
||||
cursor.onsuccess = function(event) {
|
||||
log("Received 'onsuccess' event.");
|
||||
|
||||
if (cursor.result) {
|
||||
// Another message found
|
||||
log("Got SMS (id: " + cursor.result.id + ").");
|
||||
foundSmsCount++;
|
||||
// Store found message
|
||||
foundSmsList.push(cursor.result);
|
||||
// Now get next message in the list
|
||||
cursor.continue();
|
||||
} else {
|
||||
// No more messages; ensure correct number found
|
||||
if (foundSmsCount == numberMsgs) {
|
||||
log("SMS getMessages returned " + foundSmsCount +
|
||||
" messages as expected.");
|
||||
} else {
|
||||
log("SMS getMessages returned " + foundSmsCount +
|
||||
" messages, but expected " + numberMsgs + ".");
|
||||
ok(false, "Incorrect number of messages returned by manager.getMessages");
|
||||
}
|
||||
verifyFoundMsgs(foundSmsList, reverse);
|
||||
}
|
||||
};
|
||||
|
||||
cursor.onerror = function(event) {
|
||||
log("Received 'onerror' event.");
|
||||
ok(event.target.error, "domerror obj");
|
||||
log("manager.getMessages error: " + event.target.error.name);
|
||||
ok(false,"Could not get SMS messages");
|
||||
cleanUp();
|
||||
};
|
||||
return promise;
|
||||
}
|
||||
|
||||
function verifyFoundMsgs(foundSmsList, reverse) {
|
||||
if (reverse) {
|
||||
smsList.reverse();
|
||||
}
|
||||
for (var x = 0; x < numberMsgs; x++) {
|
||||
is(foundSmsList[x].id, smsList[x].id, "id");
|
||||
is(foundSmsList[x].threadId, smsList[x].threadId, "thread id");
|
||||
is(foundSmsList[x].body, smsList[x].body, "body");
|
||||
is(foundSmsList[x].delivery, smsList[x].delivery, "delivery");
|
||||
is(foundSmsList[x].read, smsList[x].read, "read");
|
||||
|
||||
// Bug 805799: receiver null when onreceived event is fired, until do a
|
||||
// getMessage. Default emulator (receiver) phone number is 15555215554
|
||||
if (!smsList[x].receiver) {
|
||||
isIn(foundSmsList[x].receiver, ["15555215554", "+15555215554"], "receiver");
|
||||
} else {
|
||||
isIn(foundSmsList[x].receiver, [smsList[x].receiver, "+15555215554"], "receiver");
|
||||
}
|
||||
|
||||
isIn(foundSmsList[x].sender, [smsList[x].sender, "+15552229797"], "sender");
|
||||
is(foundSmsList[x].timestamp, smsList[x].timestamp, "timestamp");
|
||||
is(foundSmsList[x].sentTimestamp, smsList[x].sentTimestamp, "sentTimestamp");
|
||||
function verifyFoundMsgs(foundSmsList, smsList) {
|
||||
for (let x = 0; x < NUMBER_OF_MESSAGES; x++) {
|
||||
compareSmsMessage(foundSmsList[x], smsList[x]);
|
||||
}
|
||||
|
||||
log("Content in all of the returned SMS messages is correct.");
|
||||
|
||||
if (!reverse) {
|
||||
// Now get messages in reverse
|
||||
getMsgs(true);
|
||||
} else {
|
||||
// Finished, delete all messages
|
||||
deleteAllMsgs(cleanUp);
|
||||
};
|
||||
}
|
||||
|
||||
function cleanUp() {
|
||||
manager.onreceived = null;
|
||||
SpecialPowers.removePermission("sms", document);
|
||||
SpecialPowers.clearUserPref("dom.sms.enabled");
|
||||
finish();
|
||||
}
|
||||
startTestCommon(function testCaseMain() {
|
||||
let incomingMessages;
|
||||
|
||||
// Start the test
|
||||
verifyInitialState();
|
||||
return simulateIncomingSms()
|
||||
.then((aMessages) => { incomingMessages = aMessages; })
|
||||
|
||||
.then(() => getMessages(null, false))
|
||||
.then((aFoundMessages) => verifyFoundMsgs(aFoundMessages, incomingMessages))
|
||||
|
||||
.then(() => getMessages(null, true))
|
||||
.then((aFoundMessages) => verifyFoundMsgs(aFoundMessages,
|
||||
incomingMessages.slice().reverse()));
|
||||
});
|
||||
|
|
|
@ -2,50 +2,41 @@
|
|||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
MARIONETTE_TIMEOUT = 60000;
|
||||
|
||||
SpecialPowers.setBoolPref("dom.sms.enabled", true);
|
||||
SpecialPowers.addPermission("sms", true, document);
|
||||
MARIONETTE_HEAD_JS = 'head.js';
|
||||
|
||||
const SENDER = "5555552368"; // the remote number
|
||||
const RECEIVER = "15555215554"; // the emulator's number
|
||||
|
||||
let manager = window.navigator.mozMobileMessage;
|
||||
ok(manager instanceof MozMobileMessageManager,
|
||||
"manager is instance of " + manager.constructor);
|
||||
const SHORT_BODY = "Hello SMS world!";
|
||||
const LONG_BODY = new Array(17).join(SHORT_BODY);
|
||||
ok(LONG_BODY.length > 160, "LONG_BODY.length");
|
||||
|
||||
let body = "Hello SMS world!";
|
||||
function checkMessage(aMessage, aBody) {
|
||||
ok(aMessage instanceof MozSmsMessage, "Message is instanceof MozSmsMessage");
|
||||
|
||||
let completed = false;
|
||||
runEmulatorCmd("sms send " + SENDER + " " + body, function(result) {
|
||||
log("Sent fake SMS: " + result);
|
||||
is(result[0], "OK", "Emulator command result");
|
||||
completed = true;
|
||||
});
|
||||
|
||||
manager.onreceived = function onreceived(event) {
|
||||
log("Received an SMS!");
|
||||
|
||||
let message = event.message;
|
||||
ok(message instanceof MozSmsMessage, "Message is instanceof MozSmsMessage");
|
||||
|
||||
ok(message.threadId, "thread id");
|
||||
is(message.delivery, "received", "Message delivery");
|
||||
is(message.deliveryStatus, "success", "Delivery status");
|
||||
is(message.sender, SENDER, "Message sender");
|
||||
is(message.receiver, RECEIVER, "Message receiver");
|
||||
is(message.body, body, "Message body");
|
||||
is(message.messageClass, "normal", "Message class");
|
||||
is(message.deliveryTimestamp, 0, "deliveryTimestamp is 0");
|
||||
|
||||
cleanUp();
|
||||
is(aMessage.type, "sms", "message.type");
|
||||
ok(aMessage.id, "message.id");
|
||||
ok(aMessage.threadId, "message.threadId");
|
||||
ok(aMessage.iccId, "message.iccId");
|
||||
is(aMessage.delivery, "received", "message.delivery");
|
||||
is(aMessage.deliveryStatus, "success", "message.deliveryStatus");
|
||||
is(aMessage.sender, SENDER, "message.sender");
|
||||
is(aMessage.receiver, RECEIVER, "message.receiver");
|
||||
is(aMessage.body, aBody, "message.body");
|
||||
is(aMessage.messageClass, "normal", "message.messageClass");
|
||||
ok(aMessage.timestamp, "message.timestamp");
|
||||
is(aMessage.deliveryTimestamp, 0, "message.deliveryTimestamp");
|
||||
ok(aMessage.sentTimestamp, "message.sentTimestamp");
|
||||
is(aMessage.read, false, "message.read");
|
||||
};
|
||||
|
||||
function cleanUp() {
|
||||
if (!completed) {
|
||||
window.setTimeout(cleanUp, 100);
|
||||
return;
|
||||
}
|
||||
|
||||
SpecialPowers.removePermission("sms", document);
|
||||
finish();
|
||||
function test(aBody) {
|
||||
return sendTextSmsToEmulatorAndWait(SENDER, aBody)
|
||||
.then((aMessage) => checkMessage(aMessage, aBody));
|
||||
}
|
||||
|
||||
startTestBase(function testCaseMain() {
|
||||
return ensureMobileMessage()
|
||||
.then(() => test(SHORT_BODY))
|
||||
.then(() => test(LONG_BODY));
|
||||
});
|
||||
|
|
|
@ -1,115 +0,0 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
MARIONETTE_TIMEOUT = 60000;
|
||||
|
||||
SpecialPowers.setBoolPref("dom.sms.enabled", true);
|
||||
SpecialPowers.addPermission("sms", true, document);
|
||||
|
||||
const SENDER = "5555552368"; // the remote number
|
||||
const RECEIVER = "15555215554"; // the emulator's number
|
||||
|
||||
let manager = window.navigator.mozMobileMessage;
|
||||
|
||||
function verifyInitialState() {
|
||||
log("Verifying initial state.");
|
||||
ok(manager instanceof MozMobileMessageManager,
|
||||
"manager is instance of " + manager.constructor);
|
||||
simulateIncomingSms();
|
||||
}
|
||||
|
||||
function simulateIncomingSms() {
|
||||
let msgText = "";
|
||||
|
||||
log("Simulating incoming SMS.");
|
||||
|
||||
// Have message text > max SMS size (160 char) so will be a multi-part SMS
|
||||
for (var x = 1; x <= 24; x++) {
|
||||
msgText += 'FirefoxOS ';
|
||||
}
|
||||
|
||||
manager.onreceived = function onreceived(event) {
|
||||
log("Received 'onreceived' event.");
|
||||
let incomingSms = event.message;
|
||||
ok(incomingSms, "incoming sms");
|
||||
ok(incomingSms.id, "sms id");
|
||||
log("Received SMS (id: " + incomingSms.id + ").");
|
||||
ok(incomingSms.threadId, "thread id");
|
||||
is(incomingSms.body, msgText, "msg body");
|
||||
is(incomingSms.delivery, "received", "delivery");
|
||||
is(incomingSms.read, false, "read");
|
||||
is(incomingSms.receiver, RECEIVER, "receiver");
|
||||
is(incomingSms.sender, SENDER, "sender");
|
||||
is(incomingSms.deliveryTimestamp, 0, "deliveryTimestamp is 0");
|
||||
|
||||
verifySmsExists(incomingSms);
|
||||
};
|
||||
runEmulatorCmd("sms send " + SENDER + " " + msgText, function(result) {
|
||||
is(result[0], "OK", "emulator output");
|
||||
});
|
||||
}
|
||||
|
||||
function verifySmsExists(incomingSms) {
|
||||
log("Getting SMS (id: " + incomingSms.id + ").");
|
||||
let requestRet = manager.getMessage(incomingSms.id);
|
||||
ok(requestRet, "smsrequest obj returned");
|
||||
|
||||
requestRet.onsuccess = function(event) {
|
||||
log("Received 'onsuccess' smsrequest event.");
|
||||
ok(event.target.result, "smsrequest event.target.result");
|
||||
let foundSms = event.target.result;
|
||||
is(foundSms.id, incomingSms.id, "found SMS id matches");
|
||||
is(foundSms.threadId, incomingSms.threadId, "found SMS thread id matches");
|
||||
is(foundSms.body, incomingSms.body, "found SMS msg text matches");
|
||||
is(foundSms.delivery, "received", "delivery");
|
||||
is(foundSms.read, false, "read");
|
||||
is(foundSms.receiver, RECEIVER, "receiver");
|
||||
is(foundSms.sender, SENDER, "sender");
|
||||
log("Got SMS (id: " + foundSms.id + ") as expected.");
|
||||
deleteSms(incomingSms);
|
||||
};
|
||||
|
||||
requestRet.onerror = function(event) {
|
||||
log("Received 'onerror' smsrequest event.");
|
||||
ok(event.target.error, "domerror obj");
|
||||
is(event.target.error.name, "NotFoundError", "error returned");
|
||||
log("Could not get SMS (id: " + incomingSms.id + ") but should have.");
|
||||
ok(false,"SMS was not found");
|
||||
cleanUp();
|
||||
};
|
||||
}
|
||||
|
||||
function deleteSms(smsMsgObj){
|
||||
log("Deleting SMS (id: " + smsMsgObj.id + ") using smsmsg obj parameter.");
|
||||
let requestRet = manager.delete(smsMsgObj);
|
||||
ok(requestRet,"smsrequest obj returned");
|
||||
|
||||
requestRet.onsuccess = function(event) {
|
||||
log("Received 'onsuccess' smsrequest event.");
|
||||
if(event.target.result){
|
||||
cleanUp();
|
||||
} else {
|
||||
log("smsrequest returned false for manager.delete");
|
||||
ok(false,"SMS delete failed");
|
||||
cleanUp();
|
||||
}
|
||||
};
|
||||
|
||||
requestRet.onerror = function(event) {
|
||||
log("Received 'onerror' smsrequest event.");
|
||||
ok(event.target.error, "domerror obj");
|
||||
ok(false, "manager.delete request returned unexpected error: "
|
||||
+ event.target.error.name );
|
||||
cleanUp();
|
||||
};
|
||||
}
|
||||
|
||||
function cleanUp() {
|
||||
manager.onreceived = null;
|
||||
SpecialPowers.removePermission("sms", document);
|
||||
SpecialPowers.clearUserPref("dom.sms.enabled");
|
||||
finish();
|
||||
}
|
||||
|
||||
// Start the test
|
||||
verifyInitialState();
|
|
@ -2,18 +2,10 @@
|
|||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
MARIONETTE_TIMEOUT = 60000;
|
||||
|
||||
SpecialPowers.setBoolPref("dom.sms.enabled", true);
|
||||
SpecialPowers.setBoolPref("dom.sms.strict7BitEncoding", false);
|
||||
SpecialPowers.setBoolPref("dom.sms.requestStatusReport", true);
|
||||
SpecialPowers.addPermission("sms", true, document);
|
||||
MARIONETTE_HEAD_JS = 'head.js';
|
||||
|
||||
const SENDER = "15555215554"; // the emulator's number
|
||||
|
||||
let manager = window.navigator.mozMobileMessage;
|
||||
ok(manager instanceof MozMobileMessageManager,
|
||||
"manager is instance of " + manager.constructor);
|
||||
|
||||
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"
|
||||
|
@ -35,8 +27,10 @@ function checkMessage(message, delivery, body) {
|
|||
ok(message instanceof MozSmsMessage,
|
||||
"message is instanceof " + message.constructor);
|
||||
|
||||
is(message.type, "sms", "message.type");
|
||||
ok(message.id, "message.id");
|
||||
ok(message.threadId, "message.threadId");
|
||||
ok(message.iccId, "message.iccId");
|
||||
is(message.delivery, delivery, "message.delivery");
|
||||
is(message.deliveryStatus, "pending", "message.deliveryStatus");
|
||||
is(message.sender, SENDER, "message.sender");
|
||||
|
@ -56,148 +50,105 @@ function checkMessage(message, delivery, body) {
|
|||
}
|
||||
}
|
||||
|
||||
function doSendMessageAndCheckSuccess(receivers, body, callback) {
|
||||
let options = {};
|
||||
function isReceiverMatch(aReceiver, aEvent) {
|
||||
// Bug 838542: following check throws an exception and fails this case.
|
||||
// ok(event instanceof MozSmsEvent,
|
||||
// "event is instanceof " + event.constructor)
|
||||
ok(aEvent, "sending event is valid");
|
||||
|
||||
let message = aEvent.message;
|
||||
return message.receiver === aReceiver;
|
||||
}
|
||||
|
||||
function doSingleRequest(aRequest, aReceiver, aBody, aNow) {
|
||||
let sendingGot = false, sentGot = false, successGot = false;
|
||||
let sendingMessage;
|
||||
let promises = [];
|
||||
|
||||
promises.push(waitForManagerEvent("sending",
|
||||
isReceiverMatch.bind(null, aReceiver))
|
||||
.then(function(aEvent) {
|
||||
log(" onsending event for '" + aReceiver + "' received.");
|
||||
|
||||
sendingMessage = aEvent.message;
|
||||
checkMessage(sendingMessage, "sending", aBody);
|
||||
// timestamp is in seconds.
|
||||
ok(Math.floor(sendingMessage.timestamp / 1000) >= Math.floor(aNow / 1000),
|
||||
"sent timestamp is valid");
|
||||
|
||||
ok(!sendingGot, "sending event should not have been triggered");
|
||||
ok(!sentGot, "sent event should not have been triggered");
|
||||
ok(!successGot, "success event should not have been triggered");
|
||||
|
||||
sendingGot = true;
|
||||
}));
|
||||
|
||||
promises.push(waitForManagerEvent("sent",
|
||||
isReceiverMatch.bind(null, aReceiver))
|
||||
.then(function(aEvent) {
|
||||
log(" onsent event for '" + aReceiver + "' received.");
|
||||
|
||||
let message = aEvent.message;
|
||||
checkMessage(message, "sent", aBody);
|
||||
// Should be mostly identical to sendingMessage.
|
||||
is(message.id, sendingMessage.id, "message.id");
|
||||
is(message.receiver, sendingMessage.receiver, "message.receiver");
|
||||
is(message.body, sendingMessage.body, "message.body");
|
||||
is(message.timestamp, sendingMessage.timestamp, "message.timestamp");
|
||||
|
||||
ok(sendingGot, "sending event should have been triggered");
|
||||
ok(!sentGot, "sent event should not have been triggered");
|
||||
ok(successGot, "success event should have been triggered");
|
||||
|
||||
sentGot = true;
|
||||
}));
|
||||
|
||||
promises.push(wrapDomRequestAsPromise(aRequest)
|
||||
.then(function(aEvent) {
|
||||
log(" onsuccess event for '" + aReceiver + "' received.");
|
||||
|
||||
let message = aEvent.target.result;
|
||||
checkMessage(message, "sent", aBody);
|
||||
// Should be mostly identical to sendingMessage.
|
||||
is(message.id, sendingMessage.id, "message.id");
|
||||
is(message.receiver, sendingMessage.receiver, "message.receiver");
|
||||
is(message.body, sendingMessage.body, "message.body");
|
||||
is(message.timestamp, sendingMessage.timestamp, "message.timestamp");
|
||||
|
||||
ok(sendingGot, "sending event should have been triggered");
|
||||
ok(!sentGot, "sent event should not have been triggered");
|
||||
ok(!successGot, "success event should not have been triggered");
|
||||
|
||||
successGot = true;
|
||||
}));
|
||||
|
||||
return Promise.all(promises);
|
||||
}
|
||||
|
||||
function doSendMessageAndCheckSuccess(receivers, body) {
|
||||
log("Testing sending message(s) to receiver(s): " + JSON.stringify(receivers));
|
||||
|
||||
let now = Date.now();
|
||||
|
||||
function done() {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
manager.removeEventListener("sending", onSmsSending);
|
||||
manager.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;
|
||||
}
|
||||
|
||||
let opt = options[receiver];
|
||||
if (!opt) {
|
||||
ok(false, "onsent should be called after onsending.");
|
||||
return;
|
||||
}
|
||||
|
||||
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, saved.timestamp, "message.timestamp");
|
||||
|
||||
opt[mark] = true;
|
||||
|
||||
done();
|
||||
}
|
||||
|
||||
function onRequestSuccess(event) {
|
||||
log("request.onsuccess event received.");
|
||||
|
||||
ok(event.target instanceof DOMRequest,
|
||||
"event.target is instanceof " + event.target.constructor);
|
||||
event.target.removeEventListener("success", onRequestSuccess);
|
||||
|
||||
checkSentMessage(event.target.result, "onRequestSuccessCalled");
|
||||
}
|
||||
|
||||
function onSmsSending(event) {
|
||||
log("onsending event received.");
|
||||
|
||||
// Bug 838542: following check throws an exception and fails this case.
|
||||
// ok(event instanceof MozSmsEvent,
|
||||
// "event is instanceof " + event.constructor)
|
||||
ok(event, "event is valid");
|
||||
|
||||
let message = event.message;
|
||||
checkMessage(message, "sending", body);
|
||||
// timestamp is in seconds.
|
||||
ok(Math.floor(message.timestamp / 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("onsent event received.");
|
||||
|
||||
// Bug 838542: following check throws an exception and fails this case.
|
||||
// ok(event instanceof MozSmsEvent,
|
||||
// "event is instanceof " + event.constructor)
|
||||
ok(event, "event is valid");
|
||||
|
||||
checkSentMessage(event.message, "onSentCalled");
|
||||
}
|
||||
|
||||
manager.addEventListener("sending", onSmsSending);
|
||||
manager.addEventListener("sent", onSmsSent);
|
||||
|
||||
let result = manager.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)) {
|
||||
is(result.length, receivers.length, "returned array length");
|
||||
} else {
|
||||
result = [result];
|
||||
|
||||
return Promise.all(result.map(function(request, index) {
|
||||
return doSingleRequest(request, receivers[index], body, now);
|
||||
}));
|
||||
}
|
||||
|
||||
for (let i = 0; i < result.length; i++) {
|
||||
let request = result[i];
|
||||
ok(request instanceof DOMRequest,
|
||||
"request is instanceof " + request.constructor);
|
||||
request.addEventListener("success", onRequestSuccess);
|
||||
}
|
||||
return doSingleRequest(result, receivers, body, now);
|
||||
}
|
||||
|
||||
function testSendMessage() {
|
||||
log("Testing sending message to one receiver:");
|
||||
doSendMessageAndCheckSuccess("1", SHORT_BODY, testSendMultipartMessage);
|
||||
}
|
||||
|
||||
function testSendMultipartMessage() {
|
||||
log("Testing sending message to one receiver:");
|
||||
doSendMessageAndCheckSuccess("1", LONG_BODY,
|
||||
testSendMessageToMultipleRecipients);
|
||||
}
|
||||
|
||||
function testSendMessageToMultipleRecipients() {
|
||||
log("Testing sending message to multiple receivers:");
|
||||
// TODO: bug 788928 - add test cases for ondelivered event.
|
||||
doSendMessageAndCheckSuccess(["1", "2"], SHORT_BODY, cleanUp);
|
||||
}
|
||||
|
||||
function cleanUp() {
|
||||
SpecialPowers.removePermission("sms", document);
|
||||
SpecialPowers.clearUserPref("dom.sms.enabled");
|
||||
SpecialPowers.clearUserPref("dom.sms.strict7BitEncoding");
|
||||
SpecialPowers.clearUserPref("dom.sms.requestStatusReport");
|
||||
finish();
|
||||
}
|
||||
|
||||
testSendMessage();
|
||||
startTestBase(function testCaseMain() {
|
||||
return ensureMobileMessage()
|
||||
.then(() => pushPrefEnv({ set: [['dom.sms.strict7BitEncoding', false],
|
||||
['dom.sms.requestStatusReport', true]] }))
|
||||
.then(() => doSendMessageAndCheckSuccess("1", SHORT_BODY))
|
||||
.then(() => doSendMessageAndCheckSuccess("1", LONG_BODY))
|
||||
.then(() => doSendMessageAndCheckSuccess(["1", "2"], SHORT_BODY));
|
||||
});
|
||||
|
|
Загрузка…
Ссылка в новой задаче