mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-11-04 10:18:41 +02:00 
			
		
		
		
	We intentionally turn off a11y checks for the included series of clicks (in these two test files affected) are either performing an activation of the edit mode for prefs or selecting a text in focused inputs. The edit mode can be activated with a separate "Edit" or "Toggle" button provided for each pref, and the text selection can be performed with caret browsing (when supported). Thus, this rule check can be ignored by a11y_checks suite for the two affected test files. Differential Revision: https://phabricator.services.mozilla.com/D202870
		
			
				
	
	
		
			158 lines
		
	
	
	
		
			5.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			158 lines
		
	
	
	
		
			5.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* Any copyright is dedicated to the Public Domain.
 | 
						|
 * http://creativecommons.org/publicdomain/zero/1.0/ */
 | 
						|
 | 
						|
add_setup(async function () {
 | 
						|
  await SpecialPowers.pushPrefEnv({
 | 
						|
    set: [
 | 
						|
      ["test.aboutconfig.copy.false", false],
 | 
						|
      ["test.aboutconfig.copy.number", 10],
 | 
						|
      ["test.aboutconfig.copy.spaces.1", " "],
 | 
						|
      ["test.aboutconfig.copy.spaces.2", "  "],
 | 
						|
      ["test.aboutconfig.copy.spaces.3", "   "],
 | 
						|
      ["test.aboutconfig.copy.string", "010.5"],
 | 
						|
    ],
 | 
						|
  });
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function test_copy() {
 | 
						|
  await AboutConfigTest.withNewTab(async function () {
 | 
						|
    for (let [name, expectedString] of [
 | 
						|
      [PREF_BOOLEAN_DEFAULT_TRUE, "true"],
 | 
						|
      [PREF_BOOLEAN_USERVALUE_TRUE, "true"],
 | 
						|
      [PREF_STRING_DEFAULT_EMPTY, ""],
 | 
						|
      ["test.aboutconfig.copy.false", "false"],
 | 
						|
      ["test.aboutconfig.copy.number", "10"],
 | 
						|
      ["test.aboutconfig.copy.spaces.1", " "],
 | 
						|
      ["test.aboutconfig.copy.spaces.2", "  "],
 | 
						|
      ["test.aboutconfig.copy.spaces.3", "   "],
 | 
						|
      ["test.aboutconfig.copy.string", "010.5"],
 | 
						|
    ]) {
 | 
						|
      // Limit the number of preferences shown so all the rows are visible.
 | 
						|
      this.search(name);
 | 
						|
      let row = this.getRow(name);
 | 
						|
 | 
						|
      let selectText = async target => {
 | 
						|
        let { width, height } = target.getBoundingClientRect();
 | 
						|
 | 
						|
        // We intentionally turn off this a11y check, because the following
 | 
						|
        // series of mouse events is purposefully targeting a non-interactive
 | 
						|
        // text content. This action does not require the element to have an
 | 
						|
        // interactive accessible to be done by assistive technology with caret
 | 
						|
        // browsing (when/if supported), this rule check shall be ignored by
 | 
						|
        // a11y_checks suite.
 | 
						|
        AccessibilityUtils.setEnv({ mustHaveAccessibleRule: false });
 | 
						|
        EventUtils.synthesizeMouse(
 | 
						|
          target,
 | 
						|
          1,
 | 
						|
          1,
 | 
						|
          { type: "mousedown" },
 | 
						|
          this.browser.contentWindow
 | 
						|
        );
 | 
						|
        EventUtils.synthesizeMouse(
 | 
						|
          target,
 | 
						|
          width - 1,
 | 
						|
          height - 1,
 | 
						|
          { type: "mousemove" },
 | 
						|
          this.browser.contentWindow
 | 
						|
        );
 | 
						|
        EventUtils.synthesizeMouse(
 | 
						|
          target,
 | 
						|
          width - 1,
 | 
						|
          height - 1,
 | 
						|
          { type: "mouseup" },
 | 
						|
          this.browser.contentWindow
 | 
						|
        );
 | 
						|
        AccessibilityUtils.resetEnv();
 | 
						|
      };
 | 
						|
 | 
						|
      // Drag across the name cell.
 | 
						|
      await selectText(row.nameCell);
 | 
						|
      Assert.ok(row.nameCell.contains(this.window.getSelection().anchorNode));
 | 
						|
      await SimpleTest.promiseClipboardChange(name, async () => {
 | 
						|
        await BrowserTestUtils.synthesizeKey(
 | 
						|
          "c",
 | 
						|
          { accelKey: true },
 | 
						|
          this.browser
 | 
						|
        );
 | 
						|
      });
 | 
						|
 | 
						|
      // Drag across the value cell.
 | 
						|
      await selectText(row.valueCell);
 | 
						|
      let selection = this.window.getSelection();
 | 
						|
      Assert.ok(row.valueCell.contains(selection.anchorNode));
 | 
						|
 | 
						|
      if (expectedString !== "") {
 | 
						|
        // Non-empty values should have a selection.
 | 
						|
        Assert.ok(!selection.isCollapsed);
 | 
						|
        await SimpleTest.promiseClipboardChange(expectedString, async () => {
 | 
						|
          await BrowserTestUtils.synthesizeKey(
 | 
						|
            "c",
 | 
						|
            { accelKey: true },
 | 
						|
            this.browser
 | 
						|
          );
 | 
						|
        });
 | 
						|
      } else {
 | 
						|
        // Nothing is selected for an empty value.
 | 
						|
        Assert.equal(selection.toString(), "");
 | 
						|
      }
 | 
						|
    }
 | 
						|
  });
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function test_copy_multiple() {
 | 
						|
  await AboutConfigTest.withNewTab(async function () {
 | 
						|
    // Lines are separated by a single LF character on all platforms.
 | 
						|
    let expectedString =
 | 
						|
      "test.aboutconfig.copy.false\tfalse\t\n" +
 | 
						|
      "test.aboutconfig.copy.number\t10\t\n" +
 | 
						|
      "test.aboutconfig.copy.spaces.1\t \t\n" +
 | 
						|
      "test.aboutconfig.copy.spaces.2\t  \t\n" +
 | 
						|
      "test.aboutconfig.copy.spaces.3\t   \t\n" +
 | 
						|
      "test.aboutconfig.copy.string\t010.5";
 | 
						|
 | 
						|
    this.search("test.aboutconfig.copy.");
 | 
						|
    let startRow = this.getRow("test.aboutconfig.copy.false");
 | 
						|
    let endRow = this.getRow("test.aboutconfig.copy.string");
 | 
						|
    let { width, height } = endRow.valueCell.getBoundingClientRect();
 | 
						|
 | 
						|
    // Drag from the top left of the first row to the bottom right of the last.
 | 
						|
    // We intentionally turn off this a11y check, because the following
 | 
						|
    // series of mouse events is purposefully targeting a non-interactive
 | 
						|
    // text content. This action does not require the element to have an
 | 
						|
    // interactive accessible to be done by assistive technology with caret
 | 
						|
    // browsing (when/if supported), this rule check shall be ignored by
 | 
						|
    // a11y_checks suite.
 | 
						|
    AccessibilityUtils.setEnv({ mustHaveAccessibleRule: false });
 | 
						|
    EventUtils.synthesizeMouse(
 | 
						|
      startRow.nameCell,
 | 
						|
      1,
 | 
						|
      1,
 | 
						|
      { type: "mousedown" },
 | 
						|
      this.browser.contentWindow
 | 
						|
    );
 | 
						|
 | 
						|
    EventUtils.synthesizeMouse(
 | 
						|
      endRow.valueCell,
 | 
						|
      width - 1,
 | 
						|
      height - 1,
 | 
						|
      { type: "mousemove" },
 | 
						|
      this.browser.contentWindow
 | 
						|
    );
 | 
						|
    EventUtils.synthesizeMouse(
 | 
						|
      endRow.valueCell,
 | 
						|
      width - 1,
 | 
						|
      height - 1,
 | 
						|
      { type: "mouseup" },
 | 
						|
      this.browser.contentWindow
 | 
						|
    );
 | 
						|
    AccessibilityUtils.resetEnv();
 | 
						|
 | 
						|
    await SimpleTest.promiseClipboardChange(expectedString, async () => {
 | 
						|
      await BrowserTestUtils.synthesizeKey(
 | 
						|
        "c",
 | 
						|
        { accelKey: true },
 | 
						|
        this.browser
 | 
						|
      );
 | 
						|
    });
 | 
						|
  });
 | 
						|
});
 |