/* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ // Tests the confirmation part of the post-app-update dialog var gProvider; var gWin; function waitForView(aView, aCallback) { var view = gWin.document.getElementById(aView); if (view.parentNode.selectedPanel == view) { aCallback(); return; } view.addEventListener("ViewChanged", function() { view.removeEventListener("ViewChanged", arguments.callee, false); try { aCallback(); } catch (e) { ok(false, e); } }, false); } /** * Creates 4 test add-ons. Two are disabled and two enabled. * * @param aAppDisabled * The appDisabled property for the test add-ons * @param aUpdateAvailable * True if the test add-ons should claim to have an update available */ function setupUI(aAppDisabled, aUpdateAvailable, aCallback) { if (gProvider) gProvider.unregister(); gProvider = new MockProvider(); for (var i = 1; i < 5; i++) { var addon = new MockAddon("test" + i + "@tests.mozilla.org", "Test Add-on " + i, "extension"); addon.version = "1.0"; addon.userDisabled = (i > 2); addon.appDisabled = aAppDisabled; addon.isActive = !addon.userDisabled && !addon.appDisabled; addon.findUpdates = function(aListener, aReason, aAppVersion, aPlatformVersion) { if (aUpdateAvailable) { var newAddon = new MockAddon(this.id, this.name, "extension"); newAddon.version = "2.0"; var install = new MockInstall(this.name, this.type, newAddon); install.existingAddon = this; aListener.onUpdateAvailable(this, install); } aListener.onUpdateFinished(this, AddonManager.UPDATE_STATUS_NO_ERROR); }; gProvider.addAddon(addon); } gWin = Services.ww.openWindow(null, "chrome://mozapps/content/extensions/selectAddons.xul", "", "chrome,centerscreen,dialog,titlebar", null); waitForFocus(function() { waitForView("select", function() { var row = gWin.document.getElementById("select-rows").firstChild.nextSibling; while (row) { if (!row.id || row.id.indexOf("@tests.mozilla.org") < 0) { // not a test add-on row = row.nextSibling; continue; } if (row.id == "test2@tests.mozilla.org" || row.id == "test4@tests.mozilla.org") { row.disable(); } else { row.keep(); } row = row.nextSibling; } waitForView("confirm", aCallback); EventUtils.synthesizeMouseAtCenter(gWin.document.getElementById("next"), {}, gWin); }); }, gWin); } function test() { waitForExplicitFinish(); run_next_test(); } function end_test() { finish(); } // Test for disabling add_test(function disabling_test() { setupUI(false, false, function() { ok(gWin.document.getElementById("incompatible-list").hidden, "Incompatible list should be hidden"); ok(gWin.document.getElementById("update-list").hidden, "Update list should be hidden"); var list = gWin.document.getElementById("disable-list"); ok(!list.hidden, "Disable list should be visible"); is(list.childNodes.length, 2, "Should be one add-on getting disabled (plus the header)"); is(list.childNodes[1].id, "test2@tests.mozilla.org", "Should be the right add-on ID"); is(list.childNodes[1].getAttribute("name"), "Test Add-on 2", "Should be the right add-on name"); var list = gWin.document.getElementById("enable-list"); ok(!list.hidden, "Enable list should be visible"); is(list.childNodes.length, 2, "Should be one add-on getting disabled (plus the header)"); is(list.childNodes[1].id, "test3@tests.mozilla.org", "Should be the right add-on ID"); is(list.childNodes[1].getAttribute("name"), "Test Add-on 3", "Should be the right add-on name"); ok(gWin.document.getElementById("next").hidden, "Next button should be hidden"); ok(!gWin.document.getElementById("done").hidden, "Done button should be visible"); gWin.close(); run_next_test(); }); }); // Test for incompatible add_test(function incompatible_test() { setupUI(true, false, function() { ok(gWin.document.getElementById("update-list").hidden, "Update list should be hidden"); ok(gWin.document.getElementById("disable-list").hidden, "Disable list should be hidden"); ok(gWin.document.getElementById("enable-list").hidden, "Enable list should be hidden"); var list = gWin.document.getElementById("incompatible-list"); ok(!list.hidden, "Incompatible list should be visible"); is(list.childNodes.length, 3, "Should be two add-ons waiting to be compatible (plus the header)"); is(list.childNodes[1].id, "test1@tests.mozilla.org", "Should be the right add-on ID"); is(list.childNodes[1].getAttribute("name"), "Test Add-on 1", "Should be the right add-on name"); is(list.childNodes[2].id, "test3@tests.mozilla.org", "Should be the right add-on ID"); is(list.childNodes[2].getAttribute("name"), "Test Add-on 3", "Should be the right add-on name"); ok(gWin.document.getElementById("next").hidden, "Next button should be hidden"); ok(!gWin.document.getElementById("done").hidden, "Done button should be visible"); gWin.close(); run_next_test(); }); }); // Test for updates add_test(function update_test() { setupUI(false, true, function() { ok(gWin.document.getElementById("incompatible-list").hidden, "Incompatible list should be hidden"); ok(gWin.document.getElementById("enable-list").hidden, "Enable list should be hidden"); var list = gWin.document.getElementById("update-list"); ok(!list.hidden, "Update list should be visible"); is(list.childNodes.length, 3, "Should be two add-ons waiting to be updated (plus the header)"); is(list.childNodes[1].id, "test1@tests.mozilla.org", "Should be the right add-on ID"); is(list.childNodes[1].getAttribute("name"), "Test Add-on 1", "Should be the right add-on name"); is(list.childNodes[2].id, "test3@tests.mozilla.org", "Should be the right add-on ID"); is(list.childNodes[2].getAttribute("name"), "Test Add-on 3", "Should be the right add-on name"); list = gWin.document.getElementById("disable-list"); ok(!list.hidden, "Disable list should be visible"); is(list.childNodes.length, 2, "Should be one add-on getting disabled (plus the header)"); is(list.childNodes[1].id, "test2@tests.mozilla.org", "Should be the right add-on ID"); is(list.childNodes[1].getAttribute("name"), "Test Add-on 2", "Should be the right add-on name"); ok(!gWin.document.getElementById("next").hidden, "Next button should be visible"); ok(gWin.document.getElementById("done").hidden, "Done button should be hidden"); gWin.close(); run_next_test(); }); });