dom/mobilemessage/tests/marionette/test_getmessages.js

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 /* Any copyright is dedicated to the Public Domain.
     2  * http://creativecommons.org/publicdomain/zero/1.0/ */
     4 MARIONETTE_TIMEOUT = 60000;
     6 SpecialPowers.addPermission("sms", true, document);
     7 SpecialPowers.setBoolPref("dom.sms.enabled", true);
     9 let manager = window.navigator.mozMobileMessage;
    10 let numberMsgs = 10;
    11 let smsList = new Array();
    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 }
    21 function isIn(aVal, aArray, aMsg) {
    22   ok(aArray.indexOf(aVal) >= 0, aMsg);
    23 }
    25 function deleteAllMsgs(nextFunction) {
    26   let msgList = new Array();
    27   let smsFilter = new MozSmsFilter;
    29   let cursor = manager.getMessages(smsFilter, false);
    30   ok(cursor instanceof DOMCursor,
    31       "cursor is instanceof " + cursor.constructor);
    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   };
    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 }
    60 function deleteMsgs(msgList, nextFunction) {
    61   let smsId = msgList.shift();
    63   log("Deleting SMS (id: " + smsId + ").");
    64   let request = manager.delete(smsId);
    65   ok(request instanceof DOMRequest,
    66       "request is instanceof " + request.constructor);
    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   };
    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 }
    94 function simulateIncomingSms() {
    95   let text = "Incoming SMS number " + (smsList.length + 1);
    96   let remoteNumber = "5552229797";
    98   log("Simulating incoming SMS number " + (smsList.length + 1) + " of "
    99       + numberMsgs + ".");
   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 }
   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 + ").");
   115   // Add newly received message to array of received msgs
   116   smsList.push(incomingSms);
   118   // Wait for emulator to catch up before continuing
   119   waitFor(nextRep,function() {
   120     return(rcvdEmulatorCallback);
   121   });
   122 };
   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 }
   133 function getMsgs(reverse) {
   134   let smsFilter = new MozSmsFilter;
   135   let foundSmsCount = 0;
   136   let foundSmsList = new Array();
   138   if (!reverse) {
   139     log("Getting the sms messages.");
   140   } else {
   141     log("Getting the sms messages in reverse order.");
   142   }
   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);
   150   cursor.onsuccess = function(event) {
   151     log("Received 'onsuccess' event.");
   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   };
   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 }
   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");
   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     }
   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   }
   208   log("Content in all of the returned SMS messages is correct.");
   210   if (!reverse) {
   211     // Now get messages in reverse
   212     getMsgs(true);
   213   } else {
   214     // Finished, delete all messages
   215     deleteAllMsgs(cleanUp);
   216   };
   217 }
   219 function cleanUp() {
   220   manager.onreceived = null;
   221   SpecialPowers.removePermission("sms", document);
   222   SpecialPowers.clearUserPref("dom.sms.enabled");
   223   finish();
   224 }
   226 // Start the test
   227 verifyInitialState();

mercurial