mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
142 lines
4.7 KiB
JavaScript
142 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 (var i = 0; i < rows.length; i++) {
|
||
|
var row = rows[i];
|
||
|
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();
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|