dom/mobilemessage/tests/marionette/test_getmessages.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/dom/mobilemessage/tests/marionette/test_getmessages.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,227 @@
     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 numberMsgs = 10;
    1.14 +let smsList = new Array();
    1.15 +
    1.16 +function verifyInitialState() {
    1.17 +  log("Verifying initial state.");
    1.18 +  ok(manager instanceof MozMobileMessageManager,
    1.19 +     "manager is instance of " + manager.constructor);
    1.20 +  // Ensure test is starting clean with no existing sms messages
    1.21 +  deleteAllMsgs(simulateIncomingSms);
    1.22 +}
    1.23 +
    1.24 +function isIn(aVal, aArray, aMsg) {
    1.25 +  ok(aArray.indexOf(aVal) >= 0, aMsg);
    1.26 +}
    1.27 +
    1.28 +function deleteAllMsgs(nextFunction) {
    1.29 +  let msgList = new Array();
    1.30 +  let smsFilter = new MozSmsFilter;
    1.31 +
    1.32 +  let cursor = manager.getMessages(smsFilter, false);
    1.33 +  ok(cursor instanceof DOMCursor,
    1.34 +      "cursor is instanceof " + cursor.constructor);
    1.35 +
    1.36 +  cursor.onsuccess = function(event) {
    1.37 +    // Check if message was found
    1.38 +    if (cursor.result) {
    1.39 +      msgList.push(cursor.result.id);
    1.40 +      // Now get next message in the list
    1.41 +      cursor.continue();
    1.42 +    } else {
    1.43 +      // No (more) messages found
    1.44 +      if (msgList.length) {
    1.45 +        log("Found " + msgList.length + " SMS messages to delete.");
    1.46 +        deleteMsgs(msgList, nextFunction);
    1.47 +      } else {
    1.48 +        log("No SMS messages found.");
    1.49 +        nextFunction();
    1.50 +      }
    1.51 +    }
    1.52 +  };
    1.53 +
    1.54 +  cursor.onerror = function(event) {
    1.55 +    log("Received 'onerror' event.");
    1.56 +    ok(event.target.error, "domerror obj");
    1.57 +    log("manager.getMessages error: " + event.target.error.name);
    1.58 +    ok(false,"Could not get SMS messages");
    1.59 +    cleanUp();
    1.60 +  };
    1.61 +}
    1.62 +
    1.63 +function deleteMsgs(msgList, nextFunction) {
    1.64 +  let smsId = msgList.shift();
    1.65 +
    1.66 +  log("Deleting SMS (id: " + smsId + ").");
    1.67 +  let request = manager.delete(smsId);
    1.68 +  ok(request instanceof DOMRequest,
    1.69 +      "request is instanceof " + request.constructor);
    1.70 +
    1.71 +  request.onsuccess = function(event) {
    1.72 +    log("Received 'onsuccess' smsrequest event.");
    1.73 +    if (event.target.result) {
    1.74 +      // Message deleted, continue until none are left
    1.75 +      if (msgList.length) {
    1.76 +        deleteMsgs(msgList, nextFunction);
    1.77 +      } else {
    1.78 +        log("Finished deleting SMS messages.");
    1.79 +        nextFunction();
    1.80 +      }
    1.81 +    } else {
    1.82 +      log("SMS delete failed.");
    1.83 +      ok(false,"manager.delete request returned false");
    1.84 +      cleanUp();
    1.85 +    }
    1.86 +  };
    1.87 +
    1.88 +  request.onerror = function(event) {
    1.89 +    log("Received 'onerror' smsrequest event.");
    1.90 +    ok(event.target.error, "domerror obj");
    1.91 +    ok(false, "manager.delete request returned unexpected error: "
    1.92 +        + event.target.error.name );
    1.93 +    cleanUp();
    1.94 +  };
    1.95 +}
    1.96 +
    1.97 +function simulateIncomingSms() {
    1.98 +  let text = "Incoming SMS number " + (smsList.length + 1);
    1.99 +  let remoteNumber = "5552229797";
   1.100 +
   1.101 +  log("Simulating incoming SMS number " + (smsList.length + 1) + " of "
   1.102 +      + numberMsgs + ".");
   1.103 +
   1.104 +  // Simulate incoming sms sent from remoteNumber to our emulator
   1.105 +  rcvdEmulatorCallback = false;
   1.106 +  runEmulatorCmd("sms send " + remoteNumber + " " + text, function(result) {
   1.107 +    is(result[0], "OK", "emulator callback");
   1.108 +    rcvdEmulatorCallback = true;
   1.109 +  });
   1.110 +}
   1.111 +
   1.112 +// Callback for incoming sms
   1.113 +manager.onreceived = function onreceived(event) {
   1.114 +  log("Received 'onreceived' sms event.");
   1.115 +  let incomingSms = event.message;
   1.116 +  log("Received SMS (id: " + incomingSms.id + ").");
   1.117 +
   1.118 +  // Add newly received message to array of received msgs
   1.119 +  smsList.push(incomingSms);
   1.120 +
   1.121 +  // Wait for emulator to catch up before continuing
   1.122 +  waitFor(nextRep,function() {
   1.123 +    return(rcvdEmulatorCallback);
   1.124 +  });
   1.125 +};
   1.126 +
   1.127 +function nextRep() {
   1.128 +  if (smsList.length < numberMsgs) {
   1.129 +    simulateIncomingSms();
   1.130 +  } else {
   1.131 +    log("Received " + numberMsgs + " sms messages in total.");
   1.132 +    getMsgs(false);
   1.133 +  }
   1.134 +}
   1.135 +
   1.136 +function getMsgs(reverse) {
   1.137 +  let smsFilter = new MozSmsFilter;
   1.138 +  let foundSmsCount = 0;
   1.139 +  let foundSmsList = new Array();
   1.140 +
   1.141 +  if (!reverse) {
   1.142 +    log("Getting the sms messages.");
   1.143 +  } else {
   1.144 +    log("Getting the sms messages in reverse order.");
   1.145 +  }
   1.146 +
   1.147 +  // Note: This test is intended for getMessages, so just a basic test with
   1.148 +  // no filter (default); separate tests will be written for sms filtering
   1.149 +  let cursor = manager.getMessages(smsFilter, reverse);
   1.150 +  ok(cursor instanceof DOMCursor,
   1.151 +      "cursor is instanceof " + cursor.constructor);
   1.152 +
   1.153 +  cursor.onsuccess = function(event) {
   1.154 +    log("Received 'onsuccess' event.");
   1.155 +
   1.156 +    if (cursor.result) {
   1.157 +      // Another message found
   1.158 +      log("Got SMS (id: " + cursor.result.id + ").");
   1.159 +      foundSmsCount++;
   1.160 +      // Store found message
   1.161 +      foundSmsList.push(cursor.result);
   1.162 +      // Now get next message in the list
   1.163 +      cursor.continue();
   1.164 +    } else {
   1.165 +      // No more messages; ensure correct number found
   1.166 +      if (foundSmsCount == numberMsgs) {
   1.167 +        log("SMS getMessages returned " + foundSmsCount +
   1.168 +            " messages as expected.");  
   1.169 +      } else {
   1.170 +        log("SMS getMessages returned " + foundSmsCount +
   1.171 +            " messages, but expected " + numberMsgs + ".");
   1.172 +        ok(false, "Incorrect number of messages returned by manager.getMessages");
   1.173 +      }
   1.174 +      verifyFoundMsgs(foundSmsList, reverse);
   1.175 +    }
   1.176 +  };
   1.177 +
   1.178 +  cursor.onerror = function(event) {
   1.179 +    log("Received 'onerror' event.");
   1.180 +    ok(event.target.error, "domerror obj");
   1.181 +    log("manager.getMessages error: " + event.target.error.name);
   1.182 +    ok(false,"Could not get SMS messages");
   1.183 +    cleanUp();
   1.184 +  };
   1.185 +}
   1.186 +
   1.187 +function verifyFoundMsgs(foundSmsList, reverse) {
   1.188 +  if (reverse) {
   1.189 +    smsList.reverse();
   1.190 +  }
   1.191 +  for (var x = 0; x < numberMsgs; x++) {
   1.192 +    is(foundSmsList[x].id, smsList[x].id, "id");
   1.193 +    is(foundSmsList[x].threadId, smsList[x].threadId, "thread id");
   1.194 +    is(foundSmsList[x].body, smsList[x].body, "body");
   1.195 +    is(foundSmsList[x].delivery, smsList[x].delivery, "delivery");
   1.196 +    is(foundSmsList[x].read, smsList[x].read, "read");
   1.197 +
   1.198 +    // Bug 805799: receiver null when onreceived event is fired, until do a
   1.199 +    // getMessage. Default emulator (receiver) phone number is 15555215554
   1.200 +    if (!smsList[x].receiver) {
   1.201 +      isIn(foundSmsList[x].receiver, ["15555215554", "+15555215554"], "receiver");
   1.202 +    } else {
   1.203 +      isIn(foundSmsList[x].receiver, [smsList[x].receiver, "+15555215554"], "receiver");
   1.204 +    }
   1.205 +
   1.206 +    isIn(foundSmsList[x].sender, [smsList[x].sender, "+15552229797"], "sender");
   1.207 +    is(foundSmsList[x].timestamp, smsList[x].timestamp, "timestamp");
   1.208 +    is(foundSmsList[x].sentTimestamp, smsList[x].sentTimestamp, "sentTimestamp");
   1.209 +  }
   1.210 +
   1.211 +  log("Content in all of the returned SMS messages is correct.");
   1.212 +
   1.213 +  if (!reverse) {
   1.214 +    // Now get messages in reverse
   1.215 +    getMsgs(true);
   1.216 +  } else {
   1.217 +    // Finished, delete all messages
   1.218 +    deleteAllMsgs(cleanUp);
   1.219 +  };
   1.220 +}
   1.221 +
   1.222 +function cleanUp() {
   1.223 +  manager.onreceived = null;
   1.224 +  SpecialPowers.removePermission("sms", document);
   1.225 +  SpecialPowers.clearUserPref("dom.sms.enabled");
   1.226 +  finish();
   1.227 +}
   1.228 +
   1.229 +// Start the test
   1.230 +verifyInitialState();

mercurial