Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/accessible/tests/browser/text/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 13 kB image not shown  

Quelle  browser_textleafpoint.js   Sprache: JAVA

 
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */


"use strict";

/* import-globals-from ../../mochitest/text.js */

addAccessibleTask(
  `
  <p id="p" style="white-space: pre-line;">A bug
h<a href="#">id i</a>n
the <strong>big</strong> rug.</p>
`,
  function (browser, docAcc) {
    const container = findAccessibleChildByID(docAcc, "p");
    const firstPoint = createTextLeafPoint(container, 0);
    const lastPoint = createTextLeafPoint(container, kTextEndOffset);

    let charSequence = [
      ...textBoundaryGenerator(firstPoint, BOUNDARY_CHAR, DIRECTION_NEXT),
    ];

    testPointEqual(
      firstPoint,
      charSequence[0],
      "Point constructed via container and offset 0 is first character point."
    );
    testPointEqual(
      lastPoint,
      charSequence[charSequence.length - 1],
      "Point constructed via container and kTextEndOffset is last character point."
    );

    const expectedCharSequence = [
      ["A bug\nh", 0],
      ["A bug\nh", 1],
      ["A bug\nh", 2],
      ["A bug\nh", 3],
      ["A bug\nh", 4],
      ["A bug\nh", 5],
      ["A bug\nh", 6],
      ["id i", 0],
      ["id i", 1],
      ["id i", 2],
      ["id i", 3],
      ["n\nthe ", 0],
      ["n\nthe ", 1],
      ["n\nthe ", 2],
      ["n\nthe ", 3],
      ["n\nthe ", 4],
      ["n\nthe ", 5],
      ["big", 0],
      ["big", 1],
      ["big", 2],
      [" rug.", 0],
      [" rug.", 1],
      [" rug.", 2],
      [" rug.", 3],
      [" rug.", 4],
      [" rug.", 5],
    ];

    testBoundarySequence(
      firstPoint,
      BOUNDARY_CHAR,
      DIRECTION_NEXT,
      expectedCharSequence,
      "Forward BOUNDARY_CHAR sequence is correct"
    );

    testBoundarySequence(
      lastPoint,
      BOUNDARY_CHAR,
      DIRECTION_PREVIOUS,
      [...expectedCharSequence].reverse(),
      "Backward BOUNDARY_CHAR sequence is correct"
    );

    const expectedWordStartSequence = [
      ["A bug\nh", 0],
      ["A bug\nh", 2],
      ["A bug\nh", 6],
      ["id i", 3],
      ["n\nthe ", 2],
      ["big", 0],
      [" rug.", 1],
    ];
    testBoundarySequence(
      firstPoint,
      BOUNDARY_WORD_START,
      DIRECTION_NEXT,
      // Add last point in doc
      [...expectedWordStartSequence, readablePoint(lastPoint)],
      "Forward BOUNDARY_WORD_START sequence is correct"
    );

    testBoundarySequence(
      lastPoint,
      BOUNDARY_WORD_START,
      DIRECTION_PREVIOUS,
      [...expectedWordStartSequence].reverse(),
      "Backward BOUNDARY_WORD_START sequence is correct"
    );

    const expectedWordEndSequence = [
      ["A bug\nh", 1],
      ["A bug\nh", 5],
      ["id i", 2],
      ["n\nthe ", 1],
      ["n\nthe ", 5],
      [" rug.", 0],
      [" rug.", 5],
    ];
    testBoundarySequence(
      firstPoint,
      BOUNDARY_WORD_END,
      DIRECTION_NEXT,
      expectedWordEndSequence,
      "Forward BOUNDARY_WORD_END sequence is correct"
    );

    testBoundarySequence(
      lastPoint,
      BOUNDARY_WORD_END,
      DIRECTION_PREVIOUS,
      [readablePoint(firstPoint), ...expectedWordEndSequence].reverse(),
      "Backward BOUNDARY_WORD_END sequence is correct"
    );

    const expectedLineStartSequence = [
      ["A bug\nh", 0],
      ["A bug\nh", 6],
      ["n\nthe ", 2],
    ];
    testBoundarySequence(
      firstPoint,
      BOUNDARY_LINE_START,
      DIRECTION_NEXT,
      // Add last point in doc
      [...expectedLineStartSequence, readablePoint(lastPoint)],
      "Forward BOUNDARY_LINE_START sequence is correct"
    );

    testBoundarySequence(
      lastPoint,
      BOUNDARY_LINE_START,
      DIRECTION_PREVIOUS,
      [...expectedLineStartSequence].reverse(),
      "Backward BOUNDARY_LINE_START sequence is correct"
    );

    const expectedLineEndSequence = [
      ["A bug\nh", 5],
      ["n\nthe ", 1],
    ];
    testBoundarySequence(
      firstPoint,
      BOUNDARY_LINE_END,
      DIRECTION_NEXT,
      // Add last point in doc
      [...expectedLineEndSequence, readablePoint(lastPoint)],
      "Forward BOUNDARY_LINE_END sequence is correct",
      { todo: true }
    );

    testBoundarySequence(
      lastPoint,
      BOUNDARY_LINE_END,
      DIRECTION_PREVIOUS,
      [readablePoint(firstPoint), ...expectedLineEndSequence].reverse(),
      "Backward BOUNDARY_LINE_END sequence is correct"
    );
  },
  { chrome: true, topLevel: true, iframe: false, remoteIframe: false }
);

addAccessibleTask(
  `<p id="p">
    Rob ca<input id="i1" value="n m">op up.
  </p>`,
  function (browser, docAcc) {
    const container = findAccessibleChildByID(docAcc, "p");
    const firstPoint = createTextLeafPoint(container, 0);
    const lastPoint = createTextLeafPoint(container, kTextEndOffset);

    testBoundarySequence(
      firstPoint,
      BOUNDARY_CHAR,
      DIRECTION_NEXT,
      [
        ["Rob ca", 0],
        ["Rob ca", 1],
        ["Rob ca", 2],
        ["Rob ca", 3],
        ["Rob ca", 4],
        ["Rob ca", 5],
        ["n m", 0],
        ["n m", 1],
        ["n m", 2],
        ["n m", 3],
      ],
      "Forward BOUNDARY_CHAR sequence when stopping in editable is correct",
      { flags: BOUNDARY_FLAG_STOP_IN_EDITABLE }
    );

    testBoundarySequence(
      lastPoint,
      BOUNDARY_CHAR,
      DIRECTION_PREVIOUS,
      [
        ["op up. ", 7],
        ["op up. ", 6],
        ["op up. ", 5],
        ["op up. ", 4],
        ["op up. ", 3],
        ["op up. ", 2],
        ["op up. ", 1],
        ["op up. ", 0],
        ["n m", 2],
        ["n m", 1],
        ["n m", 0],
      ],
      "Backward BOUNDARY_CHAR sequence when stopping in editable is correct",
      { flags: BOUNDARY_FLAG_STOP_IN_EDITABLE }
    );

    testBoundarySequence(
      firstPoint,
      BOUNDARY_WORD_START,
      DIRECTION_NEXT,
      [
        ["Rob ca", 0],
        ["Rob ca", 4],
        ["n m", 2],
      ],
      "Forward BOUNDARY_WORD_START sequence when stopping in editable is correct",
      {
        flags: BOUNDARY_FLAG_STOP_IN_EDITABLE,
        todo: true//  Shouldn't consider end of input a word start
      }
    );
  },
  { chrome: true, topLevel: true, iframe: false, remoteIframe: false }
);

addAccessibleTask(
  `
  <p id="p" style="white-space: pre-line;">A bug
on a <span style="display: block;">rug</span></p>
  <p id="p2">
    Numbers:
  </p>
  <ul>
    <li>One</li>
    <li>Two</li>
    <li>Three</li>
  </ul>`,
  function (browser, docAcc) {
    const firstPoint = createTextLeafPoint(docAcc, 0);
    const lastPoint = createTextLeafPoint(docAcc, kTextEndOffset);

    const expectedParagraphStart = [
      ["A bug\non a ", 0],
      ["A bug\non a ", 6],
      ["rug", 0],
      ["Numbers: ", 0],
      ["• ", 0],
      ["• ", 0],
      ["• ", 0],
    ];
    testBoundarySequence(
      firstPoint,
      BOUNDARY_PARAGRAPH,
      DIRECTION_NEXT,
      [...expectedParagraphStart, readablePoint(lastPoint)],
      "Forward BOUNDARY_PARAGRAPH sequence is correct"
    );

    const paragraphStart = createTextLeafPoint(
      findAccessibleChildByID(docAcc, "p2").firstChild,
      0
    );
    const wordEnd = paragraphStart.findBoundary(
      BOUNDARY_WORD_END,
      DIRECTION_NEXT,
      BOUNDARY_FLAG_INCLUDE_ORIGIN
    );
    testPointEqual(
      wordEnd,
      paragraphStart,
      "The word end from the previous block is the first point in this block"
    );
  },
  { chrome: true, topLevel: true, iframe: false, remoteIframe: false }
);

// Test for skipping list item bullets.
addAccessibleTask(
  `<ul>
    <li>One</li>
    <li>Two</li>
    <li style="white-space: pre-line;">Three
Four</li>
  </ul>`,
  function (browser, docAcc) {
    const firstPoint = createTextLeafPoint(docAcc, 0);
    const lastPoint = createTextLeafPoint(docAcc, kTextEndOffset);

    const firstNonMarkerPoint = firstPoint.findBoundary(
      BOUNDARY_CHAR,
      DIRECTION_NEXT,
      BOUNDARY_FLAG_SKIP_LIST_ITEM_MARKER | BOUNDARY_FLAG_INCLUDE_ORIGIN
    );
    Assert.deepEqual(
      readablePoint(firstNonMarkerPoint),
      ["One", 0],
      "First non-marker point is correct"
    );

    const expectedParagraphStart = [
      ["One", 0],
      ["Two", 0],
      ["Three\nFour", 0],
      ["Three\nFour", 6],
    ];

    testBoundarySequence(
      firstPoint,
      BOUNDARY_PARAGRAPH,
      DIRECTION_NEXT,
      [...expectedParagraphStart, readablePoint(lastPoint)],
      "Forward BOUNDARY_PARAGRAPH skipping list item markers sequence is correct",
      { flags: BOUNDARY_FLAG_SKIP_LIST_ITEM_MARKER }
    );

    testBoundarySequence(
      lastPoint,
      BOUNDARY_PARAGRAPH,
      DIRECTION_PREVIOUS,
      [...expectedParagraphStart].reverse(),
      "Backward BOUNDARY_PARAGRAPH skipping list item markers sequence is correct",
      { flags: BOUNDARY_FLAG_SKIP_LIST_ITEM_MARKER }
    );

    const expectedCharSequence = [
      ["One", 0],
      ["One", 1],
      ["One", 2],
      ["Two", 0],
      ["Two", 1],
      ["Two", 2],
      ["Three\nFour", 0],
      ["Three\nFour", 1],
      ["Three\nFour", 2],
      ["Three\nFour", 3],
      ["Three\nFour", 4],
      ["Three\nFour", 5],
      ["Three\nFour", 6],
      ["Three\nFour", 7],
      ["Three\nFour", 8],
      ["Three\nFour", 9],
      ["Three\nFour", 10],
    ];
    testBoundarySequence(
      firstPoint,
      BOUNDARY_CHAR,
      DIRECTION_NEXT,
      expectedCharSequence,
      "Forward BOUNDARY_CHAR skipping list item markers sequence is correct",
      { flags: BOUNDARY_FLAG_SKIP_LIST_ITEM_MARKER }
    );

    testBoundarySequence(
      lastPoint,
      BOUNDARY_CHAR,
      DIRECTION_PREVIOUS,
      [...expectedCharSequence].reverse(),
      "Backward BOUNDARY_CHAR skipping list item markers sequence is correct",
      { flags: BOUNDARY_FLAG_SKIP_LIST_ITEM_MARKER }
    );

    const expectedWordStartSequence = [
      ["One", 0],
      ["Two", 0],
      ["Three\nFour", 0],
      ["Three\nFour", 6],
    ];
    testBoundarySequence(
      firstPoint,
      BOUNDARY_WORD_START,
      DIRECTION_NEXT,
      [...expectedWordStartSequence, readablePoint(lastPoint)],
      "Forward BOUNDARY_WORD_START skipping list item markers sequence is correct",
      { flags: BOUNDARY_FLAG_SKIP_LIST_ITEM_MARKER }
    );

    testBoundarySequence(
      lastPoint,
      BOUNDARY_WORD_START,
      DIRECTION_PREVIOUS,
      [...expectedWordStartSequence].reverse(),
      "Backward BOUNDARY_WORD_START skipping list item markers sequence is correct",
      { flags: BOUNDARY_FLAG_SKIP_LIST_ITEM_MARKER }
    );

    const expectedWordEndSequence = [
      ["Two", 0],
      ["Three\nFour", 0],
      ["Three\nFour", 5],
      ["Three\nFour", 10],
    ];
    testBoundarySequence(
      firstPoint,
      BOUNDARY_WORD_END,
      DIRECTION_NEXT,
      expectedWordEndSequence,
      "Forward BOUNDARY_WORD_END skipping list item markers sequence is correct",
      { flags: BOUNDARY_FLAG_SKIP_LIST_ITEM_MARKER }
    );

    testBoundarySequence(
      lastPoint,
      BOUNDARY_WORD_END,
      DIRECTION_PREVIOUS,
      [
        readablePoint(firstNonMarkerPoint),
        ...expectedWordEndSequence,
      ].reverse(),
      "Backward BOUNDARY_WORD_END skipping list item markers sequence is correct",
      { flags: BOUNDARY_FLAG_SKIP_LIST_ITEM_MARKER }
    );

    const expectedLineStartSequence = [
      ["One", 0],
      ["Two", 0],
      ["Three\nFour", 0],
      ["Three\nFour", 6],
    ];
    testBoundarySequence(
      firstPoint,
      BOUNDARY_LINE_START,
      DIRECTION_NEXT,
      // Add last point in doc
      [...expectedLineStartSequence, readablePoint(lastPoint)],
      "Forward BOUNDARY_LINE_START skipping list item markers sequence is correct",
      { flags: BOUNDARY_FLAG_SKIP_LIST_ITEM_MARKER }
    );

    testBoundarySequence(
      lastPoint,
      BOUNDARY_LINE_START,
      DIRECTION_PREVIOUS,
      // Add last point in doc
      [...expectedLineStartSequence].reverse(),
      "Backward BOUNDARY_LINE_START skipping list item markers sequence is correct",
      { flags: BOUNDARY_FLAG_SKIP_LIST_ITEM_MARKER }
    );
  },
  { chrome: true, topLevel: true, iframe: false, remoteIframe: false }
);

/**
 * Test the paragraph boundary on tables.
 */

addAccessibleTask(
  `
<table id="table">
  <tr><th>a</th><td>b</td></tr>
  <tr><td>c</td><td>d</td></tr>
</table>
  `,
  async function (browser, docAcc) {
    const firstPoint = createTextLeafPoint(docAcc, 0);
    const lastPoint = createTextLeafPoint(docAcc, kTextEndOffset);
    testBoundarySequence(
      firstPoint,
      BOUNDARY_PARAGRAPH,
      DIRECTION_NEXT,
      [["a", 0], ["b", 0], ["c", 0], ["d", 0], readablePoint(lastPoint)],
      "Forward BOUNDARY_PARAGRAPH sequence is correct"
    );
  },
  { chrome: true, topLevel: true, iframe: false, remoteIframe: false }
);

/*
 * Test the word boundary with punctuation character
 */

addAccessibleTask(
  `
<p>ab'cd


  `,
  async function (browser, docAcc) {
    const firstPoint = createTextLeafPoint(docAcc, 0);
    const lastPoint = createTextLeafPoint(docAcc, kTextEndOffset);

    const expectedWordStartSequence = [
      ["ab'cd", 0],
      ["ab'cd", 3],
      ["ab'cd", 5],
    ];
    testBoundarySequence(
      firstPoint,
      BOUNDARY_WORD_START,
      DIRECTION_NEXT,
      expectedWordStartSequence,
      "Forward BOUNDARY_WORD_START sequence is correct"
    );
    const expectedWordEndSequence = [
      ["ab'cd", 5],
      ["ab'cd", 3],
      ["ab'cd", 0],
    ];
    testBoundarySequence(
      lastPoint,
      BOUNDARY_WORD_END,
      DIRECTION_PREVIOUS,
      expectedWordEndSequence,
      "Backward BOUNDARY_WORD_END sequence is correct"
    );
  },
  { chrome: true, topLevel: true, iframe: false, remoteIframe: false }
);

Messung V0.5
C=98 H=100 G=98

¤ Dauer der Verarbeitung: 0.20 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.