Bug 815283 - Tests for bug 58713, bug 536248, bug 740617. r=mconley
authoraceman <acelists@atlas.sk>
Mon, 04 Feb 2013 14:52:35 -0500
changeset 14794 0cf5688a02e949aa72863b8e0a416a125146a5b4
parent 14793 89fa8b687178cd60e8e98f9a1893361aa6116aad
child 14795 919bcd851b6f83125990790c3558d6cd639bf891
push id867
push userbugzilla@standard8.plus.com
push dateMon, 01 Apr 2013 20:44:27 +0000
treeherdercomm-beta@797726b8d244 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmconley
bugs815283, 58713, 536248, 740617
Bug 815283 - Tests for bug 58713, bug 536248, bug 740617. r=mconley
mail/test/mozmill/account/test-account-tree.js
new file mode 100644
--- /dev/null
+++ b/mail/test/mozmill/account/test-account-tree.js
@@ -0,0 +1,196 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * This test checks proper operation of the account tree in the Account manager.
+ */
+
+const MODULE_NAME = "test-account-tree";
+
+const RELATIVE_ROOT = "../shared-modules";
+const MODULE_REQUIRES = ["folder-display-helpers", "window-helpers",
+                         "account-manager-helpers"];
+
+let gPopAccount, gOriginalAccountCount;
+
+function setupModule(module) {
+  collector.getModule("window-helpers").installInto(module);
+  collector.getModule("folder-display-helpers").installInto(module);
+  collector.getModule("account-manager-helpers").installInto(module);
+
+  // There may be pre-existing accounts from other tests.
+  gOriginalAccountCount = MailServices.accounts.allServers.length;
+
+  // Create a POP server
+  let popServer = MailServices.accounts
+    .createIncomingServer("nobody", "foo.invalid", "pop3")
+    .QueryInterface(Ci.nsIPop3IncomingServer);
+
+  let identity = MailServices.accounts.createIdentity();
+  identity.email = "tinderbox@foo.invalid";
+
+  gPopAccount = MailServices.accounts.createAccount();
+  gPopAccount.incomingServer = popServer;
+  gPopAccount.addIdentity(identity);
+
+  // Now there should be one more account.
+  assert_equals(MailServices.accounts.allServers.length, gOriginalAccountCount + 1);
+}
+
+function teardownModule(module) {
+  // Remove our test account to leave the profile clean.
+  MailServices.accounts.removeAccount(gPopAccount);
+  // There should be only the original accounts left.
+  assert_equals(MailServices.accounts.allServers.length, gOriginalAccountCount);
+}
+
+/**
+ * Test for bug 536248.
+ * Check if the account manager dialog remembers the open state of accounts.
+ */
+function test_account_open_state() {
+  open_advanced_settings(function(amc) {
+    subtest_check_account_open_state(amc, true);
+  });
+  open_advanced_settings(function(amc) {
+    subtest_check_account_open_state(amc, false);
+  });
+  // After this test all the accounts must be "open".
+}
+
+/**
+ * Check if the open state of accounts is in the wished state.
+ *
+ * @param amc           The account options controller.
+ * @param aWishedState  The open state in which the account row should be found (bool).
+ */
+function subtest_check_account_open_state(amc, aWishedState)
+{
+  let accountRow = get_account_tree_row(gPopAccount.key, null, amc);
+  click_account_tree_row(amc, accountRow);
+
+  // See if the account row is in the wished open state.
+  let accountTree = amc.e("accounttree");
+  assert_equals(accountRow, accountTree.view.selection.currentIndex);
+  assert_equals(accountTree.view.isContainerOpen(accountRow), aWishedState);
+
+  accountTree.view.toggleOpenState(accountRow);
+  assert_equals(accountTree.view.isContainerOpen(accountRow), !aWishedState);
+
+  // Whatever the open state of the account was, selecting one of its subpanes
+  // must open it.
+  amc.window.selectServer(gPopAccount.incomingServer, "am-junk.xul");
+  assert_true(accountTree.view.isContainerOpen(accountRow));
+
+  // Set the proper state again for continuation of the test.
+  accountTree.view.getItemAtIndex(accountRow).setAttribute("open", !aWishedState);
+  assert_equals(accountTree.view.isContainerOpen(accountRow), !aWishedState);
+}
+
+/**
+ * Bug 740617.
+ * Check if the default account is styled in bold.
+ *
+ */
+function test_default_account_highlight() {
+  open_advanced_settings(function(amc) {
+    subtest_check_default_account_highlight(amc);
+  });
+}
+
+/**
+ * Check if the default account is styled in bold and another account is not.
+ *
+ * @param amc           The account options controller.
+ */
+function subtest_check_default_account_highlight(amc)
+{
+  // Select the default account.
+  let accountRow = get_account_tree_row(MailServices.accounts.defaultAccount.key, null, amc);
+  click_account_tree_row(amc, accountRow);
+
+  let accountTree = amc.e("accounttree");
+  assert_equals(accountRow, accountTree.view.selection.currentIndex);
+  let cell = accountTree.view.getItemAtIndex(accountRow).firstChild.firstChild;
+  assert_equals(cell.tagName, "treecell");
+
+  // We can't read the computed style of the tree cell directly, so at least see
+  // if the isDefaultServer-true property is set on it. Hopefully the proper style
+  // is attached to this property.
+  let propArray = Cc["@mozilla.org/supports-array;1"]
+                    .createInstance(Ci.nsISupportsArray);
+
+  accountTree.view.getCellProperties(accountRow, accountTree.columns.getColumnAt(0),
+                                     propArray);
+  assert_equals(propArray.Count(), 1);
+  assert_equals(propArray.QueryElementAt(0, Ci.nsIAtom).toString(), "isDefaultServer-true");
+
+  // Now select another account that is not default.
+  accountRow = get_account_tree_row(gPopAccount.key, null, amc);
+  click_account_tree_row(amc, accountRow);
+
+  cell = accountTree.view.getItemAtIndex(accountRow).firstChild.firstChild;
+  propArray.Clear();
+  accountTree.view.getCellProperties(accountRow, accountTree.columns.getColumnAt(0),
+                                     propArray);
+
+  // There should be no properties set on its tree cell.
+  assert_equals(propArray.Count(), 0);
+}
+/**
+ * Bug 58713.
+ * Check if after deleting an account the next one is selected.
+ *
+ * This test should always be the last one as it removes our specially
+ * created gPopAccount.
+ */
+function test_selection_after_account_deletion() {
+  open_advanced_settings(function(amc) {
+    subtest_check_selection_after_account_deletion(amc);
+  });
+}
+
+/**
+ * Check if after deleting an account the next one is selected.
+ *
+ * @param amc           The account options controller.
+ */
+function subtest_check_selection_after_account_deletion(amc)
+{
+  // Select the default account.
+  let accountRow = get_account_tree_row(gPopAccount.key, "am-server.xul", amc);
+  click_account_tree_row(amc, accountRow);
+
+  let accountList = [];
+  let accountTreeNode = amc.e("account-tree-children");
+  // Build the list of accounts in the account tree (order is important).
+  for (let i = 0; i < accountTreeNode.childNodes.length; i++) {
+    if ("_account" in accountTreeNode.childNodes[i]) {
+      let curAccount = accountTreeNode.childNodes[i]._account;
+      if (accountList.indexOf(curAccount) == -1)
+        accountList.push(curAccount);
+    }
+  }
+
+  // Get position of the current account in the account list.
+  let accountIndex = accountList.indexOf(gPopAccount);
+
+  plan_for_modal_dialog("commonDialog", function(cdc) {
+    // Account removal confirmation dialog. Just accept it.
+    cdc.window.document.documentElement.acceptDialog();
+  });
+  // Use the Remove item in the Account actions menu.
+  amc.click_menus_in_sequence(amc.e("accountActionsDropdown"),
+                              [ {id: "accountActionsDropdownRemove"}],
+                              amc.eid("accountActionsButton"));
+  wait_for_modal_dialog("commonDialog");
+  // Now there should be only the original accounts left.
+  assert_equals(MailServices.accounts.allServers.length, gOriginalAccountCount);
+
+  // See if the currently selected account is the one next in the account list.
+  let accountTree = amc.e("accounttree");
+  accountRow = accountTree.view.selection.currentIndex;
+  assert_equals(accountTree.view.getItemAtIndex(accountRow)._account,
+                accountList[accountIndex + 1]);
+}