michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ michael@0: */ michael@0: michael@0: // Tests the list view michael@0: michael@0: let tempScope = {}; michael@0: Components.utils.import("resource://gre/modules/LightweightThemeManager.jsm", tempScope); michael@0: let LightweightThemeManager = tempScope.LightweightThemeManager; michael@0: michael@0: michael@0: var gProvider; michael@0: var gManagerWindow; michael@0: var gCategoryUtilities; michael@0: michael@0: var gApp = document.getElementById("bundle_brand").getString("brandShortName"); michael@0: var gVersion = Services.appinfo.version; michael@0: var gBlocklistURL = Services.urlFormatter.formatURLPref("extensions.blocklist.detailsURL"); michael@0: var gPluginURL = Services.urlFormatter.formatURLPref("plugins.update.url"); michael@0: var gDate = new Date(2010, 7, 16); michael@0: michael@0: var gLWTheme = { michael@0: id: "4", michael@0: version: "1", michael@0: name: "Bling", michael@0: description: "SO MUCH BLING!", michael@0: author: "Pixel Pusher", michael@0: homepageURL: "http://mochi.test:8888/data/index.html", michael@0: headerURL: "http://mochi.test:8888/data/header.png", michael@0: footerURL: "http://mochi.test:8888/data/footer.png", michael@0: previewURL: "http://mochi.test:8888/data/preview.png", michael@0: iconURL: "http://mochi.test:8888/data/icon.png" michael@0: }; michael@0: michael@0: michael@0: function test() { michael@0: waitForExplicitFinish(); michael@0: michael@0: gProvider = new MockProvider(); michael@0: michael@0: gProvider.createAddons([{ michael@0: id: "addon1@tests.mozilla.org", michael@0: name: "Test add-on", michael@0: version: "1.0", michael@0: description: "A test add-on", michael@0: longDescription: " A longer description", michael@0: updateDate: gDate michael@0: }, { michael@0: id: "addon2@tests.mozilla.org", michael@0: name: "Test add-on 2", michael@0: version: "2.0", michael@0: longDescription: " A longer description", michael@0: _userDisabled: true, michael@0: isActive: false, michael@0: }, { michael@0: id: "addon3@tests.mozilla.org", michael@0: name: "Test add-on 3", michael@0: longDescription: " A longer description", michael@0: isActive: false, michael@0: isCompatible: false, michael@0: appDisabled: true, michael@0: permissions: AddonManager.PERM_CAN_ENABLE | michael@0: AddonManager.PERM_CAN_DISABLE | michael@0: AddonManager.PERM_CAN_UPGRADE michael@0: }, { michael@0: id: "addon4@tests.mozilla.org", michael@0: blocklistURL: "http://example.com/addon4@tests.mozilla.org", michael@0: name: "Test add-on 4", michael@0: _userDisabled: true, michael@0: isActive: false, michael@0: blocklistState: Ci.nsIBlocklistService.STATE_SOFTBLOCKED michael@0: }, { michael@0: id: "addon5@tests.mozilla.org", michael@0: blocklistURL: "http://example.com/addon5@tests.mozilla.org", michael@0: name: "Test add-on 5", michael@0: isActive: false, michael@0: blocklistState: Ci.nsIBlocklistService.STATE_BLOCKED, michael@0: appDisabled: true michael@0: }, { michael@0: id: "addon6@tests.mozilla.org", michael@0: blocklistURL: "http://example.com/addon6@tests.mozilla.org", michael@0: name: "Test add-on 6", michael@0: operationsRequiringRestart: AddonManager.OP_NEEDS_RESTART_NONE michael@0: }, { michael@0: id: "addon7@tests.mozilla.org", michael@0: blocklistURL: "http://example.com/addon7@tests.mozilla.org", michael@0: name: "Test add-on 7", michael@0: blocklistState: Ci.nsIBlocklistService.STATE_OUTDATED, michael@0: }, { michael@0: id: "addon8@tests.mozilla.org", michael@0: blocklistURL: "http://example.com/addon8@tests.mozilla.org", michael@0: name: "Test add-on 8", michael@0: blocklistState: Ci.nsIBlocklistService.STATE_VULNERABLE_UPDATE_AVAILABLE, michael@0: }, { michael@0: id: "addon9@tests.mozilla.org", michael@0: blocklistURL: "http://example.com/addon9@tests.mozilla.org", michael@0: name: "Test add-on 9", michael@0: blocklistState: Ci.nsIBlocklistService.STATE_VULNERABLE_NO_UPDATE, michael@0: }]); michael@0: michael@0: open_manager(null, function(aWindow) { michael@0: gManagerWindow = aWindow; michael@0: gCategoryUtilities = new CategoryUtilities(gManagerWindow); michael@0: run_next_test(); michael@0: }); michael@0: } michael@0: michael@0: function end_test() { michael@0: close_manager(gManagerWindow, function() { michael@0: finish(); michael@0: }); michael@0: } michael@0: michael@0: function get_test_items() { michael@0: var tests = "@tests.mozilla.org"; michael@0: michael@0: var items = {}; michael@0: var item = gManagerWindow.document.getElementById("addon-list").firstChild; michael@0: michael@0: while (item) { michael@0: if (item.mAddon.id.substring(item.mAddon.id.length - tests.length) == tests) michael@0: items[item.mAddon.name] = item; michael@0: item = item.nextSibling; michael@0: } michael@0: michael@0: return items; michael@0: } michael@0: michael@0: function get_node(parent, anonid) { michael@0: return parent.ownerDocument.getAnonymousElementByAttribute(parent, "anonid", anonid); michael@0: } michael@0: michael@0: function get_class_node(parent, cls) { michael@0: return parent.ownerDocument.getAnonymousElementByAttribute(parent, "class", cls); michael@0: } michael@0: michael@0: // Check that the list appears to have displayed correctly and trigger some michael@0: // changes michael@0: add_test(function() { michael@0: gCategoryUtilities.openType("extension", function() { michael@0: let items = get_test_items(); michael@0: is(Object.keys(items).length, 9, "Should be nine add-ons installed"); michael@0: michael@0: info("Addon 1"); michael@0: let addon = items["Test add-on"]; michael@0: addon.parentNode.ensureElementIsVisible(addon); michael@0: is(get_node(addon, "name").value, "Test add-on", "Name should be correct"); michael@0: is_element_visible(get_node(addon, "version"), "Version should be visible"); michael@0: is(get_node(addon, "version").value, "1.0", "Version should be correct"); michael@0: is_element_visible(get_node(addon, "description"), "Description should be visible"); michael@0: is(get_node(addon, "description").value, "A test add-on", "Description should be correct"); michael@0: is_element_hidden(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be hidden"); michael@0: is_element_hidden(get_class_node(addon, "update-postfix"), "Update postfix should be hidden"); michael@0: is(get_node(addon, "date-updated").value, formatDate(gDate), "Update date should be correct"); michael@0: michael@0: is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); michael@0: is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); michael@0: is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); michael@0: is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); michael@0: michael@0: is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); michael@0: is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); michael@0: is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); michael@0: is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); michael@0: is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); michael@0: michael@0: info("Disabling"); michael@0: EventUtils.synthesizeMouseAtCenter(get_node(addon, "disable-btn"), {}, gManagerWindow); michael@0: is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); michael@0: is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible"); michael@0: is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden"); michael@0: is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); michael@0: michael@0: is_element_hidden(get_node(addon, "warning"), "Warning message should be visible"); michael@0: is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); michael@0: is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); michael@0: is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); michael@0: is_element_visible(get_node(addon, "pending"), "Pending message should be visible"); michael@0: is(get_node(addon, "pending").textContent, "Test add-on will be disabled after you restart " + gApp + ".", "Pending message should be correct"); michael@0: michael@0: info("Addon 2"); michael@0: addon = items["Test add-on 2"]; michael@0: addon.parentNode.ensureElementIsVisible(addon); michael@0: is(get_node(addon, "name").value, "Test add-on 2", "Name should be correct"); michael@0: is_element_visible(get_node(addon, "version"), "Version should be visible"); michael@0: is(get_node(addon, "version").value, "2.0", "Version should be correct"); michael@0: is_element_hidden(get_node(addon, "description"), "Description should be hidden"); michael@0: is_element_visible(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be visible"); michael@0: is_element_hidden(get_class_node(addon, "update-postfix"), "Update postfix should be hidden"); michael@0: is(get_node(addon, "date-updated").value, "Unknown", "Date should be correct"); michael@0: michael@0: is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); michael@0: is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible"); michael@0: is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden"); michael@0: is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); michael@0: michael@0: is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); michael@0: is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); michael@0: is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); michael@0: is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); michael@0: is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); michael@0: michael@0: info("Enabling"); michael@0: EventUtils.synthesizeMouseAtCenter(get_node(addon, "enable-btn"), {}, gManagerWindow); michael@0: is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); michael@0: is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); michael@0: is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); michael@0: is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); michael@0: michael@0: is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); michael@0: is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); michael@0: is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); michael@0: is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); michael@0: is_element_visible(get_node(addon, "pending"), "Pending message should be visible"); michael@0: is(get_node(addon, "pending").textContent, "Test add-on 2 will be enabled after you restart " + gApp + ".", "Pending message should be correct"); michael@0: michael@0: info("Addon 3"); michael@0: addon = items["Test add-on 3"]; michael@0: addon.parentNode.ensureElementIsVisible(addon); michael@0: is(get_node(addon, "name").value, "Test add-on 3", "Name should be correct"); michael@0: is_element_hidden(get_node(addon, "version"), "Version should be hidden"); michael@0: michael@0: is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); michael@0: is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); michael@0: is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden"); michael@0: is_element_hidden(get_node(addon, "remove-btn"), "Remove button should be hidden"); michael@0: michael@0: is_element_visible(get_node(addon, "warning"), "Warning message should be visible"); michael@0: is(get_node(addon, "warning").textContent, "Test add-on 3 is incompatible with " + gApp + " " + gVersion + ".", "Warning message should be correct"); michael@0: is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); michael@0: is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); michael@0: is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); michael@0: is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); michael@0: michael@0: info("Addon 4"); michael@0: addon = items["Test add-on 4"]; michael@0: addon.parentNode.ensureElementIsVisible(addon); michael@0: is(get_node(addon, "name").value, "Test add-on 4", "Name should be correct"); michael@0: michael@0: is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); michael@0: is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible"); michael@0: is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden"); michael@0: is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); michael@0: michael@0: is_element_visible(get_node(addon, "warning"), "Warning message should be visible"); michael@0: is(get_node(addon, "warning").textContent, "Test add-on 4 is known to cause security or stability issues.", "Warning message should be correct"); michael@0: is_element_visible(get_node(addon, "warning-link"), "Warning link should be visible"); michael@0: is(get_node(addon, "warning-link").value, "More Information", "Warning link text should be correct"); michael@0: is(get_node(addon, "warning-link").href, "http://example.com/addon4@tests.mozilla.org", "Warning link should be correct"); michael@0: is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); michael@0: is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); michael@0: is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); michael@0: michael@0: info("Enabling"); michael@0: EventUtils.synthesizeMouseAtCenter(get_node(addon, "enable-btn"), {}, gManagerWindow); michael@0: is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); michael@0: is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); michael@0: is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); michael@0: is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); michael@0: michael@0: is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); michael@0: is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); michael@0: is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); michael@0: is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); michael@0: is_element_visible(get_node(addon, "pending"), "Pending message should be visible"); michael@0: is(get_node(addon, "pending").textContent, "Test add-on 4 will be enabled after you restart " + gApp + ".", "Pending message should be correct"); michael@0: michael@0: info("Addon 5"); michael@0: addon = items["Test add-on 5"]; michael@0: addon.parentNode.ensureElementIsVisible(addon); michael@0: is(get_node(addon, "name").value, "Test add-on 5", "Name should be correct"); michael@0: michael@0: is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); michael@0: is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); michael@0: is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden"); michael@0: is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); michael@0: michael@0: is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); michael@0: is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); michael@0: is_element_visible(get_node(addon, "error"), "Error message should be visible"); michael@0: is(get_node(addon, "error").textContent, "Test add-on 5 has been disabled due to security or stability issues.", "Error message should be correct"); michael@0: is_element_visible(get_node(addon, "error-link"), "Error link should be visible"); michael@0: is(get_node(addon, "error-link").value, "More Information", "Error link text should be correct"); michael@0: is(get_node(addon, "error-link").href, "http://example.com/addon5@tests.mozilla.org", "Error link should be correct"); michael@0: is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); michael@0: michael@0: info("Addon 6"); michael@0: addon = items["Test add-on 6"]; michael@0: addon.parentNode.ensureElementIsVisible(addon); michael@0: is(get_node(addon, "name").value, "Test add-on 6", "Name should be correct"); michael@0: is_element_hidden(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be hidden"); michael@0: michael@0: is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); michael@0: is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); michael@0: is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); michael@0: is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); michael@0: michael@0: is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); michael@0: is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); michael@0: is_element_hidden(get_node(addon, "error"), "Error message should be visible"); michael@0: is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); michael@0: is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); michael@0: michael@0: info("Disabling"); michael@0: EventUtils.synthesizeMouseAtCenter(get_node(addon, "disable-btn"), {}, gManagerWindow); michael@0: is_element_visible(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be visible"); michael@0: michael@0: is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); michael@0: is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible"); michael@0: is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden"); michael@0: is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); michael@0: michael@0: is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); michael@0: is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); michael@0: is_element_hidden(get_node(addon, "error"), "Error message should be visible"); michael@0: is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); michael@0: is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); michael@0: michael@0: info("Addon 7"); michael@0: addon = items["Test add-on 7"]; michael@0: addon.parentNode.ensureElementIsVisible(addon); michael@0: is(get_node(addon, "name").value, "Test add-on 7", "Name should be correct"); michael@0: michael@0: is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); michael@0: is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); michael@0: is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); michael@0: is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); michael@0: michael@0: is_element_visible(get_node(addon, "warning"), "Warning message should be hidden"); michael@0: is(get_node(addon, "warning").textContent, "An important update is available for Test add-on 7.", "Warning message should be correct"); michael@0: is_element_visible(get_node(addon, "warning-link"), "Warning link should be visible"); michael@0: is(get_node(addon, "warning-link").value, "Update Now", "Warning link text should be correct"); michael@0: is(get_node(addon, "warning-link").href, gPluginURL, "Warning link should be correct"); michael@0: is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); michael@0: is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); michael@0: is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); michael@0: michael@0: info("Disabling"); michael@0: EventUtils.synthesizeMouseAtCenter(get_node(addon, "disable-btn"), {}, gManagerWindow); michael@0: is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); michael@0: is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible"); michael@0: is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden"); michael@0: is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); michael@0: michael@0: is_element_hidden(get_node(addon, "warning"), "Warning message should be visible"); michael@0: is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); michael@0: is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); michael@0: is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); michael@0: is_element_visible(get_node(addon, "pending"), "Pending message should be visible"); michael@0: is(get_node(addon, "pending").textContent, "Test add-on 7 will be disabled after you restart " + gApp + ".", "Pending message should be correct"); michael@0: michael@0: info("Addon 8"); michael@0: addon = items["Test add-on 8"]; michael@0: addon.parentNode.ensureElementIsVisible(addon); michael@0: is(get_node(addon, "name").value, "Test add-on 8", "Name should be correct"); michael@0: michael@0: is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); michael@0: is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); michael@0: is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); michael@0: is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); michael@0: michael@0: is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); michael@0: is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); michael@0: is_element_visible(get_node(addon, "error"), "Error message should be visible"); michael@0: is(get_node(addon, "error").textContent, "Test add-on 8 is known to be vulnerable and should be updated.", "Error message should be correct"); michael@0: is_element_visible(get_node(addon, "error-link"), "Error link should be visible"); michael@0: is(get_node(addon, "error-link").value, "Update Now", "Error link text should be correct"); michael@0: is(get_node(addon, "error-link").href, "http://example.com/addon8@tests.mozilla.org", "Error link should be correct"); michael@0: is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); michael@0: michael@0: info("Addon 9"); michael@0: addon = items["Test add-on 9"]; michael@0: addon.parentNode.ensureElementIsVisible(addon); michael@0: is(get_node(addon, "name").value, "Test add-on 9", "Name should be correct"); michael@0: michael@0: is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); michael@0: is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); michael@0: is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); michael@0: is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); michael@0: michael@0: is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); michael@0: is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); michael@0: is_element_visible(get_node(addon, "error"), "Error message should be visible"); michael@0: is(get_node(addon, "error").textContent, "Test add-on 9 is known to be vulnerable. Use with caution.", "Error message should be correct"); michael@0: is_element_visible(get_node(addon, "error-link"), "Error link should be visible"); michael@0: is(get_node(addon, "error-link").value, "More Information", "Error link text should be correct"); michael@0: is(get_node(addon, "error-link").href, "http://example.com/addon9@tests.mozilla.org", "Error link should be correct"); michael@0: is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: }); michael@0: michael@0: // Check the add-ons are now in the right state michael@0: add_test(function() { michael@0: AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org", michael@0: "addon2@tests.mozilla.org", michael@0: "addon4@tests.mozilla.org", michael@0: "addon6@tests.mozilla.org"], michael@0: function([a1, a2, a4, a6]) { michael@0: is(a1.pendingOperations, AddonManager.PENDING_DISABLE, "Add-on 1 should be pending disable"); michael@0: is(a2.pendingOperations, AddonManager.PENDING_ENABLE, "Add-on 2 should be pending enable"); michael@0: is(a4.pendingOperations, AddonManager.PENDING_ENABLE, "Add-on 4 should be pending enable"); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: }); michael@0: michael@0: // Reload the list to make sure the changes are still pending and that undoing michael@0: // works michael@0: add_test(function() { michael@0: gCategoryUtilities.openType("plugin", function() { michael@0: gCategoryUtilities.openType("extension", function() { michael@0: let items = get_test_items(); michael@0: is(Object.keys(items).length, 9, "Should be nine add-ons installed"); michael@0: michael@0: info("Addon 1"); michael@0: let addon = items["Test add-on"]; michael@0: addon.parentNode.ensureElementIsVisible(addon); michael@0: is(get_node(addon, "name").value, "Test add-on", "Name should be correct"); michael@0: is_element_visible(get_node(addon, "version"), "Version should be visible"); michael@0: is(get_node(addon, "version").value, "1.0", "Version should be correct"); michael@0: is_element_visible(get_node(addon, "description"), "Description should be visible"); michael@0: is(get_node(addon, "description").value, "A test add-on", "Description should be correct"); michael@0: is_element_hidden(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be hidden"); michael@0: is_element_hidden(get_class_node(addon, "update-postfix"), "Update postfix should be hidden"); michael@0: is(get_node(addon, "date-updated").value, formatDate(gDate), "Update date should be correct"); michael@0: michael@0: is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); michael@0: is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible"); michael@0: is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden"); michael@0: is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); michael@0: michael@0: is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); michael@0: is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); michael@0: is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); michael@0: is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); michael@0: is_element_visible(get_node(addon, "pending"), "Pending message should be visible"); michael@0: is(get_node(addon, "pending").textContent, "Test add-on will be disabled after you restart " + gApp + ".", "Pending message should be correct"); michael@0: michael@0: info("Undoing"); michael@0: EventUtils.synthesizeMouseAtCenter(get_node(addon, "undo-btn"), {}, gManagerWindow); michael@0: is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); michael@0: is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); michael@0: is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); michael@0: is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); michael@0: michael@0: is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); michael@0: is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); michael@0: is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); michael@0: is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); michael@0: is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); michael@0: michael@0: info("Addon 2"); michael@0: addon = items["Test add-on 2"]; michael@0: addon.parentNode.ensureElementIsVisible(addon); michael@0: is(get_node(addon, "name").value, "Test add-on 2", "Name should be correct"); michael@0: is_element_visible(get_node(addon, "version"), "Version should be visible"); michael@0: is(get_node(addon, "version").value, "2.0", "Version should be correct"); michael@0: is_element_hidden(get_node(addon, "description"), "Description should be hidden"); michael@0: is_element_visible(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be visible"); michael@0: is_element_hidden(get_class_node(addon, "update-postfix"), "Update postfix should be hidden"); michael@0: is(get_node(addon, "date-updated").value, "Unknown", "Date should be correct"); michael@0: michael@0: is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); michael@0: is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); michael@0: is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); michael@0: is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); michael@0: michael@0: is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); michael@0: is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); michael@0: is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); michael@0: is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); michael@0: is_element_visible(get_node(addon, "pending"), "Pending message should be visible"); michael@0: is(get_node(addon, "pending").textContent, "Test add-on 2 will be enabled after you restart " + gApp + ".", "Pending message should be correct"); michael@0: michael@0: info("Undoing"); michael@0: EventUtils.synthesizeMouseAtCenter(get_node(addon, "undo-btn"), {}, gManagerWindow); michael@0: is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); michael@0: is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible"); michael@0: is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden"); michael@0: is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); michael@0: michael@0: is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); michael@0: is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); michael@0: is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); michael@0: is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); michael@0: is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); michael@0: michael@0: info("Addon 4"); michael@0: addon = items["Test add-on 4"]; michael@0: addon.parentNode.ensureElementIsVisible(addon); michael@0: is(get_node(addon, "name").value, "Test add-on 4", "Name should be correct"); michael@0: michael@0: is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); michael@0: is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); michael@0: is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); michael@0: is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); michael@0: michael@0: is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); michael@0: is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); michael@0: is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); michael@0: is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); michael@0: is_element_visible(get_node(addon, "pending"), "Pending message should be visible"); michael@0: is(get_node(addon, "pending").textContent, "Test add-on 4 will be enabled after you restart " + gApp + ".", "Pending message should be correct"); michael@0: michael@0: info("Undoing"); michael@0: EventUtils.synthesizeMouseAtCenter(get_node(addon, "undo-btn"), {}, gManagerWindow); michael@0: is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); michael@0: is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible"); michael@0: is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden"); michael@0: is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); michael@0: michael@0: is_element_visible(get_node(addon, "warning"), "Warning message should be visible"); michael@0: is(get_node(addon, "warning").textContent, "Test add-on 4 is known to cause security or stability issues.", "Warning message should be correct"); michael@0: is_element_visible(get_node(addon, "warning-link"), "Warning link should be visible"); michael@0: is(get_node(addon, "warning-link").value, "More Information", "Warning link text should be correct"); michael@0: is(get_node(addon, "warning-link").href, "http://example.com/addon4@tests.mozilla.org", "Warning link should be correct"); michael@0: is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); michael@0: is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); michael@0: is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); michael@0: michael@0: info("Addon 6"); michael@0: addon = items["Test add-on 6"]; michael@0: addon.parentNode.ensureElementIsVisible(addon); michael@0: is(get_node(addon, "name").value, "Test add-on 6", "Name should be correct"); michael@0: is_element_visible(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be visible"); michael@0: michael@0: is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); michael@0: is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible"); michael@0: is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden"); michael@0: is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); michael@0: michael@0: is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); michael@0: is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); michael@0: is_element_hidden(get_node(addon, "error"), "Error message should be visible"); michael@0: is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); michael@0: is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); michael@0: michael@0: info("Enabling"); michael@0: EventUtils.synthesizeMouseAtCenter(get_node(addon, "enable-btn"), {}, gManagerWindow); michael@0: is_element_hidden(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be hidden"); michael@0: michael@0: is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); michael@0: is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); michael@0: is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); michael@0: is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); michael@0: michael@0: is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); michael@0: is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); michael@0: is_element_hidden(get_node(addon, "error"), "Error message should be visible"); michael@0: is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); michael@0: is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); michael@0: michael@0: info("Addon 7"); michael@0: addon = items["Test add-on 7"]; michael@0: addon.parentNode.ensureElementIsVisible(addon); michael@0: is(get_node(addon, "name").value, "Test add-on 7", "Name should be correct"); michael@0: michael@0: is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); michael@0: is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible"); michael@0: is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden"); michael@0: is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); michael@0: michael@0: is_element_hidden(get_node(addon, "warning"), "Warning message should be visible"); michael@0: is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); michael@0: is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); michael@0: is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); michael@0: is_element_visible(get_node(addon, "pending"), "Pending message should be visible"); michael@0: is(get_node(addon, "pending").textContent, "Test add-on 7 will be disabled after you restart " + gApp + ".", "Pending message should be correct"); michael@0: michael@0: info("Undoing"); michael@0: EventUtils.synthesizeMouseAtCenter(get_node(addon, "undo-btn"), {}, gManagerWindow); michael@0: is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); michael@0: is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); michael@0: is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); michael@0: is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); michael@0: michael@0: is_element_visible(get_node(addon, "warning"), "Warning message should be hidden"); michael@0: is(get_node(addon, "warning").textContent, "An important update is available for Test add-on 7.", "Warning message should be correct"); michael@0: is_element_visible(get_node(addon, "warning-link"), "Warning link should be visible"); michael@0: is(get_node(addon, "warning-link").value, "Update Now", "Warning link text should be correct"); michael@0: is(get_node(addon, "warning-link").href, gPluginURL, "Warning link should be correct"); michael@0: is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); michael@0: is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); michael@0: is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: }); michael@0: }); michael@0: michael@0: // Check the add-ons are now in the right state michael@0: add_test(function() { michael@0: AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org", michael@0: "addon2@tests.mozilla.org", michael@0: "addon4@tests.mozilla.org"], michael@0: function([a1, a2, a4]) { michael@0: is(a1.pendingOperations, 0, "Add-on 1 should not have any pending operations"); michael@0: is(a2.pendingOperations, 0, "Add-on 1 should not have any pending operations"); michael@0: is(a4.pendingOperations, 0, "Add-on 1 should not have any pending operations"); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: }); michael@0: michael@0: // Check that upgrades with onExternalInstall take effect immediately michael@0: add_test(function() { michael@0: gProvider.createAddons([{ michael@0: id: "addon1@tests.mozilla.org", michael@0: name: "Test add-on replacement", michael@0: version: "2.0", michael@0: description: "A test add-on with a new description", michael@0: updateDate: gDate, michael@0: operationsRequiringRestart: AddonManager.OP_NEEDS_RESTART_NONE michael@0: }]); michael@0: michael@0: let items = get_test_items(); michael@0: is(Object.keys(items).length, 9, "Should be nine add-ons installed"); michael@0: michael@0: let addon = items["Test add-on replacement"]; michael@0: addon.parentNode.ensureElementIsVisible(addon); michael@0: is(get_node(addon, "name").value, "Test add-on replacement", "Name should be correct"); michael@0: is_element_visible(get_node(addon, "version"), "Version should be visible"); michael@0: is(get_node(addon, "version").value, "2.0", "Version should be correct"); michael@0: is_element_visible(get_node(addon, "description"), "Description should be visible"); michael@0: is(get_node(addon, "description").value, "A test add-on with a new description", "Description should be correct"); michael@0: is_element_hidden(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be hidden"); michael@0: is_element_hidden(get_class_node(addon, "update-postfix"), "Update postfix should be hidden"); michael@0: is(get_node(addon, "date-updated").value, formatDate(gDate), "Update date should be correct"); michael@0: michael@0: is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); michael@0: is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); michael@0: is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); michael@0: is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); michael@0: michael@0: is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); michael@0: is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); michael@0: is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); michael@0: is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); michael@0: is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: // Check that focus changes correctly move around the selected list item michael@0: add_test(function() { michael@0: function is_node_in_list(aNode) { michael@0: var list = gManagerWindow.document.getElementById("addon-list"); michael@0: michael@0: while (aNode && aNode != list) michael@0: aNode = aNode.parentNode; michael@0: michael@0: if (aNode) michael@0: return true; michael@0: return false; michael@0: } michael@0: michael@0: // Ignore the OSX full keyboard access setting michael@0: Services.prefs.setBoolPref("accessibility.tabfocus_applies_to_xul", false); michael@0: michael@0: let items = get_test_items(); michael@0: michael@0: var fm = Cc["@mozilla.org/focus-manager;1"]. michael@0: getService(Ci.nsIFocusManager); michael@0: michael@0: let addon = items["Test add-on 6"]; michael@0: EventUtils.synthesizeMouseAtCenter(addon, { }, gManagerWindow); michael@0: is(fm.focusedElement, addon.parentNode, "Focus should have moved to the list"); michael@0: michael@0: EventUtils.synthesizeKey("VK_TAB", { }, gManagerWindow); michael@0: is(fm.focusedElement, get_node(addon, "details-btn"), "Focus should have moved to the more button"); michael@0: michael@0: EventUtils.synthesizeKey("VK_TAB", { }, gManagerWindow); michael@0: is(fm.focusedElement, get_node(addon, "disable-btn"), "Focus should have moved to the disable button"); michael@0: michael@0: EventUtils.synthesizeKey("VK_TAB", { }, gManagerWindow); michael@0: is(fm.focusedElement, get_node(addon, "remove-btn"), "Focus should have moved to the remove button"); michael@0: michael@0: EventUtils.synthesizeKey("VK_TAB", { }, gManagerWindow); michael@0: ok(!is_node_in_list(fm.focusedElement), "Focus should be outside the list"); michael@0: michael@0: EventUtils.synthesizeKey("VK_TAB", { shiftKey: true }, gManagerWindow); michael@0: is(fm.focusedElement, get_node(addon, "remove-btn"), "Focus should have moved to the remove button"); michael@0: michael@0: EventUtils.synthesizeKey("VK_TAB", { shiftKey: true }, gManagerWindow); michael@0: EventUtils.synthesizeKey("VK_TAB", { shiftKey: true }, gManagerWindow); michael@0: is(fm.focusedElement, get_node(addon, "details-btn"), "Focus should have moved to the more button"); michael@0: michael@0: EventUtils.synthesizeKey("VK_TAB", { shiftKey: true }, gManagerWindow); michael@0: is(fm.focusedElement, addon.parentNode, "Focus should have moved to the list"); michael@0: michael@0: EventUtils.synthesizeKey("VK_TAB", { shiftKey: true }, gManagerWindow); michael@0: ok(!is_node_in_list(fm.focusedElement), "Focus should be outside the list"); michael@0: michael@0: try { michael@0: Services.prefs.clearUserPref("accessibility.tabfocus_applies_to_xul"); michael@0: } michael@0: catch (e) { } michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: michael@0: add_test(function() { michael@0: info("Enabling lightweight theme"); michael@0: LightweightThemeManager.currentTheme = gLWTheme; michael@0: michael@0: gManagerWindow.loadView("addons://list/theme"); michael@0: wait_for_view_load(gManagerWindow, function() { michael@0: var addon = get_addon_element(gManagerWindow, "4@personas.mozilla.org"); michael@0: michael@0: is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); michael@0: is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); michael@0: is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); michael@0: is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); michael@0: michael@0: info("Disabling lightweight theme"); michael@0: LightweightThemeManager.currentTheme = null; michael@0: michael@0: is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); michael@0: is_element_visible(get_node(addon, "enable-btn"), "Enable button should be hidden"); michael@0: is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be visible"); michael@0: is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); michael@0: michael@0: AddonManager.getAddonByID("4@personas.mozilla.org", function(aAddon) { michael@0: aAddon.uninstall(); michael@0: run_next_test(); michael@0: }); michael@0: }); michael@0: }); michael@0: michael@0: // Check that onPropertyChanges for appDisabled updates the UI michael@0: add_test(function() { michael@0: info("Checking that onPropertyChanges for appDisabled updates the UI"); michael@0: michael@0: AddonManager.getAddonByID("addon2@tests.mozilla.org", function(aAddon) { michael@0: aAddon.userDisabled = true; michael@0: aAddon.isCompatible = true; michael@0: aAddon.appDisabled = false; michael@0: michael@0: gManagerWindow.loadView("addons://list/extension"); michael@0: wait_for_view_load(gManagerWindow, function() { michael@0: var el = get_addon_element(gManagerWindow, "addon2@tests.mozilla.org"); michael@0: michael@0: is(el.getAttribute("active"), "false", "Addon should not be marked as active"); michael@0: is_element_hidden(get_node(el, "warning"), "Warning message should not be visible"); michael@0: michael@0: info("Making addon incompatible and appDisabled"); michael@0: aAddon.isCompatible = false; michael@0: aAddon.appDisabled = true; michael@0: michael@0: is(el.getAttribute("active"), "false", "Addon should not be marked as active"); michael@0: is_element_visible(get_node(el, "warning"), "Warning message should be visible"); michael@0: is(get_node(el, "warning").textContent, "Test add-on 2 is incompatible with " + gApp + " " + gVersion + ".", "Warning message should be correct"); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: }); michael@0: });