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.setBoolPref("dom.sms.requestStatusReport", true);
8 SpecialPowers.addPermission("sms", true, document);
10 const REMOTE = "5559997777"; // the remote number
11 const EMULATOR = "15555215554"; // the emulator's number
13 let manager = window.navigator.mozMobileMessage;
14 let inText = "Incoming SMS message. Mozilla Firefox OS!";
15 let outText = "Outgoing SMS message. Mozilla Firefox OS!";
16 let gotSmsOnsent = false;
17 let gotReqOnsuccess = false;
18 let inSmsId = 0;
19 let outSmsId = 0;
20 let inThreadId = 0;
21 let outThreadId = 0;
22 let inSmsTimeStamp;
23 let inSmsSentTimeStamp;
24 let outSmsTimeStamp;
25 let outSmsSentTimeStamp;
27 function verifyInitialState() {
28 log("Verifying initial state.");
29 ok(manager instanceof MozMobileMessageManager,
30 "manager is instance of " + manager.constructor);
31 simulateIncomingSms();
32 }
34 function simulateIncomingSms() {
35 log("Simulating incoming SMS.");
37 manager.onreceived = function onreceived(event) {
38 log("Received 'onreceived' event.");
39 let incomingSms = event.message;
40 ok(incomingSms, "incoming sms");
41 ok(incomingSms.id, "sms id");
42 inSmsId = incomingSms.id;
43 log("Received SMS (id: " + inSmsId + ").");
44 ok(incomingSms.threadId, "thread id");
45 inThreadId = incomingSms.threadId;
46 is(incomingSms.body, inText, "msg body");
47 is(incomingSms.delivery, "received", "delivery");
48 is(incomingSms.deliveryStatus, "success", "deliveryStatus");
49 is(incomingSms.read, false, "read");
50 is(incomingSms.receiver, EMULATOR, "receiver");
51 is(incomingSms.sender, REMOTE, "sender");
52 is(incomingSms.messageClass, "normal", "messageClass");
53 inSmsTimeStamp = incomingSms.timestamp;
54 inSmsSentTimeStamp = incomingSms.sentTimestamp;
55 sendSms();
56 };
57 // Simulate incoming sms sent from remoteNumber to our emulator
58 runEmulatorCmd("sms send " + REMOTE + " " + inText, function(result) {
59 is(result[0], "OK", "emulator output");
60 });
61 }
63 function sendSms() {
64 log("Sending an SMS.");
65 manager.onsent = function(event) {
66 log("Received 'onsent' event.");
67 gotSmsOnsent = true;
68 let sentSms = event.message;
69 ok(sentSms, "outgoing sms");
70 ok(sentSms.id, "sms id");
71 outSmsId = sentSms.id;
72 log("Sent SMS (id: " + outSmsId + ").");
73 ok(sentSms.threadId, "thread id");
74 outThreadId = sentSms.threadId;
75 is(sentSms.body, outText, "msg body");
76 is(sentSms.delivery, "sent", "delivery");
77 is(sentSms.deliveryStatus, "pending", "deliveryStatus");
78 is(sentSms.read, true, "read");
79 is(sentSms.receiver, REMOTE, "receiver");
80 is(sentSms.sender, EMULATOR, "sender");
81 is(sentSms.messageClass, "normal", "messageClass");
82 outSmsTimeStamp = sentSms.timestamp;
83 outSmsSentTimeStamp = sentSms.sentTimestamp;
84 is(sentSms.deliveryTimestamp, 0, "deliveryTimestamp is 0");
86 if (gotSmsOnsent && gotReqOnsuccess) { getReceivedSms(); }
87 };
89 let requestRet = manager.send(REMOTE, outText);
90 ok(requestRet, "smsrequest obj returned");
92 requestRet.onsuccess = function(event) {
93 log("Received 'onsuccess' smsrequest event.");
94 gotReqOnsuccess = true;
95 if(event.target.result){
96 if (gotSmsOnsent && gotReqOnsuccess) { getReceivedSms(); }
97 } else {
98 log("smsrequest returned false for manager.send");
99 ok(false,"SMS send failed");
100 cleanUp();
101 }
102 };
104 requestRet.onerror = function(event) {
105 log("Received 'onerror' smsrequest event.");
106 ok(event.target.error, "domerror obj");
107 ok(false, "manager.send request returned unexpected error: "
108 + event.target.error.name );
109 cleanUp();
110 };
111 }
113 function getReceivedSms() {
114 log("Getting the received SMS message (id: " + inSmsId + ").");
116 let requestRet = manager.getMessage(inSmsId);
117 ok(requestRet, "smsrequest obj returned");
119 requestRet.onsuccess = function(event) {
120 log("Received 'onsuccess' smsrequest event.");
121 ok(event.target.result, "smsrequest event.target.result");
122 let foundSms = event.target.result;
123 is(foundSms.id, inSmsId, "SMS id matches");
124 log("Got SMS (id: " + foundSms.id + ").");
125 is(foundSms.threadId, inThreadId, "thread id matches");
126 is(foundSms.body, inText, "SMS msg text matches");
127 is(foundSms.delivery, "received", "delivery");
128 is(foundSms.deliveryStatus, "success", "deliveryStatus");
129 is(foundSms.read, false, "read");
130 is(foundSms.receiver, EMULATOR, "receiver");
131 is(foundSms.sender, REMOTE, "sender");
132 is(foundSms.messageClass, "normal", "messageClass");
133 is(foundSms.timestamp, inSmsTimeStamp, "timestamp matches");
134 is(foundSms.sentTimestamp, inSmsSentTimeStamp, "sentTimestamp matches");
135 getSentSms();
136 };
138 requestRet.onerror = function(event) {
139 log("Received 'onerror' smsrequest event.");
140 ok(event.target.error, "domerror obj");
141 is(event.target.error.name, "NotFoundError", "error returned");
142 log("Could not get SMS (id: " + inSmsId + ") but should have.");
143 ok(false,"Could not get received SMS");
144 cleanUp();
145 };
146 }
148 function getSentSms() {
149 log("Getting the sent SMS message (id: " + outSmsId + ").");
150 let requestRet = manager.getMessage(outSmsId);
151 ok(requestRet, "smsrequest obj returned");
153 requestRet.onsuccess = function(event) {
154 log("Received 'onsuccess' smsrequest event.");
155 ok(event.target.result, "smsrequest event.target.result");
156 let foundSms = event.target.result;
157 is(foundSms.id, outSmsId, "SMS id matches");
158 log("Got SMS (id: " + foundSms.id + ").");
159 is(foundSms.threadId, outThreadId, "thread id matches");
160 is(foundSms.body, outText, "SMS msg text matches");
161 is(foundSms.delivery, "sent", "delivery");
162 is(foundSms.deliveryStatus, "pending", "deliveryStatus");
163 is(foundSms.read, true, "read");
164 is(foundSms.receiver, REMOTE, "receiver");
165 is(foundSms.sender, EMULATOR, "sender");
166 is(foundSms.messageClass, "normal", "messageClass");
167 is(foundSms.timestamp, outSmsTimeStamp, "timestamp matches");
168 is(foundSms.sentTimestamp, outSmsSentTimeStamp, "sentTimestamp matches");
169 deleteMsgs();
170 };
172 requestRet.onerror = function(event) {
173 log("Received 'onerror' smsrequest event.");
174 ok(event.target.error, "domerror obj");
175 is(event.target.error.name, "NotFoundError", "error returned");
176 log("Could not get SMS (id: " + outSmsId + ") but should have.");
177 ok(false,"Could not get sent SMS");
178 cleanUp();
179 };
180 }
182 function deleteMsgs() {
183 log("Deleting SMS (id: " + inSmsId + ").");
184 let requestRet = manager.delete(inSmsId);
185 ok(requestRet,"smsrequest obj returned");
187 requestRet.onsuccess = function(event) {
188 log("Received 'onsuccess' smsrequest event.");
189 if(event.target.result){
190 log("Deleting SMS (id: " + outSmsId + ").");
191 let nextReqRet = manager.delete(outSmsId);
192 ok(nextReqRet,"smsrequest obj returned");
194 nextReqRet.onsuccess = function(event) {
195 log("Received 'onsuccess' smsrequest event.");
196 if(event.target.result) {
197 cleanUp();
198 } else {
199 log("smsrequest returned false for manager.delete");
200 ok(false,"SMS delete failed");
201 }
202 };
203 } else {
204 log("smsrequest returned false for manager.delete");
205 ok(false,"SMS delete failed");
206 }
207 };
209 requestRet.onerror = function(event) {
210 log("Received 'onerror' smsrequest event.");
211 ok(event.target.error, "domerror obj");
212 ok(false, "manager.delete request returned unexpected error: "
213 + event.target.error.name );
214 cleanUp();
215 };
216 }
218 function cleanUp() {
219 manager.onreceived = null;
220 SpecialPowers.removePermission("sms", document);
221 SpecialPowers.clearUserPref("dom.sms.enabled");
222 SpecialPowers.clearUserPref("dom.sms.requestStatusReport");
224 finish();
225 }
227 // Start the test
228 verifyInitialState();