Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 /* Any copyright is dedicated to the Public Domain.
2 * http://creativecommons.org/publicdomain/zero/1.0/ */
4 MARIONETTE_TIMEOUT = 60000;
6 SpecialPowers.setBoolPref("dom.sms.enabled", true);
7 SpecialPowers.addPermission("sms", true, document);
9 const SENDER = "5555552368"; // the remote number
10 const RECEIVER = "15555215554"; // the emulator's number
12 let manager = window.navigator.mozMobileMessage;
13 let MSG_TEXT = "Mozilla Firefox OS!";
14 let SMS_NUMBER = 100;
16 let SmsList = [];
17 let checkDone = true;
18 let emulatorReady = true;
20 let pendingEmulatorCmdCount = 0;
21 function sendSmsToEmulator(from, text) {
22 ++pendingEmulatorCmdCount;
24 let cmd = "sms send " + from + " " + text;
25 runEmulatorCmd(cmd, function(result) {
26 --pendingEmulatorCmdCount;
28 is(result[0], "OK", "Emulator response");
29 });
30 }
32 let tasks = {
33 // List of test fuctions. Each of them should call |tasks.next()| when
34 // completed or |tasks.finish()| to jump to the last one.
35 _tasks: [],
36 _nextTaskIndex: 0,
38 push: function(func) {
39 this._tasks.push(func);
40 },
42 next: function() {
43 let index = this._nextTaskIndex++;
44 let task = this._tasks[index];
45 try {
46 task();
47 } catch (ex) {
48 ok(false, "test task[" + index + "] throws: " + ex);
49 // Run last task as clean up if possible.
50 if (index != this._tasks.length - 1) {
51 this.finish();
52 }
53 }
54 },
56 finish: function() {
57 this._tasks[this._tasks.length - 1]();
58 },
60 run: function() {
61 this.next();
62 }
63 };
65 function taskNextWrapper() {
66 tasks.next();
67 }
69 function verifySmsExists(incomingSms) {
70 log("Getting SMS (id: " + incomingSms.id + ").");
71 let requestRet = manager.getMessage(incomingSms.id);
72 ok(requestRet, "smsrequest obj returned");
74 requestRet.onsuccess = function(event) {
75 log("Received 'onsuccess' smsrequest event.");
76 ok(event.target.result, "smsrequest event.target.result");
77 let foundSms = event.target.result;
78 is(foundSms.id, incomingSms.id, "found SMS id matches");
79 is(foundSms.threadId, incomingSms.threadId, "found SMS thread id matches");
80 is(foundSms.body, MSG_TEXT, "found SMS msg text matches");
81 is(foundSms.delivery, "received", "delivery");
82 is(foundSms.deliveryStatus, "success", "deliveryStatus");
83 is(foundSms.read, false, "read");
84 is(foundSms.receiver, RECEIVER, "receiver");
85 is(foundSms.sender, SENDER, "sender");
86 is(foundSms.messageClass, "normal", "messageClass");
87 log("Got SMS (id: " + foundSms.id + ") as expected.");
89 SmsList.push(incomingSms);
90 };
92 requestRet.onerror = function(event) {
93 log("Received 'onerror' smsrequest event.");
94 ok(event.target.error, "domerror obj");
95 is(event.target.error.name, "NotFoundError", "error returned");
96 log("Could not get SMS (id: " + incomingSms.id + ") but should have.");
97 ok(false,"SMS was not found");
98 tasks.finish();
99 };
100 }
102 let verifDeletedCount = 0;
103 function verifySmsDeleted(smsId) {
104 log("Getting SMS (id: " + smsId + ").");
105 let requestRet = manager.getMessage(smsId);
106 ok(requestRet, "smsrequest obj returned");
108 requestRet.onsuccess = function(event) {
109 log("Received 'onsuccess' smsrequest event.");
110 ok(event.target.result, "smsrequest event.target.result");
111 let foundSms = event.target.result;
112 is(foundSms.id, smsId, "found SMS id matches");
113 is(foundSms.body, MSG_TEXT, "found SMS msg text matches");
114 log("Got SMS (id: " + foundSms.id + ") but should not have.");
115 ok(false, "SMS was not deleted");
116 tasks.finish();
117 };
119 requestRet.onerror = function(event) {
120 log("Received 'onerror' smsrequest event.");
121 ok(event.target.error, "domerror obj");
122 is(event.target.error.name, "NotFoundError", "error returned");
123 log("Could not get SMS (id: " + smsId + ") as expected.");
124 verifDeletedCount++;
125 };
126 }
128 tasks.push(function init() {
129 log("Initialize test object.");
130 ok(manager instanceof MozMobileMessageManager,
131 "manager is instance of " + manager.constructor);
133 // Callback for incoming sms
134 manager.onreceived = function onreceived(event) {
135 log("Received 'onreceived' event.");
136 let incomingSms = event.message;
137 ok(incomingSms, "incoming sms");
138 ok(incomingSms.id, "sms id");
139 log("Received SMS (id: " + incomingSms.id + ").");
140 ok(incomingSms.threadId, "thread id");
141 is(incomingSms.body, MSG_TEXT, "msg body");
142 is(incomingSms.delivery, "received", "delivery");
143 is(incomingSms.deliveryStatus, "success", "deliveryStatus");
144 is(incomingSms.read, false, "read");
145 is(incomingSms.receiver, RECEIVER, "receiver");
146 is(incomingSms.sender, SENDER, "sender");
147 is(incomingSms.messageClass, "normal", "messageClass");
148 is(incomingSms.deliveryTimestamp, 0, "deliveryTimestamp is 0");
150 verifySmsExists(incomingSms);
151 };
153 tasks.next();
154 });
156 tasks.push(function sendAllSms() {
157 log("Send " + SMS_NUMBER + " SMS");
158 for (let i = 0; i < SMS_NUMBER; i++) {
159 sendSmsToEmulator(SENDER, MSG_TEXT);
160 }
162 waitFor(taskNextWrapper, function() {
163 return (pendingEmulatorCmdCount === 0) && (SmsList.length === SMS_NUMBER);
164 });
165 });
167 tasks.push(function deleteAllSms() {
168 log("Deleting SMS using smsmsg obj array parameter.");
169 let deleteStart = Date.now();
170 log("deleteStart: " + deleteStart);
171 log("SmsList: " + JSON.stringify(SmsList));
172 let requestRet = manager.delete(SmsList);
173 ok(requestRet,"smsrequest obj returned");
175 requestRet.onsuccess = function(event) {
176 let deleteDone = Date.now();
177 log("Delete " + SMS_NUMBER + " SMS takes " + (deleteDone - deleteStart) + " ms.");
178 log("Received 'onsuccess' smsrequest event.");
179 if (event.target.result) {
180 for (let i = 0; i < SmsList.length; i++) {
181 verifySmsDeleted(SmsList[i].id);
182 }
183 } else {
184 log("smsrequest returned false for manager.delete");
185 ok(false, "SMS delete failed");
186 }
187 };
189 requestRet.onerror = function(event) {
190 log("Received 'onerror' smsrequest event.");
191 ok(event.target.error, "domerror obj");
192 ok(false, "manager.delete request returned unexpected error: "
193 + event.target.error.name);
194 tasks.finish();
195 };
197 waitFor(taskNextWrapper, function() {
198 return verifDeletedCount === SMS_NUMBER;
199 });
200 });
202 // WARNING: All tasks should be pushed before this!!!
203 tasks.push(function cleanUp() {
204 if (pendingEmulatorCmdCount) {
205 window.setTimeout(cleanUp, 100);
206 return;
207 }
209 manager.onreceived = null;
210 SpecialPowers.removePermission("sms", document);
211 SpecialPowers.setBoolPref("dom.sms.enabled", false);
212 log("Finish!!!");
213 finish();
214 });
216 // Start the test
217 tasks.run();