mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-11-04 02:09:05 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			134 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
	
		
			3.9 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 () {
 | 
						|
  Services.prefs.setBoolPref("toolkit.aboutProcesses.showThreads", true);
 | 
						|
 | 
						|
  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 testTwistyImageButtonSetup() {
 | 
						|
  let twistyBtn = doc.querySelector("tr.thread-summary .twisty");
 | 
						|
  let groupRow = twistyBtn.parentNode.parentNode;
 | 
						|
  let groupRowId = groupRow.firstChild.children[1].getAttribute("id");
 | 
						|
  let groupRowLabelId = groupRowId.split(":")[1];
 | 
						|
 | 
						|
  info("Verify twisty button is properly set up.");
 | 
						|
  Assert.ok(
 | 
						|
    twistyBtn.hasAttribute("aria-labelledby"),
 | 
						|
    "the Twisty image button has an aria-labelledby"
 | 
						|
  );
 | 
						|
  Assert.equal(
 | 
						|
    twistyBtn.getAttribute("aria-labelledby"),
 | 
						|
    `${groupRowLabelId}-label ${groupRowId}`,
 | 
						|
    "the Twisty image button's aria-labelledby refers to a valid 'id' that is the Name of its row"
 | 
						|
  );
 | 
						|
  Assert.equal(
 | 
						|
    twistyBtn.getAttribute("role"),
 | 
						|
    "button",
 | 
						|
    "the Twisty image is programmatically a button"
 | 
						|
  );
 | 
						|
  Assert.equal(
 | 
						|
    twistyBtn.getAttribute("tabindex"),
 | 
						|
    "0",
 | 
						|
    "the Twisty image button is included in the focus order"
 | 
						|
  );
 | 
						|
  Assert.equal(
 | 
						|
    twistyBtn.getAttribute("aria-expanded"),
 | 
						|
    "false",
 | 
						|
    "the Twisty image button is collapsed by default"
 | 
						|
  );
 | 
						|
});
 | 
						|
 | 
						|
add_task(function testTwistyImageButtonClicking() {
 | 
						|
  let twistyBtn = doc.querySelector("tr.thread-summary .twisty");
 | 
						|
  let groupRow = twistyBtn.parentNode.parentNode;
 | 
						|
 | 
						|
  info(
 | 
						|
    "Verify we can toggle/open a list of threads by clicking the twisty button."
 | 
						|
  );
 | 
						|
  twistyBtn.click();
 | 
						|
 | 
						|
  Assert.ok(
 | 
						|
    groupRow.nextSibling.classList.contains("thread") &&
 | 
						|
      !groupRow.nextSibling.classList.contains("thread-summary"),
 | 
						|
    "clicking a collapsed Twisty adds subitems after the row"
 | 
						|
  );
 | 
						|
  Assert.equal(
 | 
						|
    twistyBtn.getAttribute("aria-expanded"),
 | 
						|
    "true",
 | 
						|
    "the Twisty image button is expanded after a click"
 | 
						|
  );
 | 
						|
});
 | 
						|
 | 
						|
add_task(function testTwistyImageButtonKeypressing() {
 | 
						|
  let twistyBtn = doc.querySelector("tr.thread-summary .twisty");
 | 
						|
  let groupRow = twistyBtn.parentNode.parentNode;
 | 
						|
 | 
						|
  info(
 | 
						|
    `Verify we can toggle/close a list of threads by pressing Enter or
 | 
						|
    Space on the twisty button.`
 | 
						|
  );
 | 
						|
  // Verify the twisty button can be focused with a keyboard.
 | 
						|
  twistyBtn.focus();
 | 
						|
  Assert.equal(
 | 
						|
    twistyBtn,
 | 
						|
    doc.activeElement,
 | 
						|
    "the Twisty image button can be focused"
 | 
						|
  );
 | 
						|
 | 
						|
  // Verify we can toggle subitems with a keyboard.
 | 
						|
  // Twisty is expanded
 | 
						|
  EventUtils.synthesizeKey("KEY_Enter");
 | 
						|
  Assert.ok(
 | 
						|
    !groupRow.nextSibling.classList.contains("thread") ||
 | 
						|
      groupRow.nextSibling.classList.contains("thread-summary"),
 | 
						|
    "pressing Enter on expanded Twisty hides a list of threads after the row"
 | 
						|
  );
 | 
						|
  Assert.equal(
 | 
						|
    twistyBtn.getAttribute("aria-expanded"),
 | 
						|
    "false",
 | 
						|
    "the Twisty image button is collapsed after an Enter keypress"
 | 
						|
  );
 | 
						|
  // Twisty is collapsed
 | 
						|
  EventUtils.synthesizeKey(" ");
 | 
						|
  Assert.ok(
 | 
						|
    groupRow.nextSibling.classList.contains("thread") &&
 | 
						|
      !groupRow.nextSibling.classList.contains("thread-summary"),
 | 
						|
    "pressing Space on collapsed Twisty shows a list of threads after the row"
 | 
						|
  );
 | 
						|
  Assert.equal(
 | 
						|
    twistyBtn.getAttribute("aria-expanded"),
 | 
						|
    "true",
 | 
						|
    "the Twisty image button is expanded after a Space keypress"
 | 
						|
  );
 | 
						|
});
 | 
						|
 | 
						|
add_task(function cleanup() {
 | 
						|
  BrowserTestUtils.removeTab(tabAboutProcesses);
 | 
						|
  Services.prefs.clearUserPref("toolkit.aboutProcesses.showThreads");
 | 
						|
});
 |