fune/browser/components/preferences/in-content/tests/browser_applications_selection.js
Johann Hofmann 3eac596d72 Bug 1371219 - Add an inputSource attribute to XULCommandEvent. r=smaug
In the frontend we need to know if XUL buttons in the toolbar were
triggered by a touch event, so we're passing on the inputSource
in the command event.

MozReview-Commit-ID: DMvgZULk9hT

--HG--
extra : rebase_source : c455c8ec77e439bf02c1e3e8d34a36e1fb5e3bd0
2017-07-20 17:45:56 +02:00

161 lines
5.9 KiB
JavaScript

var win;
var feedItem;
var container;
SimpleTest.requestCompleteLog();
add_task(async function setup() {
await openPreferencesViaOpenPreferencesAPI("applications", null, {leaveOpen: true});
info("Preferences page opened on the applications pane.");
registerCleanupFunction(() => {
gBrowser.removeCurrentTab();
});
});
add_task(async function getFeedItem() {
win = gBrowser.selectedBrowser.contentWindow;
container = win.document.getElementById("handlersView");
feedItem = container.querySelector("richlistitem[type='application/vnd.mozilla.maybe.feed']");
Assert.ok(feedItem, "feedItem is present in handlersView.");
})
add_task(async function selectInternalOptionForFeed() {
// Select the item.
feedItem.scrollIntoView();
container.selectItem(feedItem);
Assert.ok(feedItem.selected, "Should be able to select our item.");
// Wait for the menu.
let list = await waitForCondition(() =>
win.document.getAnonymousElementByAttribute(feedItem, "class", "actionsMenu"));
info("Got list after item was selected");
// Find the "Add Live bookmarks option".
let chooseItems = list.getElementsByAttribute("action", Ci.nsIHandlerInfo.handleInternally);
Assert.equal(chooseItems.length, 1, "Should only be one action to handle internally");
// Select the option.
let cmdEvent = win.document.createEvent("xulcommandevent");
cmdEvent.initCommandEvent("command", true, true, win, 0, false, false, false, false, null, 0);
chooseItems[0].dispatchEvent(cmdEvent);
// Check that we display the correct result.
list = await waitForCondition(() =>
win.document.getAnonymousElementByAttribute(feedItem, "class", "actionsMenu"));
info("Got list after item was selected");
Assert.ok(list.selectedItem, "Should have a selected item.");
Assert.equal(list.selectedItem.getAttribute("action"),
Ci.nsIHandlerInfo.handleInternally,
"Newly selected item should be the expected one.");
});
// This builds on the previous selectInternalOptionForFeed task.
add_task(async function reselectInternalOptionForFeed() {
// Now select a different option in the list - use the pdf item as that doesn't
// need to load any favicons.
let anotherItem = container.querySelector("richlistitem[type='application/pdf']");
container.selectItem(anotherItem);
// Wait for the menu so that we don't hit race conditions.
await waitForCondition(() =>
win.document.getAnonymousElementByAttribute(anotherItem, "class", "actionsMenu"));
info("Got list after item was selected");
// Now select the feed item again, and check what it is displaying.
container.selectItem(feedItem);
let list = await waitForCondition(() =>
win.document.getAnonymousElementByAttribute(feedItem, "class", "actionsMenu"));
info("Got list after item was selected");
Assert.ok(list.selectedItem,
"Should have a selected item");
Assert.equal(list.selectedItem.getAttribute("action"),
Ci.nsIHandlerInfo.handleInternally,
"Selected item should still be the same as the previously selected item.");
});
add_task(async function sortingCheck() {
win = gBrowser.selectedBrowser.contentWindow;
const handlerView = win.document.getElementById("handlersView");
const typeColumn = win.document.getElementById("typeColumn");
Assert.ok(typeColumn, "typeColumn is present in handlersView.");
// Test default sorting
assertSortByType("ascending");
const oldDir = typeColumn.getAttribute("sortDirection");
// Test sorting on the type column
typeColumn.click();
assertSortByType("descending");
Assert.notEqual(oldDir,
typeColumn.getAttribute("sortDirection"),
"Sort direction should change");
typeColumn.click();
assertSortByType("ascending");
const actionColumn = win.document.getElementById("actionColumn");
Assert.ok(actionColumn, "actionColumn is present in handlersView.");
// Test sorting on the action column
const oldActionDir = actionColumn.getAttribute("sortDirection");
actionColumn.click();
assertSortByAction("ascending");
Assert.notEqual(oldActionDir,
actionColumn.getAttribute("sortDirection"),
"Sort direction should change");
actionColumn.click();
assertSortByAction("descending");
function assertSortByAction(order) {
Assert.equal(actionColumn.getAttribute("sortDirection"),
order,
`Sort direction should be ${order}`);
let siteItems = handlerView.getElementsByTagName("richlistitem");
for (let i = 0; i < siteItems.length - 1; ++i) {
let aType = siteItems[i].getAttribute("actionDescription").toLowerCase();
let bType = siteItems[i + 1].getAttribute("actionDescription").toLowerCase();
let result = 0;
if (aType > bType) {
result = 1;
} else if (bType > aType) {
result = -1;
}
if (order == "ascending") {
Assert.lessOrEqual(result, 0, "Should sort applications in the ascending order by action");
} else {
Assert.greaterOrEqual(result, 0, "Should sort applications in the descending order by action");
}
}
}
function assertSortByType(order) {
Assert.equal(typeColumn.getAttribute("sortDirection"),
order,
`Sort direction should be ${order}`);
let siteItems = handlerView.getElementsByTagName("richlistitem");
for (let i = 0; i < siteItems.length - 1; ++i) {
let aType = siteItems[i].getAttribute("typeDescription").toLowerCase();
let bType = siteItems[i + 1].getAttribute("typeDescription").toLowerCase();
let result = 0;
if (aType > bType) {
result = 1;
} else if (bType > aType) {
result = -1;
}
if (order == "ascending") {
Assert.lessOrEqual(result, 0, "Should sort applications in the ascending order by type");
} else {
Assert.greaterOrEqual(result, 0, "Should sort applications in the descending order by type");
}
}
}
});