diff options
Diffstat (limited to 'toolkit/mozapps/extensions/test/browser/browser_select_confirm.js')
-rw-r--r-- | toolkit/mozapps/extensions/test/browser/browser_select_confirm.js | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/toolkit/mozapps/extensions/test/browser/browser_select_confirm.js b/toolkit/mozapps/extensions/test/browser/browser_select_confirm.js new file mode 100644 index 000000000..1204777ce --- /dev/null +++ b/toolkit/mozapps/extensions/test/browser/browser_select_confirm.js @@ -0,0 +1,181 @@ +/* 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(); + }); +}); |