tenfourfox/toolkit/mozapps/extensions/test/browser/browser_bug714593.js
Cameron Kaiser c9b2922b70 hello FPR
2017-04-19 00:56:45 -07:00

141 lines
4.7 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/
*/
// Tests that installed addons in the search view load inline prefs properly
const PREF_GETADDONS_GETSEARCHRESULTS = "extensions.getAddons.search.url";
const NO_MATCH_URL = TESTROOT + "browser_searching_empty.xml";
var gManagerWindow;
var gCategoryUtilities;
var gProvider;
function test() {
// Turn on searching for this test
Services.prefs.setIntPref(PREF_SEARCH_MAXRESULTS, 15);
waitForExplicitFinish();
gProvider = new MockProvider();
gProvider.createAddons([{
id: "inlinesettings2@tests.mozilla.org",
name: "Inline Settings (Regular)",
version: "1",
optionsURL: CHROMEROOT + "options.xul",
optionsType: AddonManager.OPTIONS_TYPE_INLINE
}]);
open_manager("addons://list/extension", function(aWindow) {
gManagerWindow = aWindow;
gCategoryUtilities = new CategoryUtilities(gManagerWindow);
run_next_test();
});
}
function end_test() {
close_manager(gManagerWindow, finish);
}
/*
* Checks whether or not the Add-ons Manager is currently searching
*
* @param aExpectedSearching
* The expected isSearching state
*/
function check_is_searching(aExpectedSearching) {
var loading = gManagerWindow.document.getElementById("search-loading");
is(!is_hidden(loading), aExpectedSearching,
"Search throbber should be showing iff currently searching");
}
/*
* Completes a search
*
* @param aQuery
* The query to search for
* @param aFinishImmediately
* Boolean representing whether or not the search is expected to
* finish immediately
* @param aCallback
* The callback to call when the search is done
* @param aCategoryType
* The expected selected category after the search is done.
* Optional and defaults to "search"
*/
function search(aQuery, aFinishImmediately, aCallback, aCategoryType) {
// Point search to the correct xml test file
Services.prefs.setCharPref(PREF_GETADDONS_GETSEARCHRESULTS, NO_MATCH_URL);
aCategoryType = aCategoryType ? aCategoryType : "search";
var searchBox = gManagerWindow.document.getElementById("header-search");
searchBox.value = aQuery;
EventUtils.synthesizeMouseAtCenter(searchBox, { }, gManagerWindow);
EventUtils.synthesizeKey("VK_RETURN", { }, gManagerWindow);
var finishImmediately = true;
wait_for_view_load(gManagerWindow, function() {
is(gCategoryUtilities.selectedCategory, aCategoryType, "Expected category view should be selected");
is(gCategoryUtilities.isTypeVisible("search"), aCategoryType == "search",
"Search category should only be visible if it is the current view");
is(finishImmediately, aFinishImmediately, "Search should finish immediately only if expected");
aCallback();
});
finishImmediately = false
if (!aFinishImmediately)
check_is_searching(true);
}
/*
* Get item for a specific add-on by name
*
* @param aName
* The name of the add-on to search for
* @return Row of add-on if found, null otherwise
*/
function get_addon_item(aName) {
var id = aName + "@tests.mozilla.org";
var list = gManagerWindow.document.getElementById("search-list");
var rows = list.getElementsByTagName("richlistitem");
for (let row of rows) {
if (row.mAddon && row.mAddon.id == id)
return row;
}
return null;
}
add_test(function() {
search("settings", false, function() {
var localFilter = gManagerWindow.document.getElementById("search-filter-local");
EventUtils.synthesizeMouseAtCenter(localFilter, { }, gManagerWindow);
var item = get_addon_item("inlinesettings2");
// Force the XBL binding to apply.
item.clientTop;
var button = gManagerWindow.document.getAnonymousElementByAttribute(item, "anonid", "preferences-btn");
is_element_visible(button, "Preferences button should be visible");
EventUtils.synthesizeMouseAtCenter(button, { clickCount: 1 }, gManagerWindow);
wait_for_view_load(gManagerWindow, function() {
is(gManagerWindow.gViewController.currentViewObj, gManagerWindow.gDetailView, "View should have changed to detail");
var searchCategory = gManagerWindow.document.getElementById("category-search");
EventUtils.synthesizeMouseAtCenter(searchCategory, { }, gManagerWindow);
wait_for_view_load(gManagerWindow, function() {
is(gManagerWindow.gViewController.currentViewObj, gManagerWindow.gSearchView, "View should have changed back to search");
// Reset filter to remote to avoid breaking later tests.
var remoteFilter = gManagerWindow.document.getElementById("search-filter-remote");
EventUtils.synthesizeMouseAtCenter(remoteFilter, { }, gManagerWindow);
run_next_test();
});
});
});
});