dom/mobilemessage/tests/marionette/test_massive_incoming_delete.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/dom/mobilemessage/tests/marionette/test_massive_incoming_delete.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,217 @@
     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.setBoolPref("dom.sms.enabled", true);
    1.10 +SpecialPowers.addPermission("sms", true, document);
    1.11 +
    1.12 +const SENDER = "5555552368"; // the remote number
    1.13 +const RECEIVER = "15555215554"; // the emulator's number
    1.14 +
    1.15 +let manager = window.navigator.mozMobileMessage;
    1.16 +let MSG_TEXT = "Mozilla Firefox OS!";
    1.17 +let SMS_NUMBER = 100;
    1.18 +
    1.19 +let SmsList = [];
    1.20 +let checkDone = true;
    1.21 +let emulatorReady = true;
    1.22 +
    1.23 +let pendingEmulatorCmdCount = 0;
    1.24 +function sendSmsToEmulator(from, text) {
    1.25 +  ++pendingEmulatorCmdCount;
    1.26 +
    1.27 +  let cmd = "sms send " + from + " " + text;
    1.28 +  runEmulatorCmd(cmd, function(result) {
    1.29 +    --pendingEmulatorCmdCount;
    1.30 +
    1.31 +    is(result[0], "OK", "Emulator response");
    1.32 +  });
    1.33 +}
    1.34 +
    1.35 +let tasks = {
    1.36 +  // List of test fuctions. Each of them should call |tasks.next()| when
    1.37 +  // completed or |tasks.finish()| to jump to the last one.
    1.38 +  _tasks: [],
    1.39 +  _nextTaskIndex: 0,
    1.40 +
    1.41 +  push: function(func) {
    1.42 +    this._tasks.push(func);
    1.43 +  },
    1.44 +
    1.45 +  next: function() {
    1.46 +    let index = this._nextTaskIndex++;
    1.47 +    let task = this._tasks[index];
    1.48 +    try {
    1.49 +      task();
    1.50 +    } catch (ex) {
    1.51 +      ok(false, "test task[" + index + "] throws: " + ex);
    1.52 +      // Run last task as clean up if possible.
    1.53 +      if (index != this._tasks.length - 1) {
    1.54 +        this.finish();
    1.55 +      }
    1.56 +    }
    1.57 +  },
    1.58 +
    1.59 +  finish: function() {
    1.60 +    this._tasks[this._tasks.length - 1]();
    1.61 +  },
    1.62 +
    1.63 +  run: function() {
    1.64 +    this.next();
    1.65 +  }
    1.66 +};
    1.67 +
    1.68 +function taskNextWrapper() {
    1.69 +  tasks.next();
    1.70 +}
    1.71 +
    1.72 +function verifySmsExists(incomingSms) {
    1.73 +  log("Getting SMS (id: " + incomingSms.id + ").");
    1.74 +  let requestRet = manager.getMessage(incomingSms.id);
    1.75 +  ok(requestRet, "smsrequest obj returned");
    1.76 +
    1.77 +  requestRet.onsuccess = function(event) {
    1.78 +    log("Received 'onsuccess' smsrequest event.");
    1.79 +    ok(event.target.result, "smsrequest event.target.result");
    1.80 +    let foundSms = event.target.result;
    1.81 +    is(foundSms.id, incomingSms.id, "found SMS id matches");
    1.82 +    is(foundSms.threadId, incomingSms.threadId, "found SMS thread id matches");
    1.83 +    is(foundSms.body, MSG_TEXT, "found SMS msg text matches");
    1.84 +    is(foundSms.delivery, "received", "delivery");
    1.85 +    is(foundSms.deliveryStatus, "success", "deliveryStatus");
    1.86 +    is(foundSms.read, false, "read");
    1.87 +    is(foundSms.receiver, RECEIVER, "receiver");
    1.88 +    is(foundSms.sender, SENDER, "sender");
    1.89 +    is(foundSms.messageClass, "normal", "messageClass");
    1.90 +    log("Got SMS (id: " + foundSms.id + ") as expected.");
    1.91 +
    1.92 +    SmsList.push(incomingSms);
    1.93 +  };
    1.94 +
    1.95 +  requestRet.onerror = function(event) {
    1.96 +    log("Received 'onerror' smsrequest event.");
    1.97 +    ok(event.target.error, "domerror obj");
    1.98 +    is(event.target.error.name, "NotFoundError", "error returned");
    1.99 +    log("Could not get SMS (id: " + incomingSms.id + ") but should have.");
   1.100 +    ok(false,"SMS was not found");
   1.101 +    tasks.finish();
   1.102 +  };
   1.103 +}
   1.104 +
   1.105 +let verifDeletedCount = 0;
   1.106 +function verifySmsDeleted(smsId) {
   1.107 +  log("Getting SMS (id: " + smsId + ").");
   1.108 +  let requestRet = manager.getMessage(smsId);
   1.109 +  ok(requestRet, "smsrequest obj returned");
   1.110 +
   1.111 +  requestRet.onsuccess = function(event) {
   1.112 +    log("Received 'onsuccess' smsrequest event.");
   1.113 +    ok(event.target.result, "smsrequest event.target.result");
   1.114 +    let foundSms = event.target.result;
   1.115 +    is(foundSms.id, smsId, "found SMS id matches");
   1.116 +    is(foundSms.body, MSG_TEXT, "found SMS msg text matches");
   1.117 +    log("Got SMS (id: " + foundSms.id + ") but should not have.");
   1.118 +    ok(false, "SMS was not deleted");
   1.119 +    tasks.finish();
   1.120 +  };
   1.121 +
   1.122 +  requestRet.onerror = function(event) {
   1.123 +    log("Received 'onerror' smsrequest event.");
   1.124 +    ok(event.target.error, "domerror obj");
   1.125 +    is(event.target.error.name, "NotFoundError", "error returned");
   1.126 +    log("Could not get SMS (id: " + smsId + ") as expected.");
   1.127 +    verifDeletedCount++;
   1.128 +  };
   1.129 +}
   1.130 +
   1.131 +tasks.push(function init() {
   1.132 +  log("Initialize test object.");
   1.133 +  ok(manager instanceof MozMobileMessageManager,
   1.134 +     "manager is instance of " + manager.constructor);
   1.135 +
   1.136 +  // Callback for incoming sms
   1.137 +  manager.onreceived = function onreceived(event) {
   1.138 +    log("Received 'onreceived' event.");
   1.139 +    let incomingSms = event.message;
   1.140 +    ok(incomingSms, "incoming sms");
   1.141 +    ok(incomingSms.id, "sms id");
   1.142 +    log("Received SMS (id: " + incomingSms.id + ").");
   1.143 +    ok(incomingSms.threadId, "thread id");
   1.144 +    is(incomingSms.body, MSG_TEXT, "msg body");
   1.145 +    is(incomingSms.delivery, "received", "delivery");
   1.146 +    is(incomingSms.deliveryStatus, "success", "deliveryStatus");
   1.147 +    is(incomingSms.read, false, "read");
   1.148 +    is(incomingSms.receiver, RECEIVER, "receiver");
   1.149 +    is(incomingSms.sender, SENDER, "sender");
   1.150 +    is(incomingSms.messageClass, "normal", "messageClass");
   1.151 +    is(incomingSms.deliveryTimestamp, 0, "deliveryTimestamp is 0");
   1.152 +
   1.153 +    verifySmsExists(incomingSms);
   1.154 +  };
   1.155 +
   1.156 +  tasks.next();
   1.157 +});
   1.158 +
   1.159 +tasks.push(function sendAllSms() {
   1.160 +  log("Send " + SMS_NUMBER + " SMS");
   1.161 +  for (let i = 0; i < SMS_NUMBER; i++) {
   1.162 +    sendSmsToEmulator(SENDER, MSG_TEXT);
   1.163 +  }
   1.164 +
   1.165 +  waitFor(taskNextWrapper, function() {
   1.166 +    return (pendingEmulatorCmdCount === 0) && (SmsList.length === SMS_NUMBER);
   1.167 +  });
   1.168 +});
   1.169 +
   1.170 +tasks.push(function deleteAllSms() {
   1.171 +  log("Deleting SMS using smsmsg obj array parameter.");
   1.172 +  let deleteStart = Date.now();
   1.173 +  log("deleteStart: " + deleteStart);
   1.174 +  log("SmsList: " + JSON.stringify(SmsList));
   1.175 +  let requestRet = manager.delete(SmsList);
   1.176 +  ok(requestRet,"smsrequest obj returned");
   1.177 +
   1.178 +  requestRet.onsuccess = function(event) {
   1.179 +    let deleteDone = Date.now();
   1.180 +    log("Delete " + SMS_NUMBER + " SMS takes " + (deleteDone - deleteStart) + " ms.");
   1.181 +    log("Received 'onsuccess' smsrequest event.");
   1.182 +    if (event.target.result) {
   1.183 +      for (let i = 0; i < SmsList.length; i++) {
   1.184 +        verifySmsDeleted(SmsList[i].id);
   1.185 +      }
   1.186 +    } else {
   1.187 +      log("smsrequest returned false for manager.delete");
   1.188 +      ok(false, "SMS delete failed");
   1.189 +    }
   1.190 +  };
   1.191 +
   1.192 +  requestRet.onerror = function(event) {
   1.193 +    log("Received 'onerror' smsrequest event.");
   1.194 +    ok(event.target.error, "domerror obj");
   1.195 +    ok(false, "manager.delete request returned unexpected error: "
   1.196 +        + event.target.error.name);
   1.197 +    tasks.finish();
   1.198 +  };
   1.199 +
   1.200 +  waitFor(taskNextWrapper, function() {
   1.201 +    return verifDeletedCount === SMS_NUMBER;
   1.202 +  });
   1.203 +});
   1.204 +
   1.205 +// WARNING: All tasks should be pushed before this!!!
   1.206 +tasks.push(function cleanUp() {
   1.207 +  if (pendingEmulatorCmdCount) {
   1.208 +    window.setTimeout(cleanUp, 100);
   1.209 +    return;
   1.210 +  }
   1.211 +
   1.212 +  manager.onreceived = null;
   1.213 +  SpecialPowers.removePermission("sms", document);
   1.214 +  SpecialPowers.setBoolPref("dom.sms.enabled", false);
   1.215 +  log("Finish!!!");
   1.216 +  finish();
   1.217 +});
   1.218 +
   1.219 +// Start the test
   1.220 +tasks.run();

mercurial