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 });