diff options
author | Matt A. Tobin <email@mattatobin.com> | 2018-02-10 02:49:12 -0500 |
---|---|---|
committer | Matt A. Tobin <email@mattatobin.com> | 2018-02-10 02:49:12 -0500 |
commit | 4fb11cd5966461bccc3ed1599b808237be6b0de9 (patch) | |
tree | d7f0ccd49cebb3544d52635ff1bd6ed4d763823f /toolkit/mozapps/webextensions/test/browser/browser_types.js | |
parent | f164d9124708b50789dbb6959e1de96cc5697c48 (diff) | |
download | UXP-4fb11cd5966461bccc3ed1599b808237be6b0de9.tar UXP-4fb11cd5966461bccc3ed1599b808237be6b0de9.tar.gz UXP-4fb11cd5966461bccc3ed1599b808237be6b0de9.tar.lz UXP-4fb11cd5966461bccc3ed1599b808237be6b0de9.tar.xz UXP-4fb11cd5966461bccc3ed1599b808237be6b0de9.zip |
Move WebExtensions enabled Add-ons Manager
Diffstat (limited to 'toolkit/mozapps/webextensions/test/browser/browser_types.js')
-rw-r--r-- | toolkit/mozapps/webextensions/test/browser/browser_types.js | 473 |
1 files changed, 473 insertions, 0 deletions
diff --git a/toolkit/mozapps/webextensions/test/browser/browser_types.js b/toolkit/mozapps/webextensions/test/browser/browser_types.js new file mode 100644 index 000000000..8abb0ff73 --- /dev/null +++ b/toolkit/mozapps/webextensions/test/browser/browser_types.js @@ -0,0 +1,473 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +// Tests that registering new types works + +var gManagerWindow; +var gCategoryUtilities; + +var gProvider = { +}; + +var gTypes = [ + new AddonManagerPrivate.AddonType("type1", null, "Type 1", + AddonManager.VIEW_TYPE_LIST, 4500), + new AddonManagerPrivate.AddonType("missing1", null, "Missing 1"), + new AddonManagerPrivate.AddonType("type2", null, "Type 1", + AddonManager.VIEW_TYPE_LIST, 5100, + AddonManager.TYPE_UI_HIDE_EMPTY), + { + id: "type3", + name: "Type 3", + uiPriority: 5200, + viewType: AddonManager.VIEW_TYPE_LIST + } +]; + +function go_back(aManager) { + if (gUseInContentUI) { + gBrowser.goBack(); + } else { + EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("back-btn"), + { }, aManager); + } +} + +function go_forward(aManager) { + if (gUseInContentUI) { + gBrowser.goForward(); + } else { + EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("forward-btn"), + { }, aManager); + } +} + +function check_state(aManager, canGoBack, canGoForward) { + var doc = aManager.document; + + if (gUseInContentUI) { + is(gBrowser.canGoBack, canGoBack, "canGoBack should be correct"); + is(gBrowser.canGoForward, canGoForward, "canGoForward should be correct"); + } + + if (!is_hidden(doc.getElementById("back-btn"))) { + is(!doc.getElementById("back-btn").disabled, canGoBack, "Back button should have the right state"); + is(!doc.getElementById("forward-btn").disabled, canGoForward, "Forward button should have the right state"); + } +} + +function test() { + waitForExplicitFinish(); + + run_next_test(); +} + +function end_test() { + finish(); +} + +// Add a new type, open the manager and make sure it is in the right place +add_test(function() { + AddonManagerPrivate.registerProvider(gProvider, gTypes); + + open_manager(null, function(aWindow) { + gManagerWindow = aWindow; + gCategoryUtilities = new CategoryUtilities(gManagerWindow); + + ok(gCategoryUtilities.get("type1"), "Type 1 should be present"); + ok(gCategoryUtilities.get("type2"), "Type 2 should be present"); + ok(!gCategoryUtilities.get("missing1", true), "Missing 1 should be absent"); + + is(gCategoryUtilities.get("type1").previousSibling.getAttribute("value"), + "addons://list/extension", "Type 1 should be in the right place"); + is(gCategoryUtilities.get("type2").previousSibling.getAttribute("value"), + "addons://list/theme", "Type 2 should be in the right place"); + + ok(gCategoryUtilities.isTypeVisible("type1"), "Type 1 should be visible"); + ok(!gCategoryUtilities.isTypeVisible("type2"), "Type 2 should be hidden"); + + run_next_test(); + }); +}); + +// Select the type, close the manager and remove it then open the manager and +// check we're back to the default view +add_test(function() { + gCategoryUtilities.openType("type1", function() { + close_manager(gManagerWindow, function() { + AddonManagerPrivate.unregisterProvider(gProvider); + + open_manager(null, function(aWindow) { + gManagerWindow = aWindow; + gCategoryUtilities = new CategoryUtilities(gManagerWindow); + + ok(!gCategoryUtilities.get("type1", true), "Type 1 should be absent"); + ok(!gCategoryUtilities.get("type2", true), "Type 2 should be absent"); + ok(!gCategoryUtilities.get("missing1", true), "Missing 1 should be absent"); + + is(gCategoryUtilities.selectedCategory, "discover", "Should be back to the default view"); + + close_manager(gManagerWindow, run_next_test); + }); + }); + }); +}); + +// Add a type while the manager is still open and check it appears +add_test(function() { + open_manager("addons://list/extension", function(aWindow) { + gManagerWindow = aWindow; + gCategoryUtilities = new CategoryUtilities(gManagerWindow); + + ok(!gCategoryUtilities.get("type1", true), "Type 1 should be absent"); + ok(!gCategoryUtilities.get("type2", true), "Type 2 should be absent"); + ok(!gCategoryUtilities.get("missing1", true), "Missing 1 should be absent"); + + AddonManagerPrivate.registerProvider(gProvider, gTypes); + + ok(gCategoryUtilities.get("type1"), "Type 1 should be present"); + ok(gCategoryUtilities.get("type2"), "Type 2 should be present"); + ok(!gCategoryUtilities.get("missing1", true), "Missing 1 should be absent"); + + is(gCategoryUtilities.get("type1").previousSibling.getAttribute("value"), + "addons://list/extension", "Type 1 should be in the right place"); + is(gCategoryUtilities.get("type2").previousSibling.getAttribute("value"), + "addons://list/theme", "Type 2 should be in the right place"); + + ok(gCategoryUtilities.isTypeVisible("type1"), "Type 1 should be visible"); + ok(!gCategoryUtilities.isTypeVisible("type2"), "Type 2 should be hidden"); + + run_next_test(); + }); +}); + +// Remove the type while it is beng viewed and check it is replaced with the +// default view +add_test(function() { + gCategoryUtilities.openType("type1", function() { + gCategoryUtilities.openType("plugin", function() { + go_back(gManagerWindow); + wait_for_view_load(gManagerWindow, function() { + is(gCategoryUtilities.selectedCategory, "type1", "Should be showing the custom view"); + check_state(gManagerWindow, true, true); + + AddonManagerPrivate.unregisterProvider(gProvider); + + ok(!gCategoryUtilities.get("type1", true), "Type 1 should be absent"); + ok(!gCategoryUtilities.get("type2", true), "Type 2 should be absent"); + ok(!gCategoryUtilities.get("missing1", true), "Missing 1 should be absent"); + + is(gCategoryUtilities.selectedCategory, "discover", "Should be back to the default view"); + check_state(gManagerWindow, true, true); + + go_back(gManagerWindow); + wait_for_view_load(gManagerWindow, function() { + is(gCategoryUtilities.selectedCategory, "extension", "Should be showing the extension view"); + check_state(gManagerWindow, false, true); + + go_forward(gManagerWindow); + wait_for_view_load(gManagerWindow, function() { + is(gCategoryUtilities.selectedCategory, "discover", "Should be back to the default view"); + check_state(gManagerWindow, true, true); + + go_forward(gManagerWindow); + wait_for_view_load(gManagerWindow, function() { + is(gCategoryUtilities.selectedCategory, "plugin", "Should be back to the plugins view"); + check_state(gManagerWindow, true, false); + + go_back(gManagerWindow); + wait_for_view_load(gManagerWindow, function() { + is(gCategoryUtilities.selectedCategory, "discover", "Should be back to the default view"); + check_state(gManagerWindow, true, true); + + close_manager(gManagerWindow, run_next_test); + }); + }); + }); + }); + }); + }); + }); +}); + +// Test that when going back to a now missing category we skip it +add_test(function() { + open_manager("addons://list/extension", function(aWindow) { + gManagerWindow = aWindow; + gCategoryUtilities = new CategoryUtilities(gManagerWindow); + + AddonManagerPrivate.registerProvider(gProvider, gTypes); + + ok(gCategoryUtilities.get("type1"), "Type 1 should be present"); + ok(gCategoryUtilities.isTypeVisible("type1"), "Type 1 should be visible"); + + gCategoryUtilities.openType("type1", function() { + gCategoryUtilities.openType("plugin", function() { + AddonManagerPrivate.unregisterProvider(gProvider); + + ok(!gCategoryUtilities.get("type1", true), "Type 1 should not be present"); + + go_back(gManagerWindow); + + wait_for_view_load(gManagerWindow, function() { + is(gCategoryUtilities.selectedCategory, "extension", "Should be back to the first view"); + check_state(gManagerWindow, false, true); + + close_manager(gManagerWindow, run_next_test); + }); + }); + }); + }); +}); + +// Test that when going forward to a now missing category we skip it +add_test(function() { + open_manager("addons://list/extension", function(aWindow) { + gManagerWindow = aWindow; + gCategoryUtilities = new CategoryUtilities(gManagerWindow); + + AddonManagerPrivate.registerProvider(gProvider, gTypes); + + ok(gCategoryUtilities.get("type1"), "Type 1 should be present"); + ok(gCategoryUtilities.isTypeVisible("type1"), "Type 1 should be visible"); + + gCategoryUtilities.openType("type1", function() { + gCategoryUtilities.openType("plugin", function() { + go_back(gManagerWindow); + wait_for_view_load(gManagerWindow, function() { + go_back(gManagerWindow); + wait_for_view_load(gManagerWindow, function() { + is(gCategoryUtilities.selectedCategory, "extension", "Should be back to the extension view"); + + AddonManagerPrivate.unregisterProvider(gProvider); + + ok(!gCategoryUtilities.get("type1", true), "Type 1 should not be present"); + + go_forward(gManagerWindow); + + wait_for_view_load(gManagerWindow, function() { + is(gCategoryUtilities.selectedCategory, "plugin", "Should be back to the plugin view"); + check_state(gManagerWindow, true, false); + + close_manager(gManagerWindow, run_next_test); + }); + }); + }); + }); + }); + }); +}); + +// Test that when going back to a now missing category and we can't go back any +// any further then we just display the default view +add_test(function() { + AddonManagerPrivate.registerProvider(gProvider, gTypes); + + open_manager("addons://list/type1", function(aWindow) { + gManagerWindow = aWindow; + gCategoryUtilities = new CategoryUtilities(gManagerWindow); + is(gCategoryUtilities.selectedCategory, "type1", "Should be at the custom view"); + + ok(gCategoryUtilities.get("type1"), "Type 1 should be present"); + ok(gCategoryUtilities.isTypeVisible("type1"), "Type 1 should be visible"); + + gCategoryUtilities.openType("extension", function() { + AddonManagerPrivate.unregisterProvider(gProvider); + + ok(!gCategoryUtilities.get("type1", true), "Type 1 should not be present"); + + go_back(gManagerWindow); + + wait_for_view_load(gManagerWindow, function() { + is(gCategoryUtilities.selectedCategory, "discover", "Should be at the default view"); + check_state(gManagerWindow, false, true); + + close_manager(gManagerWindow, run_next_test); + }); + }); + }); +}); + +// Test that when going forward to a now missing category and we can't go +// forward any further then we just display the default view +add_test(function() { + AddonManagerPrivate.registerProvider(gProvider, gTypes); + + open_manager("addons://list/extension", function(aWindow) { + gManagerWindow = aWindow; + gCategoryUtilities = new CategoryUtilities(gManagerWindow); + + ok(gCategoryUtilities.get("type1"), "Type 1 should be present"); + ok(gCategoryUtilities.isTypeVisible("type1"), "Type 1 should be visible"); + + gCategoryUtilities.openType("type1", function() { + go_back(gManagerWindow); + + wait_for_view_load(gManagerWindow, function() { + is(gCategoryUtilities.selectedCategory, "extension", "Should be at the extension view"); + + AddonManagerPrivate.unregisterProvider(gProvider); + + ok(!gCategoryUtilities.get("type1", true), "Type 1 should not be present"); + + go_forward(gManagerWindow); + + wait_for_view_load(gManagerWindow, function() { + is(gCategoryUtilities.selectedCategory, "discover", "Should be at the default view"); + check_state(gManagerWindow, true, false); + + close_manager(gManagerWindow, run_next_test); + }); + }); + }); + }); +}); + +// Test that when going back we skip multiple missing categories +add_test(function() { + open_manager("addons://list/extension", function(aWindow) { + gManagerWindow = aWindow; + gCategoryUtilities = new CategoryUtilities(gManagerWindow); + + AddonManagerPrivate.registerProvider(gProvider, gTypes); + + ok(gCategoryUtilities.get("type1"), "Type 1 should be present"); + ok(gCategoryUtilities.isTypeVisible("type1"), "Type 1 should be visible"); + + gCategoryUtilities.openType("type1", function() { + gCategoryUtilities.openType("type3", function() { + gCategoryUtilities.openType("plugin", function() { + AddonManagerPrivate.unregisterProvider(gProvider); + + ok(!gCategoryUtilities.get("type1", true), "Type 1 should not be present"); + + go_back(gManagerWindow); + + wait_for_view_load(gManagerWindow, function() { + is(gCategoryUtilities.selectedCategory, "extension", "Should be back to the first view"); + check_state(gManagerWindow, false, true); + + close_manager(gManagerWindow, run_next_test); + }); + }); + }); + }); + }); +}); + +// Test that when going forward we skip multiple missing categories +add_test(function() { + open_manager("addons://list/extension", function(aWindow) { + gManagerWindow = aWindow; + gCategoryUtilities = new CategoryUtilities(gManagerWindow); + + AddonManagerPrivate.registerProvider(gProvider, gTypes); + + ok(gCategoryUtilities.get("type1"), "Type 1 should be present"); + ok(gCategoryUtilities.isTypeVisible("type1"), "Type 1 should be visible"); + + gCategoryUtilities.openType("type1", function() { + gCategoryUtilities.openType("type3", function() { + gCategoryUtilities.openType("plugin", function() { + go_back(gManagerWindow); + wait_for_view_load(gManagerWindow, function() { + go_back(gManagerWindow); + wait_for_view_load(gManagerWindow, function() { + go_back(gManagerWindow); + wait_for_view_load(gManagerWindow, function() { + is(gCategoryUtilities.selectedCategory, "extension", "Should be back to the extension view"); + + AddonManagerPrivate.unregisterProvider(gProvider); + + ok(!gCategoryUtilities.get("type1", true), "Type 1 should not be present"); + + go_forward(gManagerWindow); + + wait_for_view_load(gManagerWindow, function() { + is(gCategoryUtilities.selectedCategory, "plugin", "Should be back to the plugin view"); + check_state(gManagerWindow, true, false); + + close_manager(gManagerWindow, run_next_test); + }); + }); + }); + }); + }); + }); + }); + }); +}); + +// Test that when going back we skip all missing categories and when we can't go +// back any any further then we just display the default view +add_test(function() { + AddonManagerPrivate.registerProvider(gProvider, gTypes); + + open_manager("addons://list/type1", function(aWindow) { + gManagerWindow = aWindow; + gCategoryUtilities = new CategoryUtilities(gManagerWindow); + is(gCategoryUtilities.selectedCategory, "type1", "Should be at the custom view"); + + ok(gCategoryUtilities.get("type1"), "Type 1 should be present"); + ok(gCategoryUtilities.isTypeVisible("type1"), "Type 1 should be visible"); + + gCategoryUtilities.openType("type3", function() { + gCategoryUtilities.openType("extension", function() { + AddonManagerPrivate.unregisterProvider(gProvider); + + ok(!gCategoryUtilities.get("type1", true), "Type 1 should not be present"); + + go_back(gManagerWindow); + + wait_for_view_load(gManagerWindow, function() { + is(gCategoryUtilities.selectedCategory, "discover", "Should be at the default view"); + check_state(gManagerWindow, false, true); + + close_manager(gManagerWindow, run_next_test); + }); + }); + }); + }); +}); + +// Test that when going forward we skip all missing categories and when we can't +// go back any any further then we just display the default view +add_test(function() { + AddonManagerPrivate.registerProvider(gProvider, gTypes); + + open_manager("addons://list/extension", function(aWindow) { + gManagerWindow = aWindow; + gCategoryUtilities = new CategoryUtilities(gManagerWindow); + + ok(gCategoryUtilities.get("type1"), "Type 1 should be present"); + ok(gCategoryUtilities.isTypeVisible("type1"), "Type 1 should be visible"); + + gCategoryUtilities.openType("type1", function() { + gCategoryUtilities.openType("type3", function() { + go_back(gManagerWindow); + + wait_for_view_load(gManagerWindow, function() { + go_back(gManagerWindow); + + wait_for_view_load(gManagerWindow, function() { + is(gCategoryUtilities.selectedCategory, "extension", "Should be at the extension view"); + + AddonManagerPrivate.unregisterProvider(gProvider); + + ok(!gCategoryUtilities.get("type1", true), "Type 1 should not be present"); + + go_forward(gManagerWindow); + + wait_for_view_load(gManagerWindow, function() { + is(gCategoryUtilities.selectedCategory, "discover", "Should be at the default view"); + check_state(gManagerWindow, true, false); + + close_manager(gManagerWindow, run_next_test); + }); + }); + }); + }); + }); + }); +}); |