forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			124 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* Any copyright is dedicated to the Public Domain.
 | 
						|
 * http://creativecommons.org/publicdomain/zero/1.0/ */
 | 
						|
 | 
						|
"use strict";
 | 
						|
 | 
						|
var doc, tbody, tabAboutProcesses;
 | 
						|
 | 
						|
const rowTypes = ["process", "window", "thread-summary", "thread"];
 | 
						|
 | 
						|
function promiseUpdate() {
 | 
						|
  return promiseAboutProcessesUpdated({
 | 
						|
    doc,
 | 
						|
    tbody,
 | 
						|
    force: true,
 | 
						|
    tabAboutProcesses,
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
add_task(async function setup() {
 | 
						|
  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();
 | 
						|
 | 
						|
  info("Open a list of threads to have thread rows displayed");
 | 
						|
  let twisty = doc.querySelector("tr.thread-summary .twisty");
 | 
						|
  twisty.click();
 | 
						|
  await promiseUpdate();
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function testSelectionPersistedAfterUpdate() {
 | 
						|
  for (let rowType of rowTypes) {
 | 
						|
    let row = doc.querySelector(`tr.${rowType}`);
 | 
						|
    Assert.ok(!!row, `Found ${rowType} row`);
 | 
						|
    Assert.ok(!row.hasAttribute("selected"), "The row should not be selected");
 | 
						|
 | 
						|
    info("Click in the row to select it.");
 | 
						|
    row.click();
 | 
						|
    Assert.equal(
 | 
						|
      row.getAttribute("selected"),
 | 
						|
      "true",
 | 
						|
      "The row should be selected"
 | 
						|
    );
 | 
						|
    Assert.equal(
 | 
						|
      doc.querySelectorAll("[selected]").length,
 | 
						|
      1,
 | 
						|
      "There should be only one selected row"
 | 
						|
    );
 | 
						|
 | 
						|
    info("Wait for an update and ensure the selected row is still the same");
 | 
						|
    let rowId = row.rowId;
 | 
						|
    let findRowsWithId = rowId =>
 | 
						|
      [...doc.querySelectorAll("tr")].filter(r => r.rowId == rowId);
 | 
						|
    Assert.equal(
 | 
						|
      findRowsWithId(rowId).length,
 | 
						|
      1,
 | 
						|
      "There should be only one row with id " + rowId
 | 
						|
    );
 | 
						|
    await promiseUpdate();
 | 
						|
    let selectedRow = doc.querySelector("[selected]");
 | 
						|
    if (rowType == "thread" && !selectedRow) {
 | 
						|
      info("The thread row might have disappeared if the thread has ended");
 | 
						|
      Assert.equal(
 | 
						|
        findRowsWithId(rowId).length,
 | 
						|
        0,
 | 
						|
        "There should no longer be a row with id " + rowId
 | 
						|
      );
 | 
						|
      continue;
 | 
						|
    }
 | 
						|
    Assert.ok(
 | 
						|
      !!selectedRow,
 | 
						|
      "There should still be a selected row after an update"
 | 
						|
    );
 | 
						|
    Assert.equal(
 | 
						|
      selectedRow.rowId,
 | 
						|
      rowId,
 | 
						|
      "The selected row should have the same id as the row we clicked"
 | 
						|
    );
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
add_task(function testClickAgainToRemoveSelection() {
 | 
						|
  for (let rowType of rowTypes) {
 | 
						|
    let row = doc.querySelector(`tr.${rowType}`);
 | 
						|
    Assert.ok(!!row, `Found ${rowType} row`);
 | 
						|
    Assert.ok(!row.hasAttribute("selected"), "The row should not be selected");
 | 
						|
    info("Click in the row to select it.");
 | 
						|
    row.click();
 | 
						|
    Assert.equal(
 | 
						|
      row.getAttribute("selected"),
 | 
						|
      "true",
 | 
						|
      "The row should now be selected"
 | 
						|
    );
 | 
						|
    Assert.equal(
 | 
						|
      doc.querySelectorAll("[selected]").length,
 | 
						|
      1,
 | 
						|
      "There should be only one selected row"
 | 
						|
    );
 | 
						|
 | 
						|
    info("Click the row again to remove the selection.");
 | 
						|
    row.click();
 | 
						|
    Assert.ok(
 | 
						|
      !row.hasAttribute("selected"),
 | 
						|
      "The row should no longer be selected"
 | 
						|
    );
 | 
						|
    Assert.ok(
 | 
						|
      !doc.querySelector("[selected]"),
 | 
						|
      "There should be no selected row"
 | 
						|
    );
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
add_task(function cleanup() {
 | 
						|
  BrowserTestUtils.removeTab(tabAboutProcesses);
 | 
						|
  Services.prefs.clearUserPref("toolkit.aboutProcesses.showThreads");
 | 
						|
});
 |