tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

browser_accessibility_node_audit.js (3168B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 "use strict";
      6 
      7 /**
      8 * Checks functionality around audit for the AccessibleActor. This includes
      9 * tests for the return value when calling the audit method, payload of the
     10 * corresponding event as well as the AccesibleFront state being up to date.
     11 */
     12 
     13 const {
     14  accessibility: { AUDIT_TYPE, SCORES },
     15 } = require("resource://devtools/shared/constants.js");
     16 const EMPTY_AUDIT = Object.keys(AUDIT_TYPE).reduce((audit, key) => {
     17  audit[key] = null;
     18  return audit;
     19 }, {});
     20 
     21 const EXPECTED_CONTRAST_DATA = {
     22  value: 21,
     23  color: [0, 0, 0, 1],
     24  backgroundColor: [255, 255, 255, 1],
     25  isLargeText: true,
     26  score: SCORES.AAA,
     27 };
     28 
     29 const EMPTY_CONTRAST_AUDIT = {
     30  [AUDIT_TYPE.CONTRAST]: null,
     31 };
     32 
     33 const CONTRAST_AUDIT = {
     34  [AUDIT_TYPE.CONTRAST]: EXPECTED_CONTRAST_DATA,
     35 };
     36 
     37 const FULL_AUDIT = {
     38  ...EMPTY_AUDIT,
     39  [AUDIT_TYPE.CONTRAST]: EXPECTED_CONTRAST_DATA,
     40 };
     41 
     42 async function checkAudit(a11yWalker, node, expected, options) {
     43  const front = await a11yWalker.getAccessibleFor(node);
     44  const [textLeafNode] = await front.children();
     45 
     46  const onAudited = textLeafNode.once("audited");
     47  const audit = await textLeafNode.audit(options);
     48  const auditFromEvent = await onAudited;
     49 
     50  Assert.deepEqual(audit, expected.audit, "Audit results are correct.");
     51  Assert.deepEqual(textLeafNode.checks, expected.checks, "Checks are correct.");
     52  Assert.deepEqual(
     53    auditFromEvent,
     54    expected.audit,
     55    "Audit results from event are correct."
     56  );
     57 }
     58 
     59 add_task(async function () {
     60  const { target, walker, a11yWalker, parentAccessibility } =
     61    await initAccessibilityFrontsForUrl(
     62      MAIN_DOMAIN + "doc_accessibility_infobar.html"
     63    );
     64 
     65  const headerNode = await walker.querySelector(walker.rootNode, "#h1");
     66  await checkAudit(
     67    a11yWalker,
     68    headerNode,
     69    { audit: CONTRAST_AUDIT, checks: CONTRAST_AUDIT },
     70    { types: [AUDIT_TYPE.CONTRAST] }
     71  );
     72  await checkAudit(a11yWalker, headerNode, {
     73    audit: FULL_AUDIT,
     74    checks: FULL_AUDIT,
     75  });
     76  await checkAudit(
     77    a11yWalker,
     78    headerNode,
     79    { audit: CONTRAST_AUDIT, checks: FULL_AUDIT },
     80    { types: [AUDIT_TYPE.CONTRAST] }
     81  );
     82  await checkAudit(
     83    a11yWalker,
     84    headerNode,
     85    { audit: FULL_AUDIT, checks: FULL_AUDIT },
     86    { types: [] }
     87  );
     88 
     89  const paragraphNode = await walker.querySelector(walker.rootNode, "#p");
     90  await checkAudit(
     91    a11yWalker,
     92    paragraphNode,
     93    { audit: EMPTY_CONTRAST_AUDIT, checks: EMPTY_CONTRAST_AUDIT },
     94    { types: [AUDIT_TYPE.CONTRAST] }
     95  );
     96  await checkAudit(a11yWalker, paragraphNode, {
     97    audit: EMPTY_AUDIT,
     98    checks: EMPTY_AUDIT,
     99  });
    100  await checkAudit(
    101    a11yWalker,
    102    paragraphNode,
    103    { audit: EMPTY_CONTRAST_AUDIT, checks: EMPTY_AUDIT },
    104    { types: [AUDIT_TYPE.CONTRAST] }
    105  );
    106  await checkAudit(
    107    a11yWalker,
    108    paragraphNode,
    109    { audit: EMPTY_AUDIT, checks: EMPTY_AUDIT },
    110    { types: [] }
    111  );
    112 
    113  await waitForA11yShutdown(parentAccessibility);
    114  await target.destroy();
    115  gBrowser.removeCurrentTab();
    116 });