1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/mobilemessage/tests/marionette/test_mark_msg_read.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,228 @@ 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 smsList = new Array(); 1.14 + 1.15 +function verifyInitialState() { 1.16 + log("Verifying initial state."); 1.17 + ok(manager instanceof MozMobileMessageManager, 1.18 + "manager is instance of " + manager.constructor); 1.19 + simulateIncomingSms(); 1.20 +} 1.21 + 1.22 +function simulateIncomingSms() { 1.23 + let text = "Incoming SMS courtesy of Firefox OS"; 1.24 + let remoteNumber = "5557779999"; 1.25 + 1.26 + log("Simulating incoming SMS."); 1.27 + 1.28 + // Simulate incoming SMS sent from remoteNumber to our emulator 1.29 + rcvdEmulatorCallback = false; 1.30 + runEmulatorCmd("sms send " + remoteNumber + " " + text, function(result) { 1.31 + is(result[0], "OK", "emulator callback"); 1.32 + rcvdEmulatorCallback = true; 1.33 + }); 1.34 +} 1.35 + 1.36 +// Callback for incoming SMS 1.37 +manager.onreceived = function onreceived(event) { 1.38 + log("Received 'onreceived' sms event."); 1.39 + let incomingSms = event.message; 1.40 + log("Received SMS (id: " + incomingSms.id + ")."); 1.41 + is(incomingSms.read, false, "incoming message read"); 1.42 + log("SMS read attribute: " + incomingSms.read + "."); 1.43 + 1.44 + // Add newly received message id to array of msgs 1.45 + smsList.push(incomingSms.id); 1.46 + 1.47 + // Wait for emulator to catch up before continuing 1.48 + waitFor(sendSms, function() { 1.49 + return(rcvdEmulatorCallback); 1.50 + }); 1.51 +}; 1.52 + 1.53 +function sendSms() { 1.54 + let gotSmsSent = false; 1.55 + let gotRequestSuccess = false; 1.56 + let remoteNumber = "5557779999"; 1.57 + let text = "Mo Mo Mo Zilla Zilla Zilla!"; 1.58 + 1.59 + log("Sending an SMS."); 1.60 + 1.61 + manager.onsent = function(event) { 1.62 + log("Received 'onsent' event."); 1.63 + gotSmsSent = true; 1.64 + let sentSms = event.message; 1.65 + log("Sent SMS (id: " + sentSms.id + ")."); 1.66 + is(sentSms.read, true, "sent sms read"); 1.67 + log("SMS read attribute: " + sentSms.read + "."); 1.68 + 1.69 + // Add newly received message id to array of msgs 1.70 + smsList.push(sentSms.id); 1.71 + 1.72 + if (gotSmsSent && gotRequestSuccess) { 1.73 + test1(); 1.74 + } 1.75 + }; 1.76 + 1.77 + let request = manager.send(remoteNumber, text); 1.78 + 1.79 + request.onsuccess = function(event) { 1.80 + log("Received 'onsuccess' smsrequest event."); 1.81 + if(event.target.result) { 1.82 + gotRequestSuccess = true; 1.83 + if (gotSmsSent && gotRequestSuccess) { 1.84 + test1(); 1.85 + } 1.86 + } else { 1.87 + log("smsrequest returned false for manager.send"); 1.88 + ok(false, "SMS send failed"); 1.89 + deleteMsgs(); 1.90 + } 1.91 + }; 1.92 + 1.93 + request.onerror = function(event) { 1.94 + log("Received 'onerror' smsrequest event."); 1.95 + ok(event.target.error, "domerror obj"); 1.96 + ok(false, "manager.send request returned unexpected error: " 1.97 + + event.target.error.name ); 1.98 + deleteMsgs(); 1.99 + }; 1.100 +} 1.101 + 1.102 +function markMessageAndVerify(smsId, readBool, nextFunction) { 1.103 + let request = manager.markMessageRead(smsId, readBool); 1.104 + ok(request instanceof DOMRequest, 1.105 + "request is instanceof " + request.constructor); 1.106 + 1.107 + request.onsuccess = function(event) { 1.108 + log("Received 'onsuccess' smsrequest event."); 1.109 + 1.110 + // Success from MarkMessageRead, the result should match what we set 1.111 + is(event.target.result, readBool, "result matches what was set"); 1.112 + 1.113 + // Message marked read/unread, now verify 1.114 + log("Getting SMS message (id: " + smsId + ")."); 1.115 + let requestRet = manager.getMessage(smsId); 1.116 + ok(requestRet, "smsrequest obj returned"); 1.117 + 1.118 + requestRet.onsuccess = function(event) { 1.119 + log("Received 'onsuccess' smsrequest event."); 1.120 + ok(event.target.result, "smsrequest event.target.result"); 1.121 + let foundSms = event.target.result; 1.122 + is(foundSms.id, smsId, "SMS id matches"); 1.123 + log("SMS read attribute: " + foundSms.read + "."); 1.124 + let text = readBool ? "read" : "unread"; 1.125 + if (foundSms.read == readBool) { 1.126 + ok(true, "marked sms " + text); 1.127 + } else { 1.128 + ok(false, "marking sms " + text + " didn't work"); 1.129 + log("Expected SMS (id: " + foundSms.id + ") to be marked " + text 1.130 + + " but it is not."); 1.131 + } 1.132 + nextFunction(); 1.133 + }; 1.134 + 1.135 + requestRet.onerror = function(event) { 1.136 + log("Received 'onerror' smsrequest event."); 1.137 + ok(event.target.error, "domerror obj"); 1.138 + is(event.target.error.name, "NotFoundError", "error returned"); 1.139 + log("Could not get SMS (id: " + outSmsId + ") but should have."); 1.140 + ok(false, "Could not get SMS"); 1.141 + deleteMsgs(); 1.142 + }; 1.143 + }; 1.144 + 1.145 + request.onerror = function(event) { 1.146 + log("Received 'onerror' smsrequest event."); 1.147 + ok(event.target.error, "domerror obj"); 1.148 + ok(false, "manager.markMessageRead request returned unexpected error: " 1.149 + + event.target.error.name ); 1.150 + nextFunction(); 1.151 + }; 1.152 +} 1.153 + 1.154 +function test1() { 1.155 + rcvdSms = smsList[0]; 1.156 + log("Test 1: Marking received SMS (id: " + rcvdSms + ") read."); 1.157 + markMessageAndVerify(rcvdSms, true, test2); 1.158 +} 1.159 + 1.160 +function test2() { 1.161 + rcvdSms = smsList[0]; 1.162 + log("Test 2: Marking received SMS (id: " + rcvdSms + ") unread."); 1.163 + markMessageAndVerify(rcvdSms, false, test3); 1.164 +} 1.165 + 1.166 +function test3() { 1.167 + sentSms = smsList[1]; 1.168 + log("Test 3: Marking sent SMS (id: " + sentSms + ") unread."); 1.169 + markMessageAndVerify(sentSms, false, test4); 1.170 +} 1.171 + 1.172 +function test4() { 1.173 + sentSms = smsList[1]; 1.174 + log("Test 4: Marking sent SMS (id: " + sentSms + ") read."); 1.175 + markMessageAndVerify(sentSms, true, test5); 1.176 +} 1.177 + 1.178 +function test5() { 1.179 + sentSms = smsList[1]; 1.180 + log("Test 5: Marking an already read SMS (id: " + sentSms + ") read."); 1.181 + markMessageAndVerify(sentSms, true, test6); 1.182 +} 1.183 + 1.184 +function test6() { 1.185 + rcvdSms = smsList[0]; 1.186 + log("Test 6: Marking an already unread SMS (id: " + rcvdSms + ") unread."); 1.187 + markMessageAndVerify(rcvdSms, false, deleteMsgs); 1.188 +} 1.189 + 1.190 +function deleteMsgs() { 1.191 + let smsId = smsList.shift(); 1.192 + 1.193 + log("Deleting SMS (id: " + smsId + ")."); 1.194 + let request = manager.delete(smsId); 1.195 + ok(request instanceof DOMRequest, 1.196 + "request is instanceof " + request.constructor); 1.197 + 1.198 + request.onsuccess = function(event) { 1.199 + log("Received 'onsuccess' smsrequest event."); 1.200 + if (event.target.result) { 1.201 + // Message deleted, continue until none are left 1.202 + if (smsList.length) { 1.203 + deleteMsgs(); 1.204 + } else { 1.205 + cleanUp(); 1.206 + } 1.207 + } else { 1.208 + log("SMS delete failed."); 1.209 + ok(false, "manager.delete request returned false"); 1.210 + cleanUp(); 1.211 + } 1.212 + }; 1.213 + 1.214 + request.onerror = function(event) { 1.215 + log("Received 'onerror' smsrequest event."); 1.216 + ok(event.target.error, "domerror obj"); 1.217 + ok(false, "manager.delete request returned unexpected error: " 1.218 + + event.target.error.name ); 1.219 + cleanUp(); 1.220 + }; 1.221 +} 1.222 + 1.223 +function cleanUp() { 1.224 + manager.onreceived = null; 1.225 + SpecialPowers.removePermission("sms", document); 1.226 + SpecialPowers.clearUserPref("dom.sms.enabled"); 1.227 + finish(); 1.228 +} 1.229 + 1.230 +// Start the test 1.231 +verifyInitialState();