Bug 807777 - Develop tests to verify filtering SMS messages by read/unread, update manifest; r=jgriffin
authorRob Wood <rwood@mozilla.com>
Tue, 06 Nov 2012 16:26:10 -0500
changeset 113179 314b42bfc87c113347e6be257aff480dba388b7e
parent 113178 aa2f835b67a56ab7a3d529b810156670326cd03a
child 113184 29c26199e717ab78a325ea51634c2ea34f5365bd
push id17989
push userjgriffin@mozilla.com
push dateWed, 14 Nov 2012 02:28:44 +0000
treeherdermozilla-inbound@314b42bfc87c [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersjgriffin
bugs807777
milestone19.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 807777 - Develop tests to verify filtering SMS messages by read/unread, update manifest; r=jgriffin
dom/sms/tests/marionette/manifest.ini
dom/sms/tests/marionette/test_filter_read.js
dom/sms/tests/marionette/test_filter_unread.js
--- a/dom/sms/tests/marionette/manifest.ini
+++ b/dom/sms/tests/marionette/manifest.ini
@@ -6,9 +6,11 @@ qemu = true
 ;[test_between_emulators.py]
 [test_incoming.js]
 [test_outgoing.js]
 [test_message_classes.js]
 [test_incoming_delete.js]
 [test_outgoing_delete.js]
 [test_getmessage.js]
 [test_getmessage_notfound.js]
+[test_filter_read.js]
+[test_filter_unread.js]
 [test_number_of_messages.js]
new file mode 100644
--- /dev/null
+++ b/dom/sms/tests/marionette/test_filter_read.js
@@ -0,0 +1,229 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+MARIONETTE_TIMEOUT = 20000;
+
+SpecialPowers.addPermission("sms", true, document);
+SpecialPowers.setBoolPref("dom.sms.enabled", true);
+
+let sms = window.navigator.mozSms;
+let numberMsgs = 10;
+let smsList = new Array();
+
+function verifyInitialState() {
+  log("Verifying initial state.");
+  ok(sms, "mozSms");
+  // Ensure test is starting clean with no existing sms messages
+  deleteAllMsgs(simulateIncomingSms);
+}
+
+function deleteAllMsgs(nextFunction) {
+  let msgList = new Array();
+  let filter = new MozSmsFilter;
+
+  let request = sms.getMessages(filter, false);
+  ok(request instanceof MozSmsRequest,
+      "request is instanceof " + request.constructor);
+
+  request.onsuccess = function(event) {
+    ok(event.target.result, "smsrequest event.target.result");
+    cursor = event.target.result;
+    // Check if message was found
+    if (cursor.message) {
+      msgList.push(cursor.message.id);
+      // Now get next message in the list
+      cursor.continue();
+    } else {
+      // No (more) messages found
+      if (msgList.length) {
+        log("Found " + msgList.length + " SMS messages to delete.");
+        deleteMsgs(msgList, nextFunction);
+      } else {
+        log("No SMS messages found.");
+        nextFunction();
+      }
+    }
+  };
+
+  request.onerror = function(event) {
+    log("Received 'onerror' smsrequest event.");
+    ok(event.target.error, "domerror obj");
+    log("sms.getMessages error: " + event.target.error.name);
+    ok(false,"Could not get SMS messages");
+    cleanUp();
+  };
+}
+
+function deleteMsgs(msgList, nextFunction) {
+  let smsId = msgList.shift();
+
+  log("Deleting SMS (id: " + smsId + ").");
+  let request = sms.delete(smsId);
+  ok(request instanceof MozSmsRequest,
+      "request is instanceof " + request.constructor);
+
+  request.onsuccess = function(event) {
+    log("Received 'onsuccess' smsrequest event.");
+    if (event.target.result) {
+      // Message deleted, continue until none are left
+      if (msgList.length) {
+        deleteMsgs(msgList, nextFunction);
+      } else {
+        log("Finished deleting SMS messages.");
+        nextFunction();
+      }
+    } else {
+      log("SMS delete failed.");
+      ok(false,"sms.delete request returned false");
+      cleanUp();
+    }
+  };
+
+  request.onerror = function(event) {
+    log("Received 'onerror' smsrequest event.");
+    ok(event.target.error, "domerror obj");
+    ok(false, "sms.delete request returned unexpected error: "
+        + event.target.error.name );
+    cleanUp();
+  };
+}
+
+function simulateIncomingSms() {
+  let text = "Incoming SMS number " + (smsList.length + 1);
+  let remoteNumber = "5552229797";
+
+  log("Simulating incoming SMS number " + (smsList.length + 1) + " of "
+      + numberMsgs + ".");
+
+  // Simulate incoming sms sent from remoteNumber to our emulator
+  rcvdEmulatorCallback = false;
+  runEmulatorCmd("sms send " + remoteNumber + " " + text, function(result) {
+    is(result[0], "OK", "emulator callback");
+    rcvdEmulatorCallback = true;
+  });
+}
+
+// Callback for incoming sms
+sms.onreceived = function onreceived(event) {
+  log("Received 'onreceived' sms event.");
+  let incomingSms = event.message;
+  log("Received SMS (id: " + incomingSms.id + ").");
+
+  // Add newly received message to array of received msgs
+  smsList.push(incomingSms);
+
+  // Wait for emulator to catch up before continuing
+  waitFor(nextRep,function() {
+    return(rcvdEmulatorCallback);
+  });
+};
+
+function nextRep() {
+  if (smsList.length < numberMsgs) {
+    simulateIncomingSms();
+  } else {
+    // Marking all messages except first as read
+    // Can remove first one from smsList array
+    smsList.shift();
+    markMsgRead(smsList.slice(0));
+  }
+}
+
+function markMsgRead(smsMsgs) {  
+  nextSms = smsMsgs.shift();
+  log("Marking SMS (id: " + nextSms.id + ") as read.");
+  let request = sms.markMessageRead(nextSms.id, true);
+  ok(request instanceof MozSmsRequest,
+      "request is instanceof " + request.constructor);
+
+  request.onsuccess = function(event) {
+    log("Received 'onsuccess' smsrequest event.");
+    if (event.target.result) {
+      // Message marked as read, continue until none are left
+      if (smsMsgs.length) {
+        markMsgRead(smsMsgs);
+      } else {
+        // Done, now test the filter
+        getMsgs();
+      }
+    } else {
+      log("SMS markMessageRead failed.");
+      ok(false,"sms.markMessageRead request returned false");
+      cleanUp();
+    }
+  };
+
+  request.onerror = function(event) {
+    log("Received 'onerror' smsrequest event.");
+    ok(event.target.error, "domerror obj");
+    ok(false, "sms.markMessageRead request returned unexpected error: "
+        + event.target.error.name );
+    cleanUp();
+  };
+}
+
+function getMsgs() {
+  var filter = new MozSmsFilter();
+  let foundSmsList = new Array();
+
+  // Set filter for read messages
+  filter.read = true;
+
+  log("Getting the read SMS messages.");
+  let request = sms.getMessages(filter, false);
+  ok(request instanceof MozSmsRequest,
+      "request is instanceof " + request.constructor);
+
+  request.onsuccess = function(event) {
+    log("Received 'onsuccess' smsrequest event.");
+    ok(event.target.result, "smsrequest event.target.result");
+    cursor = event.target.result;
+
+    if (cursor.message) {
+      // Another message found
+      log("Got SMS (id: " + cursor.message.id + ").");
+      // Store found message
+      foundSmsList.push(cursor.message);
+      // Now get next message in the list
+      cursor.continue();
+    } else {
+      // No more messages; ensure correct number found
+      if (foundSmsList.length == smsList.length) {
+        log("SMS getMessages returned " + foundSmsList.length +
+            " messages as expected.");
+        verifyFoundMsgs(foundSmsList);
+      } else {
+        log("SMS getMessages returned " + foundSmsList.length +
+            " messages, but expected " + smsList.length + ".");
+        ok(false, "Incorrect number of messages returned by sms.getMessages");
+        deleteAllMsgs(cleanUp);
+      }
+    }
+  };
+
+  request.onerror = function(event) {
+    log("Received 'onerror' smsrequest event.");
+    ok(event.target.error, "domerror obj");
+    log("sms.getMessages error: " + event.target.error.name);
+    ok(false,"Could not get SMS messages");
+    cleanUp();
+  };
+}
+
+function verifyFoundMsgs(foundSmsList) {
+  for (var x = 0; x < foundSmsList.length; x++) {
+    is(foundSmsList[x].id, smsList[x].id, "id");
+    is(foundSmsList[x].read, true, "read");
+  }
+  deleteAllMsgs(cleanUp);
+}
+
+function cleanUp() {
+  sms.onreceived = null;
+  SpecialPowers.removePermission("sms", document);
+  SpecialPowers.clearUserPref("dom.sms.enabled");
+  finish();
+}
+
+// Start the test
+verifyInitialState();
new file mode 100644
--- /dev/null
+++ b/dom/sms/tests/marionette/test_filter_unread.js
@@ -0,0 +1,223 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+MARIONETTE_TIMEOUT = 20000;
+
+SpecialPowers.addPermission("sms", true, document);
+SpecialPowers.setBoolPref("dom.sms.enabled", true);
+
+let sms = window.navigator.mozSms;
+let numberMsgs = 10;
+let smsList = new Array();
+
+function verifyInitialState() {
+  log("Verifying initial state.");
+  ok(sms, "mozSms");
+  // Ensure test is starting clean with no existing sms messages
+  deleteAllMsgs(simulateIncomingSms);
+}
+
+function deleteAllMsgs(nextFunction) {
+  let msgList = new Array();
+  let filter = new MozSmsFilter;
+
+  let request = sms.getMessages(filter, false);
+  ok(request instanceof MozSmsRequest,
+      "request is instanceof " + request.constructor);
+
+  request.onsuccess = function(event) {
+    ok(event.target.result, "smsrequest event.target.result");
+    cursor = event.target.result;
+    // Check if message was found
+    if (cursor.message) {
+      msgList.push(cursor.message.id);
+      // Now get next message in the list
+      cursor.continue();
+    } else {
+      // No (more) messages found
+      if (msgList.length) {
+        log("Found " + msgList.length + " SMS messages to delete.");
+        deleteMsgs(msgList, nextFunction);
+      } else {
+        log("No SMS messages found.");
+        nextFunction();
+      }
+    }
+  };
+
+  request.onerror = function(event) {
+    log("Received 'onerror' smsrequest event.");
+    ok(event.target.error, "domerror obj");
+    log("sms.getMessages error: " + event.target.error.name);
+    ok(false,"Could not get SMS messages");
+    cleanUp();
+  };
+}
+
+function deleteMsgs(msgList, nextFunction) {
+  let smsId = msgList.shift();
+
+  log("Deleting SMS (id: " + smsId + ").");
+  let request = sms.delete(smsId);
+  ok(request instanceof MozSmsRequest,
+      "request is instanceof " + request.constructor);
+
+  request.onsuccess = function(event) {
+    log("Received 'onsuccess' smsrequest event.");
+    if (event.target.result) {
+      // Message deleted, continue until none are left
+      if (msgList.length) {
+        deleteMsgs(msgList, nextFunction);
+      } else {
+        log("Finished deleting SMS messages.");
+        nextFunction();
+      }
+    } else {
+      log("SMS delete failed.");
+      ok(false,"sms.delete request returned false");
+      cleanUp();
+    }
+  };
+
+  request.onerror = function(event) {
+    log("Received 'onerror' smsrequest event.");
+    ok(event.target.error, "domerror obj");
+    ok(false, "sms.delete request returned unexpected error: "
+        + event.target.error.name );
+    cleanUp();
+  };
+}
+
+function simulateIncomingSms() {
+  let text = "Incoming SMS number " + (smsList.length + 1);
+  let remoteNumber = "5552229797";
+
+  log("Simulating incoming SMS number " + (smsList.length + 1) + " of "
+      + numberMsgs + ".");
+
+  // Simulate incoming sms sent from remoteNumber to our emulator
+  rcvdEmulatorCallback = false;
+  runEmulatorCmd("sms send " + remoteNumber + " " + text, function(result) {
+    is(result[0], "OK", "emulator callback");
+    rcvdEmulatorCallback = true;
+  });
+}
+
+// Callback for incoming sms
+sms.onreceived = function onreceived(event) {
+  log("Received 'onreceived' sms event.");
+  let incomingSms = event.message;
+  log("Received SMS (id: " + incomingSms.id + ").");
+
+  // Add newly received message to array of received msgs
+  smsList.push(incomingSms);
+
+  // Wait for emulator to catch up before continuing
+  waitFor(nextRep,function() {
+    return(rcvdEmulatorCallback);
+  });
+};
+
+function nextRep() {
+  if (smsList.length < numberMsgs) {
+    simulateIncomingSms();
+  } else {
+    markMsgRead();
+  }
+}
+
+function markMsgRead() {
+  // Mark first message read so not all will be found by filter
+  log("Marking SMS (id: " + smsList[0].id + ") as read.");
+  let request = sms.markMessageRead(smsList[0].id, true);
+  ok(request instanceof MozSmsRequest,
+      "request is instanceof " + request.constructor);
+
+  request.onsuccess = function(event) {
+    log("Received 'onsuccess' smsrequest event.");
+    if (event.target.result) {
+      // First message was marked read, so remove from expected smsList
+      smsList.shift();
+      // Now test the filter
+      getMsgs();
+    } else {
+      log("SMS markMessageRead failed.");
+      ok(false,"sms.markMessageRead request returned false");
+      cleanUp();
+    }
+  };
+
+  request.onerror = function(event) {
+    log("Received 'onerror' smsrequest event.");
+    ok(event.target.error, "domerror obj");
+    ok(false, "sms.markMessageRead request returned unexpected error: "
+        + event.target.error.name );
+    cleanUp();
+  };
+}
+
+function getMsgs() {
+  var filter = new MozSmsFilter();
+  let foundSmsList = new Array();
+
+  // Set filter for read messages
+  filter.read = false;
+
+  log("Getting the unread SMS messages.");
+  let request = sms.getMessages(filter, false);
+  ok(request instanceof MozSmsRequest,
+      "request is instanceof " + request.constructor);
+
+  request.onsuccess = function(event) {
+    log("Received 'onsuccess' smsrequest event.");
+    ok(event.target.result, "smsrequest event.target.result");
+    cursor = event.target.result;
+
+    if (cursor.message) {
+      // Another message found
+      log("Got SMS (id: " + cursor.message.id + ").");
+      // Store found message
+      foundSmsList.push(cursor.message);
+      // Now get next message in the list
+      cursor.continue();
+    } else {
+      // No more messages; ensure correct number found
+      if (foundSmsList.length == smsList.length) {
+        log("SMS getMessages returned " + foundSmsList.length +
+            " messages as expected.");
+        verifyFoundMsgs(foundSmsList);
+      } else {
+        log("SMS getMessages returned " + foundSmsList.length +
+            " messages, but expected " + smsList.length + ".");
+        ok(false, "Incorrect number of messages returned by sms.getMessages");
+        deleteAllMsgs(cleanUp);
+      }
+    }
+  };
+
+  request.onerror = function(event) {
+    log("Received 'onerror' smsrequest event.");
+    ok(event.target.error, "domerror obj");
+    log("sms.getMessages error: " + event.target.error.name);
+    ok(false,"Could not get SMS messages");
+    cleanUp();
+  };
+}
+
+function verifyFoundMsgs(foundSmsList) {
+  for (var x = 0; x < foundSmsList.length; x++) {
+    is(foundSmsList[x].id, smsList[x].id, "id");
+    is(foundSmsList[x].read, false, "read");
+  }
+  deleteAllMsgs(cleanUp);
+}
+
+function cleanUp() {
+  sms.onreceived = null;
+  SpecialPowers.removePermission("sms", document);
+  SpecialPowers.clearUserPref("dom.sms.enabled");
+  finish();
+}
+
+// Start the test
+verifyInitialState();