Bug 794301 - Develop WebSMS test to verify marking message read/unread, update manifest. r=davehunt
authorRob Wood <rwood@mozilla.com>
Mon, 26 Nov 2012 12:43:56 -0800
changeset 114542 00826d8e83d7d533c1a00636f3390d8084f127e4
parent 114541 e64cd799b7b692f812da5b4aa48e6f77bdcfb54e
child 114543 b65787162e897ed3be1fdf812097640ade587a68
push id23922
push useremorley@mozilla.com
push dateFri, 30 Nov 2012 10:07:56 +0000
treeherdermozilla-central@1b7103181091 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersdavehunt
bugs794301
milestone20.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 794301 - Develop WebSMS test to verify marking message read/unread, update manifest. r=davehunt
dom/sms/tests/marionette/manifest.ini
dom/sms/tests/marionette/test_mark_msg_read.js
dom/sms/tests/marionette/test_mark_msg_read_error.js
--- a/dom/sms/tests/marionette/manifest.ini
+++ b/dom/sms/tests/marionette/manifest.ini
@@ -17,8 +17,10 @@ qemu = true
 [test_filter_date_notfound.js]
 [test_filter_number_single.js]
 [test_filter_number_multiple.js]
 [test_filter_received.js]
 [test_filter_sent.js]
 [test_filter_read.js]
 [test_filter_unread.js]
 [test_number_of_messages.js]
+[test_mark_msg_read.js]
+[test_mark_msg_read_error.js]
new file mode 100644
--- /dev/null
+++ b/dom/sms/tests/marionette/test_mark_msg_read.js
@@ -0,0 +1,227 @@
+/* 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 smsList = new Array();
+
+function verifyInitialState() {
+  log("Verifying initial state.");
+  ok(sms, "mozSms");
+  simulateIncomingSms();
+}
+
+function simulateIncomingSms() {
+  let text = "Incoming SMS courtesy of Firefox OS";
+  let remoteNumber = "5557779999";
+
+  log("Simulating incoming SMS.");
+
+  // 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 + ").");
+  is(incomingSms.read, false, "incoming message read");
+  log("SMS read attribute: " + incomingSms.read + ".");
+
+  // Add newly received message id to array of msgs
+  smsList.push(incomingSms.id);
+
+  // Wait for emulator to catch up before continuing
+  waitFor(sendSms, function() {
+    return(rcvdEmulatorCallback);
+  });
+};
+
+function sendSms() {
+  let gotSmsSent = false;
+  let gotRequestSuccess = false;
+  let remoteNumber = "5557779999";
+  let text = "Mo Mo Mo Zilla Zilla Zilla!";
+
+  log("Sending an SMS.");
+
+  sms.onsent = function(event) {
+    log("Received 'onsent' smsmanager event.");
+    gotSmsSent = true;
+    let sentSms = event.message;
+    log("Sent SMS (id: " + sentSms.id + ").");
+    is(sentSms.read, true, "sent sms read");
+    log("SMS read attribute: " + sentSms.read + ".");
+
+    // Add newly received message id to array of msgs
+    smsList.push(sentSms.id);
+
+    if (gotSmsSent && gotRequestSuccess) {
+      test1();
+    }
+  };
+
+  let request = sms.send(remoteNumber, text);
+
+  request.onsuccess = function(event) {
+    log("Received 'onsuccess' smsrequest event.");
+    if(event.target.result) {
+      gotRequestSuccess = true;
+      if (gotSmsSent && gotRequestSuccess) {
+        test1();
+      }
+    } else {
+      log("smsrequest returned false for sms.send");
+      ok(false, "SMS send failed");
+      deleteMsgs();
+    }
+  };
+
+  request.onerror = function(event) {
+    log("Received 'onerror' smsrequest event.");
+    ok(event.target.error, "domerror obj");
+    ok(false, "sms.send request returned unexpected error: "
+        + event.target.error.name );
+    deleteMsgs();
+  };
+}
+
+function markMessageAndVerify(smsId, readBool, nextFunction) {
+  let request = sms.markMessageRead(smsId, readBool);
+  ok(request instanceof MozSmsRequest,
+      "request is instanceof " + request.constructor);
+
+  request.onsuccess = function(event) {
+    log("Received 'onsuccess' smsrequest event.");
+
+    // Success from MarkMessageRead, the result should match what we set
+    is(event.target.result, readBool, "result matches what was set");
+
+    // Message marked read/unread, now verify
+    log("Getting SMS message (id: " + smsId + ").");
+    let requestRet = sms.getMessage(smsId);
+    ok(requestRet, "smsrequest obj returned");
+
+    requestRet.onsuccess = function(event) {
+      log("Received 'onsuccess' smsrequest event.");
+      ok(event.target.result, "smsrequest event.target.result");
+      let foundSms = event.target.result;
+      is(foundSms.id, smsId, "SMS id matches");
+      log("SMS read attribute: " + foundSms.read + ".");
+      let text = readBool ? "read" : "unread";
+      if (foundSms.read == readBool) {
+        ok(true, "marked sms " + text);
+      } else {
+        ok(false, "marking sms " + text + " didn't work");
+        log("Expected SMS (id: " + foundSms.id + ") to be marked " + text
+            + " but it is not.");
+      }
+      nextFunction();
+    };
+
+    requestRet.onerror = function(event) {
+      log("Received 'onerror' smsrequest event.");
+      ok(event.target.error, "domerror obj");
+      is(event.target.error.name, "NotFoundError", "error returned");
+      log("Could not get SMS (id: " + outSmsId + ") but should have.");
+      ok(false, "Could not get SMS");
+      deleteMsgs();
+    };
+  };
+
+  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 );
+    nextFunction();
+  };
+}
+
+function test1() {
+  rcvdSms = smsList[0];
+  log("Test 1: Marking received SMS (id: " + rcvdSms + ") read.");
+  markMessageAndVerify(rcvdSms, true, test2);
+}
+
+function test2() {
+  rcvdSms = smsList[0];
+  log("Test 2: Marking received SMS (id: " + rcvdSms + ") unread.");
+  markMessageAndVerify(rcvdSms, false, test3);
+}
+
+function test3() {
+  sentSms = smsList[1];
+  log("Test 3: Marking sent SMS (id: " + sentSms + ") unread.");
+  markMessageAndVerify(sentSms, false, test4);
+}
+
+function test4() {
+  sentSms = smsList[1];
+  log("Test 4: Marking sent SMS (id: " + sentSms + ") read.");
+  markMessageAndVerify(sentSms, true, test5);
+}
+
+function test5() {
+  sentSms = smsList[1];
+  log("Test 5: Marking an already read SMS (id: " + sentSms + ") read.");
+  markMessageAndVerify(sentSms, true, test6);
+}
+
+function test6() {
+  rcvdSms = smsList[0];
+  log("Test 6: Marking an already unread SMS (id: " + rcvdSms + ") unread.");
+  markMessageAndVerify(rcvdSms, false, deleteMsgs);
+}
+
+function deleteMsgs() {
+  let smsId = smsList.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 (smsList.length) {
+        deleteMsgs();
+      } else {
+        cleanUp();
+      }
+    } 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 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_mark_msg_read_error.js
@@ -0,0 +1,115 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+MARIONETTE_TIMEOUT = 10000;
+
+SpecialPowers.addPermission("sms", true, document);
+SpecialPowers.setBoolPref("dom.sms.enabled", true);
+
+let sms = window.navigator.mozSms;
+let smsId;
+
+function verifyInitialState() {
+  log("Verifying initial state.");
+  ok(sms, "mozSms");
+  simulateIncomingSms();
+}
+
+function simulateIncomingSms() {
+  let text = "Incoming SMS courtesy of Firefox OS";
+  let remoteNumber = "5557779999";
+
+  log("Simulating incoming SMS.");
+
+  // 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 + ").");
+  is(incomingSms.read, false, "incoming message read");
+  smsId = incomingSms.id;
+
+  // Wait for emulator to catch up before continuing
+  waitFor(test1, function() {
+    return(rcvdEmulatorCallback);
+  });
+};
+
+function markMsgError(invalidId, readBool, nextFunction) {
+  let requestRet = sms.markMessageRead(invalidId, readBool);
+  ok(requestRet, "smsrequest obj returned");
+
+  requestRet.onsuccess = function(event) {
+    log("Received 'onsuccess' smsrequest event, but expected error.");
+    ok(false, "Smsrequest should have returned error but did not");
+    nextFunction();
+  };
+
+  requestRet.onerror = function(event) {
+    log("Received 'onerror' smsrequest event.");
+    ok(event.target.error, "domerror obj");
+    is(event.target.error.name, "NotFoundError", "error returned");
+    nextFunction();
+  };
+}
+
+function test1() {
+  // Mark message read for a message that doesn't exist, expect error
+  let msgIdNoExist = smsId + 1;
+  log("Attempting to mark non-existent sms (id: " + msgIdNoExist
+      + ") read, expect error.");
+  markMsgError(msgIdNoExist, true, test2);
+}
+
+function test2() {
+  // Mark message read using invalid SMS id, expect error
+  invalidId = -1;
+  log("Attempting to mark sms unread using an invalid id (id: " + invalidId
+      + "), expect error.");
+  markMsgError(invalidId, false, deleteMsg);
+}
+
+function deleteMsg() {
+  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
+      cleanUp();
+    } 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 cleanUp() {
+  sms.onreceived = null;
+  SpecialPowers.removePermission("sms", document);
+  SpecialPowers.clearUserPref("dom.sms.enabled");
+  finish();
+}
+
+// Start the test
+verifyInitialState();