michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: MARIONETTE_TIMEOUT = 60000; michael@0: michael@0: SpecialPowers.setBoolPref("dom.sms.enabled", true); michael@0: SpecialPowers.setBoolPref("dom.sms.requestStatusReport", true); michael@0: SpecialPowers.addPermission("sms", true, document); michael@0: michael@0: const REMOTE = "5559997777"; // the remote number michael@0: const EMULATOR = "15555215554"; // the emulator's number michael@0: michael@0: let manager = window.navigator.mozMobileMessage; michael@0: let inText = "Incoming SMS message. Mozilla Firefox OS!"; michael@0: let outText = "Outgoing SMS message. Mozilla Firefox OS!"; michael@0: let gotSmsOnsent = false; michael@0: let gotReqOnsuccess = false; michael@0: let inSmsId = 0; michael@0: let outSmsId = 0; michael@0: let inThreadId = 0; michael@0: let outThreadId = 0; michael@0: let inSmsTimeStamp; michael@0: let inSmsSentTimeStamp; michael@0: let outSmsTimeStamp; michael@0: let outSmsSentTimeStamp; michael@0: michael@0: function verifyInitialState() { michael@0: log("Verifying initial state."); michael@0: ok(manager instanceof MozMobileMessageManager, michael@0: "manager is instance of " + manager.constructor); michael@0: simulateIncomingSms(); michael@0: } michael@0: michael@0: function simulateIncomingSms() { michael@0: log("Simulating incoming SMS."); michael@0: michael@0: manager.onreceived = function onreceived(event) { michael@0: log("Received 'onreceived' event."); michael@0: let incomingSms = event.message; michael@0: ok(incomingSms, "incoming sms"); michael@0: ok(incomingSms.id, "sms id"); michael@0: inSmsId = incomingSms.id; michael@0: log("Received SMS (id: " + inSmsId + ")."); michael@0: ok(incomingSms.threadId, "thread id"); michael@0: inThreadId = incomingSms.threadId; michael@0: is(incomingSms.body, inText, "msg body"); michael@0: is(incomingSms.delivery, "received", "delivery"); michael@0: is(incomingSms.deliveryStatus, "success", "deliveryStatus"); michael@0: is(incomingSms.read, false, "read"); michael@0: is(incomingSms.receiver, EMULATOR, "receiver"); michael@0: is(incomingSms.sender, REMOTE, "sender"); michael@0: is(incomingSms.messageClass, "normal", "messageClass"); michael@0: inSmsTimeStamp = incomingSms.timestamp; michael@0: inSmsSentTimeStamp = incomingSms.sentTimestamp; michael@0: sendSms(); michael@0: }; michael@0: // Simulate incoming sms sent from remoteNumber to our emulator michael@0: runEmulatorCmd("sms send " + REMOTE + " " + inText, function(result) { michael@0: is(result[0], "OK", "emulator output"); michael@0: }); michael@0: } michael@0: michael@0: function sendSms() { michael@0: log("Sending an SMS."); michael@0: manager.onsent = function(event) { michael@0: log("Received 'onsent' event."); michael@0: gotSmsOnsent = true; michael@0: let sentSms = event.message; michael@0: ok(sentSms, "outgoing sms"); michael@0: ok(sentSms.id, "sms id"); michael@0: outSmsId = sentSms.id; michael@0: log("Sent SMS (id: " + outSmsId + ")."); michael@0: ok(sentSms.threadId, "thread id"); michael@0: outThreadId = sentSms.threadId; michael@0: is(sentSms.body, outText, "msg body"); michael@0: is(sentSms.delivery, "sent", "delivery"); michael@0: is(sentSms.deliveryStatus, "pending", "deliveryStatus"); michael@0: is(sentSms.read, true, "read"); michael@0: is(sentSms.receiver, REMOTE, "receiver"); michael@0: is(sentSms.sender, EMULATOR, "sender"); michael@0: is(sentSms.messageClass, "normal", "messageClass"); michael@0: outSmsTimeStamp = sentSms.timestamp; michael@0: outSmsSentTimeStamp = sentSms.sentTimestamp; michael@0: is(sentSms.deliveryTimestamp, 0, "deliveryTimestamp is 0"); michael@0: michael@0: if (gotSmsOnsent && gotReqOnsuccess) { getReceivedSms(); } michael@0: }; michael@0: michael@0: let requestRet = manager.send(REMOTE, outText); michael@0: ok(requestRet, "smsrequest obj returned"); michael@0: michael@0: requestRet.onsuccess = function(event) { michael@0: log("Received 'onsuccess' smsrequest event."); michael@0: gotReqOnsuccess = true; michael@0: if(event.target.result){ michael@0: if (gotSmsOnsent && gotReqOnsuccess) { getReceivedSms(); } michael@0: } else { michael@0: log("smsrequest returned false for manager.send"); michael@0: ok(false,"SMS send failed"); michael@0: cleanUp(); michael@0: } michael@0: }; michael@0: michael@0: requestRet.onerror = function(event) { michael@0: log("Received 'onerror' smsrequest event."); michael@0: ok(event.target.error, "domerror obj"); michael@0: ok(false, "manager.send request returned unexpected error: " michael@0: + event.target.error.name ); michael@0: cleanUp(); michael@0: }; michael@0: } michael@0: michael@0: function getReceivedSms() { michael@0: log("Getting the received SMS message (id: " + inSmsId + ")."); michael@0: michael@0: let requestRet = manager.getMessage(inSmsId); michael@0: ok(requestRet, "smsrequest obj returned"); michael@0: michael@0: requestRet.onsuccess = function(event) { michael@0: log("Received 'onsuccess' smsrequest event."); michael@0: ok(event.target.result, "smsrequest event.target.result"); michael@0: let foundSms = event.target.result; michael@0: is(foundSms.id, inSmsId, "SMS id matches"); michael@0: log("Got SMS (id: " + foundSms.id + ")."); michael@0: is(foundSms.threadId, inThreadId, "thread id matches"); michael@0: is(foundSms.body, inText, "SMS msg text matches"); michael@0: is(foundSms.delivery, "received", "delivery"); michael@0: is(foundSms.deliveryStatus, "success", "deliveryStatus"); michael@0: is(foundSms.read, false, "read"); michael@0: is(foundSms.receiver, EMULATOR, "receiver"); michael@0: is(foundSms.sender, REMOTE, "sender"); michael@0: is(foundSms.messageClass, "normal", "messageClass"); michael@0: is(foundSms.timestamp, inSmsTimeStamp, "timestamp matches"); michael@0: is(foundSms.sentTimestamp, inSmsSentTimeStamp, "sentTimestamp matches"); michael@0: getSentSms(); michael@0: }; michael@0: michael@0: requestRet.onerror = function(event) { michael@0: log("Received 'onerror' smsrequest event."); michael@0: ok(event.target.error, "domerror obj"); michael@0: is(event.target.error.name, "NotFoundError", "error returned"); michael@0: log("Could not get SMS (id: " + inSmsId + ") but should have."); michael@0: ok(false,"Could not get received SMS"); michael@0: cleanUp(); michael@0: }; michael@0: } michael@0: michael@0: function getSentSms() { michael@0: log("Getting the sent SMS message (id: " + outSmsId + ")."); michael@0: let requestRet = manager.getMessage(outSmsId); michael@0: ok(requestRet, "smsrequest obj returned"); michael@0: michael@0: requestRet.onsuccess = function(event) { michael@0: log("Received 'onsuccess' smsrequest event."); michael@0: ok(event.target.result, "smsrequest event.target.result"); michael@0: let foundSms = event.target.result; michael@0: is(foundSms.id, outSmsId, "SMS id matches"); michael@0: log("Got SMS (id: " + foundSms.id + ")."); michael@0: is(foundSms.threadId, outThreadId, "thread id matches"); michael@0: is(foundSms.body, outText, "SMS msg text matches"); michael@0: is(foundSms.delivery, "sent", "delivery"); michael@0: is(foundSms.deliveryStatus, "pending", "deliveryStatus"); michael@0: is(foundSms.read, true, "read"); michael@0: is(foundSms.receiver, REMOTE, "receiver"); michael@0: is(foundSms.sender, EMULATOR, "sender"); michael@0: is(foundSms.messageClass, "normal", "messageClass"); michael@0: is(foundSms.timestamp, outSmsTimeStamp, "timestamp matches"); michael@0: is(foundSms.sentTimestamp, outSmsSentTimeStamp, "sentTimestamp matches"); michael@0: deleteMsgs(); michael@0: }; michael@0: michael@0: requestRet.onerror = function(event) { michael@0: log("Received 'onerror' smsrequest event."); michael@0: ok(event.target.error, "domerror obj"); michael@0: is(event.target.error.name, "NotFoundError", "error returned"); michael@0: log("Could not get SMS (id: " + outSmsId + ") but should have."); michael@0: ok(false,"Could not get sent SMS"); michael@0: cleanUp(); michael@0: }; michael@0: } michael@0: michael@0: function deleteMsgs() { michael@0: log("Deleting SMS (id: " + inSmsId + ")."); michael@0: let requestRet = manager.delete(inSmsId); michael@0: ok(requestRet,"smsrequest obj returned"); michael@0: michael@0: requestRet.onsuccess = function(event) { michael@0: log("Received 'onsuccess' smsrequest event."); michael@0: if(event.target.result){ michael@0: log("Deleting SMS (id: " + outSmsId + ")."); michael@0: let nextReqRet = manager.delete(outSmsId); michael@0: ok(nextReqRet,"smsrequest obj returned"); michael@0: michael@0: nextReqRet.onsuccess = function(event) { michael@0: log("Received 'onsuccess' smsrequest event."); michael@0: if(event.target.result) { michael@0: cleanUp(); michael@0: } else { michael@0: log("smsrequest returned false for manager.delete"); michael@0: ok(false,"SMS delete failed"); michael@0: } michael@0: }; michael@0: } else { michael@0: log("smsrequest returned false for manager.delete"); michael@0: ok(false,"SMS delete failed"); michael@0: } michael@0: }; michael@0: michael@0: requestRet.onerror = function(event) { michael@0: log("Received 'onerror' smsrequest event."); michael@0: ok(event.target.error, "domerror obj"); michael@0: ok(false, "manager.delete request returned unexpected error: " michael@0: + event.target.error.name ); michael@0: cleanUp(); michael@0: }; michael@0: } michael@0: michael@0: function cleanUp() { michael@0: manager.onreceived = null; michael@0: SpecialPowers.removePermission("sms", document); michael@0: SpecialPowers.clearUserPref("dom.sms.enabled"); michael@0: SpecialPowers.clearUserPref("dom.sms.requestStatusReport"); michael@0: michael@0: finish(); michael@0: } michael@0: michael@0: // Start the test michael@0: verifyInitialState();