1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/mobilemessage/tests/marionette/test_getmessages.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,227 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + * http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +MARIONETTE_TIMEOUT = 60000; 1.8 + 1.9 +SpecialPowers.addPermission("sms", true, document); 1.10 +SpecialPowers.setBoolPref("dom.sms.enabled", true); 1.11 + 1.12 +let manager = window.navigator.mozMobileMessage; 1.13 +let numberMsgs = 10; 1.14 +let smsList = new Array(); 1.15 + 1.16 +function verifyInitialState() { 1.17 + log("Verifying initial state."); 1.18 + ok(manager instanceof MozMobileMessageManager, 1.19 + "manager is instance of " + manager.constructor); 1.20 + // Ensure test is starting clean with no existing sms messages 1.21 + deleteAllMsgs(simulateIncomingSms); 1.22 +} 1.23 + 1.24 +function isIn(aVal, aArray, aMsg) { 1.25 + ok(aArray.indexOf(aVal) >= 0, aMsg); 1.26 +} 1.27 + 1.28 +function deleteAllMsgs(nextFunction) { 1.29 + let msgList = new Array(); 1.30 + let smsFilter = new MozSmsFilter; 1.31 + 1.32 + let cursor = manager.getMessages(smsFilter, false); 1.33 + ok(cursor instanceof DOMCursor, 1.34 + "cursor is instanceof " + cursor.constructor); 1.35 + 1.36 + cursor.onsuccess = function(event) { 1.37 + // Check if message was found 1.38 + if (cursor.result) { 1.39 + msgList.push(cursor.result.id); 1.40 + // Now get next message in the list 1.41 + cursor.continue(); 1.42 + } else { 1.43 + // No (more) messages found 1.44 + if (msgList.length) { 1.45 + log("Found " + msgList.length + " SMS messages to delete."); 1.46 + deleteMsgs(msgList, nextFunction); 1.47 + } else { 1.48 + log("No SMS messages found."); 1.49 + nextFunction(); 1.50 + } 1.51 + } 1.52 + }; 1.53 + 1.54 + cursor.onerror = function(event) { 1.55 + log("Received 'onerror' event."); 1.56 + ok(event.target.error, "domerror obj"); 1.57 + log("manager.getMessages error: " + event.target.error.name); 1.58 + ok(false,"Could not get SMS messages"); 1.59 + cleanUp(); 1.60 + }; 1.61 +} 1.62 + 1.63 +function deleteMsgs(msgList, nextFunction) { 1.64 + let smsId = msgList.shift(); 1.65 + 1.66 + log("Deleting SMS (id: " + smsId + ")."); 1.67 + let request = manager.delete(smsId); 1.68 + ok(request instanceof DOMRequest, 1.69 + "request is instanceof " + request.constructor); 1.70 + 1.71 + request.onsuccess = function(event) { 1.72 + log("Received 'onsuccess' smsrequest event."); 1.73 + if (event.target.result) { 1.74 + // Message deleted, continue until none are left 1.75 + if (msgList.length) { 1.76 + deleteMsgs(msgList, nextFunction); 1.77 + } else { 1.78 + log("Finished deleting SMS messages."); 1.79 + nextFunction(); 1.80 + } 1.81 + } else { 1.82 + log("SMS delete failed."); 1.83 + ok(false,"manager.delete request returned false"); 1.84 + cleanUp(); 1.85 + } 1.86 + }; 1.87 + 1.88 + request.onerror = function(event) { 1.89 + log("Received 'onerror' smsrequest event."); 1.90 + ok(event.target.error, "domerror obj"); 1.91 + ok(false, "manager.delete request returned unexpected error: " 1.92 + + event.target.error.name ); 1.93 + cleanUp(); 1.94 + }; 1.95 +} 1.96 + 1.97 +function simulateIncomingSms() { 1.98 + let text = "Incoming SMS number " + (smsList.length + 1); 1.99 + let remoteNumber = "5552229797"; 1.100 + 1.101 + log("Simulating incoming SMS number " + (smsList.length + 1) + " of " 1.102 + + numberMsgs + "."); 1.103 + 1.104 + // Simulate incoming sms sent from remoteNumber to our emulator 1.105 + rcvdEmulatorCallback = false; 1.106 + runEmulatorCmd("sms send " + remoteNumber + " " + text, function(result) { 1.107 + is(result[0], "OK", "emulator callback"); 1.108 + rcvdEmulatorCallback = true; 1.109 + }); 1.110 +} 1.111 + 1.112 +// Callback for incoming sms 1.113 +manager.onreceived = function onreceived(event) { 1.114 + log("Received 'onreceived' sms event."); 1.115 + let incomingSms = event.message; 1.116 + log("Received SMS (id: " + incomingSms.id + ")."); 1.117 + 1.118 + // Add newly received message to array of received msgs 1.119 + smsList.push(incomingSms); 1.120 + 1.121 + // Wait for emulator to catch up before continuing 1.122 + waitFor(nextRep,function() { 1.123 + return(rcvdEmulatorCallback); 1.124 + }); 1.125 +}; 1.126 + 1.127 +function nextRep() { 1.128 + if (smsList.length < numberMsgs) { 1.129 + simulateIncomingSms(); 1.130 + } else { 1.131 + log("Received " + numberMsgs + " sms messages in total."); 1.132 + getMsgs(false); 1.133 + } 1.134 +} 1.135 + 1.136 +function getMsgs(reverse) { 1.137 + let smsFilter = new MozSmsFilter; 1.138 + let foundSmsCount = 0; 1.139 + let foundSmsList = new Array(); 1.140 + 1.141 + if (!reverse) { 1.142 + log("Getting the sms messages."); 1.143 + } else { 1.144 + log("Getting the sms messages in reverse order."); 1.145 + } 1.146 + 1.147 + // Note: This test is intended for getMessages, so just a basic test with 1.148 + // no filter (default); separate tests will be written for sms filtering 1.149 + let cursor = manager.getMessages(smsFilter, reverse); 1.150 + ok(cursor instanceof DOMCursor, 1.151 + "cursor is instanceof " + cursor.constructor); 1.152 + 1.153 + cursor.onsuccess = function(event) { 1.154 + log("Received 'onsuccess' event."); 1.155 + 1.156 + if (cursor.result) { 1.157 + // Another message found 1.158 + log("Got SMS (id: " + cursor.result.id + ")."); 1.159 + foundSmsCount++; 1.160 + // Store found message 1.161 + foundSmsList.push(cursor.result); 1.162 + // Now get next message in the list 1.163 + cursor.continue(); 1.164 + } else { 1.165 + // No more messages; ensure correct number found 1.166 + if (foundSmsCount == numberMsgs) { 1.167 + log("SMS getMessages returned " + foundSmsCount + 1.168 + " messages as expected."); 1.169 + } else { 1.170 + log("SMS getMessages returned " + foundSmsCount + 1.171 + " messages, but expected " + numberMsgs + "."); 1.172 + ok(false, "Incorrect number of messages returned by manager.getMessages"); 1.173 + } 1.174 + verifyFoundMsgs(foundSmsList, reverse); 1.175 + } 1.176 + }; 1.177 + 1.178 + cursor.onerror = function(event) { 1.179 + log("Received 'onerror' event."); 1.180 + ok(event.target.error, "domerror obj"); 1.181 + log("manager.getMessages error: " + event.target.error.name); 1.182 + ok(false,"Could not get SMS messages"); 1.183 + cleanUp(); 1.184 + }; 1.185 +} 1.186 + 1.187 +function verifyFoundMsgs(foundSmsList, reverse) { 1.188 + if (reverse) { 1.189 + smsList.reverse(); 1.190 + } 1.191 + for (var x = 0; x < numberMsgs; x++) { 1.192 + is(foundSmsList[x].id, smsList[x].id, "id"); 1.193 + is(foundSmsList[x].threadId, smsList[x].threadId, "thread id"); 1.194 + is(foundSmsList[x].body, smsList[x].body, "body"); 1.195 + is(foundSmsList[x].delivery, smsList[x].delivery, "delivery"); 1.196 + is(foundSmsList[x].read, smsList[x].read, "read"); 1.197 + 1.198 + // Bug 805799: receiver null when onreceived event is fired, until do a 1.199 + // getMessage. Default emulator (receiver) phone number is 15555215554 1.200 + if (!smsList[x].receiver) { 1.201 + isIn(foundSmsList[x].receiver, ["15555215554", "+15555215554"], "receiver"); 1.202 + } else { 1.203 + isIn(foundSmsList[x].receiver, [smsList[x].receiver, "+15555215554"], "receiver"); 1.204 + } 1.205 + 1.206 + isIn(foundSmsList[x].sender, [smsList[x].sender, "+15552229797"], "sender"); 1.207 + is(foundSmsList[x].timestamp, smsList[x].timestamp, "timestamp"); 1.208 + is(foundSmsList[x].sentTimestamp, smsList[x].sentTimestamp, "sentTimestamp"); 1.209 + } 1.210 + 1.211 + log("Content in all of the returned SMS messages is correct."); 1.212 + 1.213 + if (!reverse) { 1.214 + // Now get messages in reverse 1.215 + getMsgs(true); 1.216 + } else { 1.217 + // Finished, delete all messages 1.218 + deleteAllMsgs(cleanUp); 1.219 + }; 1.220 +} 1.221 + 1.222 +function cleanUp() { 1.223 + manager.onreceived = null; 1.224 + SpecialPowers.removePermission("sms", document); 1.225 + SpecialPowers.clearUserPref("dom.sms.enabled"); 1.226 + finish(); 1.227 +} 1.228 + 1.229 +// Start the test 1.230 +verifyInitialState();