dom/mobilemessage/tests/marionette/test_getmessages.js

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:b89612dd7874
1 /* Any copyright is dedicated to the Public Domain.
2 * http://creativecommons.org/publicdomain/zero/1.0/ */
3
4 MARIONETTE_TIMEOUT = 60000;
5
6 SpecialPowers.addPermission("sms", true, document);
7 SpecialPowers.setBoolPref("dom.sms.enabled", true);
8
9 let manager = window.navigator.mozMobileMessage;
10 let numberMsgs = 10;
11 let smsList = new Array();
12
13 function verifyInitialState() {
14 log("Verifying initial state.");
15 ok(manager instanceof MozMobileMessageManager,
16 "manager is instance of " + manager.constructor);
17 // Ensure test is starting clean with no existing sms messages
18 deleteAllMsgs(simulateIncomingSms);
19 }
20
21 function isIn(aVal, aArray, aMsg) {
22 ok(aArray.indexOf(aVal) >= 0, aMsg);
23 }
24
25 function deleteAllMsgs(nextFunction) {
26 let msgList = new Array();
27 let smsFilter = new MozSmsFilter;
28
29 let cursor = manager.getMessages(smsFilter, false);
30 ok(cursor instanceof DOMCursor,
31 "cursor is instanceof " + cursor.constructor);
32
33 cursor.onsuccess = function(event) {
34 // Check if message was found
35 if (cursor.result) {
36 msgList.push(cursor.result.id);
37 // Now get next message in the list
38 cursor.continue();
39 } else {
40 // No (more) messages found
41 if (msgList.length) {
42 log("Found " + msgList.length + " SMS messages to delete.");
43 deleteMsgs(msgList, nextFunction);
44 } else {
45 log("No SMS messages found.");
46 nextFunction();
47 }
48 }
49 };
50
51 cursor.onerror = function(event) {
52 log("Received 'onerror' event.");
53 ok(event.target.error, "domerror obj");
54 log("manager.getMessages error: " + event.target.error.name);
55 ok(false,"Could not get SMS messages");
56 cleanUp();
57 };
58 }
59
60 function deleteMsgs(msgList, nextFunction) {
61 let smsId = msgList.shift();
62
63 log("Deleting SMS (id: " + smsId + ").");
64 let request = manager.delete(smsId);
65 ok(request instanceof DOMRequest,
66 "request is instanceof " + request.constructor);
67
68 request.onsuccess = function(event) {
69 log("Received 'onsuccess' smsrequest event.");
70 if (event.target.result) {
71 // Message deleted, continue until none are left
72 if (msgList.length) {
73 deleteMsgs(msgList, nextFunction);
74 } else {
75 log("Finished deleting SMS messages.");
76 nextFunction();
77 }
78 } else {
79 log("SMS delete failed.");
80 ok(false,"manager.delete request returned false");
81 cleanUp();
82 }
83 };
84
85 request.onerror = function(event) {
86 log("Received 'onerror' smsrequest event.");
87 ok(event.target.error, "domerror obj");
88 ok(false, "manager.delete request returned unexpected error: "
89 + event.target.error.name );
90 cleanUp();
91 };
92 }
93
94 function simulateIncomingSms() {
95 let text = "Incoming SMS number " + (smsList.length + 1);
96 let remoteNumber = "5552229797";
97
98 log("Simulating incoming SMS number " + (smsList.length + 1) + " of "
99 + numberMsgs + ".");
100
101 // Simulate incoming sms sent from remoteNumber to our emulator
102 rcvdEmulatorCallback = false;
103 runEmulatorCmd("sms send " + remoteNumber + " " + text, function(result) {
104 is(result[0], "OK", "emulator callback");
105 rcvdEmulatorCallback = true;
106 });
107 }
108
109 // Callback for incoming sms
110 manager.onreceived = function onreceived(event) {
111 log("Received 'onreceived' sms event.");
112 let incomingSms = event.message;
113 log("Received SMS (id: " + incomingSms.id + ").");
114
115 // Add newly received message to array of received msgs
116 smsList.push(incomingSms);
117
118 // Wait for emulator to catch up before continuing
119 waitFor(nextRep,function() {
120 return(rcvdEmulatorCallback);
121 });
122 };
123
124 function nextRep() {
125 if (smsList.length < numberMsgs) {
126 simulateIncomingSms();
127 } else {
128 log("Received " + numberMsgs + " sms messages in total.");
129 getMsgs(false);
130 }
131 }
132
133 function getMsgs(reverse) {
134 let smsFilter = new MozSmsFilter;
135 let foundSmsCount = 0;
136 let foundSmsList = new Array();
137
138 if (!reverse) {
139 log("Getting the sms messages.");
140 } else {
141 log("Getting the sms messages in reverse order.");
142 }
143
144 // Note: This test is intended for getMessages, so just a basic test with
145 // no filter (default); separate tests will be written for sms filtering
146 let cursor = manager.getMessages(smsFilter, reverse);
147 ok(cursor instanceof DOMCursor,
148 "cursor is instanceof " + cursor.constructor);
149
150 cursor.onsuccess = function(event) {
151 log("Received 'onsuccess' event.");
152
153 if (cursor.result) {
154 // Another message found
155 log("Got SMS (id: " + cursor.result.id + ").");
156 foundSmsCount++;
157 // Store found message
158 foundSmsList.push(cursor.result);
159 // Now get next message in the list
160 cursor.continue();
161 } else {
162 // No more messages; ensure correct number found
163 if (foundSmsCount == numberMsgs) {
164 log("SMS getMessages returned " + foundSmsCount +
165 " messages as expected.");
166 } else {
167 log("SMS getMessages returned " + foundSmsCount +
168 " messages, but expected " + numberMsgs + ".");
169 ok(false, "Incorrect number of messages returned by manager.getMessages");
170 }
171 verifyFoundMsgs(foundSmsList, reverse);
172 }
173 };
174
175 cursor.onerror = function(event) {
176 log("Received 'onerror' event.");
177 ok(event.target.error, "domerror obj");
178 log("manager.getMessages error: " + event.target.error.name);
179 ok(false,"Could not get SMS messages");
180 cleanUp();
181 };
182 }
183
184 function verifyFoundMsgs(foundSmsList, reverse) {
185 if (reverse) {
186 smsList.reverse();
187 }
188 for (var x = 0; x < numberMsgs; x++) {
189 is(foundSmsList[x].id, smsList[x].id, "id");
190 is(foundSmsList[x].threadId, smsList[x].threadId, "thread id");
191 is(foundSmsList[x].body, smsList[x].body, "body");
192 is(foundSmsList[x].delivery, smsList[x].delivery, "delivery");
193 is(foundSmsList[x].read, smsList[x].read, "read");
194
195 // Bug 805799: receiver null when onreceived event is fired, until do a
196 // getMessage. Default emulator (receiver) phone number is 15555215554
197 if (!smsList[x].receiver) {
198 isIn(foundSmsList[x].receiver, ["15555215554", "+15555215554"], "receiver");
199 } else {
200 isIn(foundSmsList[x].receiver, [smsList[x].receiver, "+15555215554"], "receiver");
201 }
202
203 isIn(foundSmsList[x].sender, [smsList[x].sender, "+15552229797"], "sender");
204 is(foundSmsList[x].timestamp, smsList[x].timestamp, "timestamp");
205 is(foundSmsList[x].sentTimestamp, smsList[x].sentTimestamp, "sentTimestamp");
206 }
207
208 log("Content in all of the returned SMS messages is correct.");
209
210 if (!reverse) {
211 // Now get messages in reverse
212 getMsgs(true);
213 } else {
214 // Finished, delete all messages
215 deleteAllMsgs(cleanUp);
216 };
217 }
218
219 function cleanUp() {
220 manager.onreceived = null;
221 SpecialPowers.removePermission("sms", document);
222 SpecialPowers.clearUserPref("dom.sms.enabled");
223 finish();
224 }
225
226 // Start the test
227 verifyInitialState();

mercurial