Including the sortable table headers into the keyboard focus order, providing them with a role and full functionality of a button, as well as ensuring they are communicating their possibility of being sorted and update this sortable state accordingly. Differential Revision: https://phabricator.services.mozilla.com/D239686
254 lines
6.2 KiB
JavaScript
254 lines
6.2 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
let doc, tbody, tabAboutProcesses;
|
|
|
|
const rowTypes = ["process", "window", "thread-summary", "thread"];
|
|
|
|
function promiseUpdate() {
|
|
return promiseAboutProcessesUpdated({
|
|
doc,
|
|
tbody,
|
|
force: true,
|
|
tabAboutProcesses,
|
|
});
|
|
}
|
|
|
|
add_setup(async function () {
|
|
info("Setting up about:processes");
|
|
tabAboutProcesses = await BrowserTestUtils.openNewForegroundTab({
|
|
gBrowser,
|
|
opening: "about:processes",
|
|
waitForLoad: true,
|
|
});
|
|
|
|
doc = tabAboutProcesses.linkedBrowser.contentDocument;
|
|
tbody = doc.getElementById("process-tbody");
|
|
await promiseUpdate();
|
|
});
|
|
|
|
add_task(function testTableHeadersMarkup() {
|
|
let sortingToggles = doc.querySelectorAll(".clickable");
|
|
|
|
info("Verify table headers are properly marked up.");
|
|
|
|
sortingToggles.forEach(btn => {
|
|
Assert.equal(
|
|
btn.tagName,
|
|
"BUTTON",
|
|
"Sortable table headers are marked up as buttons"
|
|
);
|
|
Assert.ok(
|
|
btn.hasAttribute("aria-sort"),
|
|
"All sortable table headers have an aria-sort"
|
|
);
|
|
Assert.equal(
|
|
btn.getAttribute("aria-sort"),
|
|
"none",
|
|
"Sortable table headers are not sorted by default"
|
|
);
|
|
Assert.ok(
|
|
doc.l10n.getAttributes(btn).id,
|
|
"Sortable table headers have a localization ID set up"
|
|
);
|
|
});
|
|
});
|
|
|
|
add_task(function testTableHeadersClicking() {
|
|
let sortingName = doc.getElementById("column-name");
|
|
let sortingMemory = doc.getElementById("column-memory-resident");
|
|
let sortingCpu = doc.getElementById("column-cpu-total");
|
|
|
|
info("Verify we can toggle table sorting by clicking table header buttons.");
|
|
|
|
sortingName.click();
|
|
|
|
Assert.equal(
|
|
sortingName.getAttribute("aria-sort"),
|
|
"descending",
|
|
"Clicked sortable table header is now sorted in descending order"
|
|
);
|
|
Assert.equal(
|
|
sortingMemory.getAttribute("aria-sort"),
|
|
"none",
|
|
"Other sortable table headers are not sorted (1)"
|
|
);
|
|
Assert.equal(
|
|
sortingCpu.getAttribute("aria-sort"),
|
|
"none",
|
|
"Other sortable table headers are not sorted (2)"
|
|
);
|
|
|
|
sortingName.click();
|
|
|
|
Assert.equal(
|
|
sortingName.getAttribute("aria-sort"),
|
|
"ascending",
|
|
"Clicked sortable table header is now sorted in ascending order"
|
|
);
|
|
Assert.equal(
|
|
sortingMemory.getAttribute("aria-sort"),
|
|
"none",
|
|
"Other sortable table headers are not sorted (1)"
|
|
);
|
|
Assert.equal(
|
|
sortingCpu.getAttribute("aria-sort"),
|
|
"none",
|
|
"Other sortable table headers are not sorted (2)"
|
|
);
|
|
|
|
sortingMemory.click();
|
|
|
|
Assert.equal(
|
|
sortingMemory.getAttribute("aria-sort"),
|
|
"descending",
|
|
"Clicked sortable table header is now sorted in descending order"
|
|
);
|
|
Assert.equal(
|
|
sortingName.getAttribute("aria-sort"),
|
|
"none",
|
|
"Other sortable table headers are not sorted (1)"
|
|
);
|
|
Assert.equal(
|
|
sortingCpu.getAttribute("aria-sort"),
|
|
"none",
|
|
"Other sortable table headers are not sorted (2)"
|
|
);
|
|
|
|
sortingCpu.click();
|
|
|
|
Assert.equal(
|
|
sortingCpu.getAttribute("aria-sort"),
|
|
"descending",
|
|
"Clicked sortable table header is now sorted in descending order"
|
|
);
|
|
Assert.equal(
|
|
sortingName.getAttribute("aria-sort"),
|
|
"none",
|
|
"Other sortable table headers are not sorted (1)"
|
|
);
|
|
Assert.equal(
|
|
sortingMemory.getAttribute("aria-sort"),
|
|
"none",
|
|
"Other sortable table headers are not sorted (2)"
|
|
);
|
|
});
|
|
|
|
add_task(function testTableHeadersKeypressing() {
|
|
let sortingName = doc.getElementById("column-name");
|
|
let sortingMemory = doc.getElementById("column-memory-resident");
|
|
let sortingCpu = doc.getElementById("column-cpu-total");
|
|
|
|
info(
|
|
"Verify we can toggle table sorting by pressing Enter or Space on table header buttons."
|
|
);
|
|
|
|
sortingName.focus();
|
|
|
|
Assert.equal(
|
|
sortingName,
|
|
doc.activeElement,
|
|
"Sortable table header can be focused (1)"
|
|
);
|
|
|
|
// Test Enter key on the Name column:
|
|
EventUtils.synthesizeKey("KEY_Enter");
|
|
|
|
Assert.equal(
|
|
sortingName.getAttribute("aria-sort"),
|
|
"descending",
|
|
"Pressing Enter on a sortable table header is sorting its column"
|
|
);
|
|
Assert.equal(
|
|
sortingMemory.getAttribute("aria-sort"),
|
|
"none",
|
|
"Other sortable table headers are not sorted (1)"
|
|
);
|
|
Assert.equal(
|
|
sortingCpu.getAttribute("aria-sort"),
|
|
"none",
|
|
"Other sortable table headers are not sorted (2)"
|
|
);
|
|
|
|
// Test Space key on the Name column:
|
|
EventUtils.synthesizeKey(" ");
|
|
|
|
Assert.equal(
|
|
sortingName.getAttribute("aria-sort"),
|
|
"ascending",
|
|
"Pressing Space on a sortable table header is sorting its column"
|
|
);
|
|
Assert.equal(
|
|
sortingMemory.getAttribute("aria-sort"),
|
|
"none",
|
|
"Other sortable table headers are not sorted (1)"
|
|
);
|
|
Assert.equal(
|
|
sortingCpu.getAttribute("aria-sort"),
|
|
"none",
|
|
"Other sortable table headers are not sorted (2)"
|
|
);
|
|
|
|
EventUtils.synthesizeKey("KEY_Tab");
|
|
|
|
Assert.equal(
|
|
sortingMemory,
|
|
doc.activeElement,
|
|
"Sortable table header can be focused (2)"
|
|
);
|
|
|
|
// Test Enter key on the Memory column:
|
|
EventUtils.synthesizeKey("KEY_Enter");
|
|
|
|
Assert.equal(
|
|
sortingMemory.getAttribute("aria-sort"),
|
|
"descending",
|
|
"Pressing Enter on a sortable table header is sorting its column"
|
|
);
|
|
Assert.equal(
|
|
sortingName.getAttribute("aria-sort"),
|
|
"none",
|
|
"Other sortable table headers are not sorted (1)"
|
|
);
|
|
Assert.equal(
|
|
sortingCpu.getAttribute("aria-sort"),
|
|
"none",
|
|
"Other sortable table headers are not sorted (2)"
|
|
);
|
|
|
|
EventUtils.synthesizeKey("KEY_Tab");
|
|
|
|
Assert.equal(
|
|
sortingCpu,
|
|
doc.activeElement,
|
|
"Sortable table header can be focused (3)"
|
|
);
|
|
|
|
// Test Space key on the CPU column:
|
|
EventUtils.synthesizeKey(" ");
|
|
|
|
Assert.equal(
|
|
sortingCpu.getAttribute("aria-sort"),
|
|
"descending",
|
|
"Pressing Enter on a sortable table header is sorting its column"
|
|
);
|
|
Assert.equal(
|
|
sortingName.getAttribute("aria-sort"),
|
|
"none",
|
|
"Other sortable table headers are not sorted (1)"
|
|
);
|
|
Assert.equal(
|
|
sortingMemory.getAttribute("aria-sort"),
|
|
"none",
|
|
"Other sortable table headers are not sorted (2)"
|
|
);
|
|
});
|
|
|
|
registerCleanupFunction(function () {
|
|
doc = null;
|
|
tbody = null;
|
|
BrowserTestUtils.removeTab(tabAboutProcesses);
|
|
});
|