testaro 78.0.8 → 78.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitattributes +94 -0
- package/.github/workflows/ci.yml +58 -0
- package/.github/workflows/publish.yml +49 -0
- package/.github/workflows/typescript.yml +35 -0
- package/AGENTS.md +2 -2
- package/CLAUDE.md +24 -18
- package/CONTAINERS.md +9 -6
- package/CONTRIBUTING.md +29 -3
- package/Dockerfile +1 -1
- package/README.md +73 -19
- package/UPGRADES.md +4 -0
- package/actSpecs-doc.md +13 -1
- package/actSpecs.js +29 -5
- package/call.js +6 -5
- package/docker-compose.yml +8 -2
- package/docs/checkpoint-scanning.md +199 -0
- package/docs/standard-result-outcome.md +165 -0
- package/env.example +44 -10
- package/eslint.config.mjs +101 -0
- package/netWatch.js +372 -222
- package/package.json +46 -31
- package/pour/README.md +47 -0
- package/pour/pour.min.js +8 -0
- package/procs/actDo.js +808 -0
- package/procs/catalog.d.ts +17 -0
- package/procs/catalog.js +312 -221
- package/procs/catalog.ts +398 -0
- package/procs/checkpoint.js +110 -0
- package/procs/config.d.ts +35 -0
- package/procs/config.js +62 -0
- package/procs/dateTime.js +2 -1
- package/procs/doActs.js +442 -849
- package/procs/doTestAct.js +27 -121
- package/procs/flow.js +221 -0
- package/procs/generateRuleRegistry.js +94 -0
- package/procs/getSource.d.ts +26 -0
- package/procs/job.js +115 -1
- package/procs/launch.d.ts +40 -0
- package/procs/launch.js +239 -108
- package/procs/nu.d.ts +48 -0
- package/procs/scope.js +196 -0
- package/procs/shoot.d.ts +33 -0
- package/procs/standard.d.ts +18 -0
- package/procs/standard.js +83 -0
- package/procs/standard.ts +126 -0
- package/procs/testAct.js +145 -0
- package/procs/testaro.d.ts +20 -0
- package/procs/testaro.js +236 -189
- package/procs/testaro.ts +321 -0
- package/procs/userPath.js +126 -0
- package/procs/xPath.d.ts +4 -0
- package/procs/xPath.js +81 -69
- package/procs/xPath.ts +106 -0
- package/procs/xPathScript.d.ts +6 -0
- package/procs/xPathScript.js +70 -0
- package/run.js +3 -2
- package/surea11y/README.md +44 -0
- package/surea11y/surea11y.browser.js +14 -0
- package/testaro/adbID.d.ts +3 -0
- package/testaro/adbID.js +38 -41
- package/testaro/adbID.ts +66 -0
- package/testaro/allCapStyle.d.ts +3 -0
- package/testaro/allCapStyle.js +31 -34
- package/testaro/allCapStyle.ts +55 -0
- package/testaro/allCaps.d.ts +16 -0
- package/testaro/allCaps.js +179 -151
- package/testaro/allCaps.ts +228 -0
- package/testaro/allHidden.d.ts +13 -0
- package/testaro/allHidden.js +29 -30
- package/testaro/allHidden.ts +50 -0
- package/testaro/allSlanted.d.ts +3 -0
- package/testaro/allSlanted.js +30 -33
- package/testaro/allSlanted.ts +54 -0
- package/testaro/altScheme.d.ts +3 -0
- package/testaro/altScheme.js +27 -30
- package/testaro/altScheme.ts +50 -0
- package/testaro/attVal.d.ts +3 -0
- package/testaro/attVal.js +20 -21
- package/testaro/attVal.ts +52 -0
- package/testaro/autocomplete.d.ts +3 -0
- package/testaro/autocomplete.js +59 -75
- package/testaro/autocomplete.ts +101 -0
- package/testaro/bulk.d.ts +13 -0
- package/testaro/bulk.js +32 -33
- package/testaro/bulk.ts +55 -0
- package/testaro/buttonMenu.d.ts +9 -0
- package/testaro/buttonMenu.js +317 -319
- package/testaro/buttonMenu.ts +391 -0
- package/testaro/captionLoc.d.ts +3 -0
- package/testaro/captionLoc.js +17 -20
- package/testaro/captionLoc.ts +40 -0
- package/testaro/datalistRef.d.ts +3 -0
- package/testaro/datalistRef.js +33 -36
- package/testaro/datalistRef.ts +55 -0
- package/testaro/distortion.d.ts +3 -0
- package/testaro/distortion.js +57 -26
- package/testaro/distortion.ts +81 -0
- package/testaro/docType.d.ts +15 -0
- package/testaro/docType.js +25 -25
- package/testaro/docType.ts +45 -0
- package/testaro/dupAtt.d.ts +16 -0
- package/testaro/dupAtt.js +113 -104
- package/testaro/dupAtt.ts +144 -0
- package/testaro/elements.d.ts +6 -0
- package/testaro/elements.js +153 -153
- package/testaro/elements.ts +215 -0
- package/testaro/embAc.d.ts +3 -0
- package/testaro/embAc.js +19 -20
- package/testaro/embAc.ts +40 -0
- package/testaro/focAll.d.ts +13 -0
- package/testaro/focAll.js +185 -191
- package/testaro/focAll.ts +217 -0
- package/testaro/focAndOp.d.ts +3 -0
- package/testaro/focAndOp.js +100 -104
- package/testaro/focAndOp.ts +128 -0
- package/testaro/focInd.d.ts +3 -0
- package/testaro/focInd.js +64 -66
- package/testaro/focInd.ts +96 -0
- package/testaro/focVis.d.ts +3 -0
- package/testaro/focVis.js +28 -30
- package/testaro/focVis.ts +52 -0
- package/testaro/headEl.d.ts +10 -0
- package/testaro/headEl.js +61 -62
- package/testaro/headEl.ts +82 -0
- package/testaro/headingAmb.d.ts +3 -0
- package/testaro/headingAmb.js +54 -63
- package/testaro/headingAmb.ts +72 -0
- package/testaro/hovInd.d.ts +12 -0
- package/testaro/hovInd.js +163 -130
- package/testaro/hovInd.ts +199 -0
- package/testaro/hover.d.ts +3 -0
- package/testaro/hover.js +155 -126
- package/testaro/hover.ts +154 -0
- package/testaro/hr.d.ts +3 -0
- package/testaro/hr.js +14 -17
- package/testaro/hr.ts +36 -0
- package/testaro/imageLink.d.ts +3 -0
- package/testaro/imageLink.js +17 -20
- package/testaro/imageLink.ts +42 -0
- package/testaro/labClash.d.ts +3 -0
- package/testaro/labClash.js +31 -33
- package/testaro/labClash.ts +54 -0
- package/testaro/legendLoc.d.ts +3 -0
- package/testaro/legendLoc.js +17 -20
- package/testaro/legendLoc.ts +42 -0
- package/testaro/lineHeight.d.ts +3 -0
- package/testaro/lineHeight.js +43 -48
- package/testaro/lineHeight.ts +70 -0
- package/testaro/linkAmb.d.ts +7 -0
- package/testaro/linkAmb.js +79 -80
- package/testaro/linkAmb.ts +105 -0
- package/testaro/linkExt.d.ts +3 -0
- package/testaro/linkExt.js +13 -16
- package/testaro/linkExt.ts +35 -0
- package/testaro/linkOldAtt.d.ts +3 -0
- package/testaro/linkOldAtt.js +25 -28
- package/testaro/linkOldAtt.ts +48 -0
- package/testaro/linkTo.d.ts +3 -0
- package/testaro/linkTo.js +22 -22
- package/testaro/linkTo.ts +43 -0
- package/testaro/linkUl.d.ts +3 -0
- package/testaro/linkUl.js +30 -34
- package/testaro/linkUl.ts +54 -0
- package/testaro/miniText.d.ts +3 -0
- package/testaro/miniText.js +41 -44
- package/testaro/miniText.ts +68 -0
- package/testaro/motion.d.ts +10 -0
- package/testaro/motion.js +92 -96
- package/testaro/motion.ts +125 -0
- package/testaro/nonTable.d.ts +3 -0
- package/testaro/nonTable.js +39 -45
- package/testaro/nonTable.ts +66 -0
- package/testaro/optRoleSel.d.ts +3 -0
- package/testaro/optRoleSel.js +16 -19
- package/testaro/optRoleSel.ts +41 -0
- package/testaro/phOnly.d.ts +3 -0
- package/testaro/phOnly.js +18 -21
- package/testaro/phOnly.ts +43 -0
- package/testaro/pseudoP.d.ts +3 -0
- package/testaro/pseudoP.js +36 -38
- package/testaro/pseudoP.ts +59 -0
- package/testaro/radioSet.d.ts +3 -0
- package/testaro/radioSet.js +57 -59
- package/testaro/radioSet.ts +79 -0
- package/testaro/registry.d.ts +63 -0
- package/testaro/registry.js +67 -0
- package/testaro/registry.ts +141 -0
- package/testaro/role.d.ts +3 -0
- package/testaro/role.js +27 -29
- package/testaro/role.ts +53 -0
- package/testaro/secHeading.d.ts +3 -0
- package/testaro/secHeading.js +30 -33
- package/testaro/secHeading.ts +53 -0
- package/testaro/styleDiff.d.ts +25 -0
- package/testaro/styleDiff.js +248 -252
- package/testaro/styleDiff.ts +303 -0
- package/testaro/tabNav.d.ts +33 -0
- package/testaro/tabNav.js +272 -342
- package/testaro/tabNav.ts +454 -0
- package/testaro/targetsNear.d.ts +9 -0
- package/testaro/targetsNear.js +130 -132
- package/testaro/targetsNear.ts +160 -0
- package/testaro/textNodes.d.ts +6 -0
- package/testaro/textNodes.js +139 -135
- package/testaro/textNodes.ts +185 -0
- package/testaro/textSem.d.ts +3 -0
- package/testaro/textSem.js +25 -28
- package/testaro/textSem.ts +47 -0
- package/testaro/title.d.ts +9 -0
- package/testaro/title.js +16 -13
- package/testaro/title.ts +31 -0
- package/testaro/titledEl.d.ts +3 -0
- package/testaro/titledEl.js +15 -18
- package/testaro/titledEl.ts +38 -0
- package/testaro/zIndex.d.ts +3 -0
- package/testaro/zIndex.js +19 -22
- package/testaro/zIndex.ts +42 -0
- package/tests/alfa.d.ts +45 -0
- package/tests/alfa.js +138 -141
- package/tests/alfa.ts +214 -0
- package/tests/aslint.d.ts +33 -0
- package/tests/aslint.js +272 -249
- package/tests/aslint.ts +301 -0
- package/tests/axe.d.ts +27 -0
- package/tests/axe.js +199 -200
- package/tests/axe.ts +277 -0
- package/tests/ed11y.d.ts +28 -0
- package/tests/ed11y.js +141 -99
- package/tests/ed11y.ts +178 -0
- package/tests/htmlcs.d.ts +21 -0
- package/tests/htmlcs.js +174 -140
- package/tests/htmlcs.ts +181 -0
- package/tests/ibm.d.ts +52 -0
- package/tests/ibm.js +164 -166
- package/tests/ibm.ts +251 -0
- package/tests/nuVal.d.ts +13 -0
- package/tests/nuVal.js +107 -112
- package/tests/nuVal.ts +145 -0
- package/tests/nuVnu.d.ts +15 -0
- package/tests/nuVnu.js +141 -111
- package/tests/nuVnu.ts +144 -0
- package/tests/pour.d.ts +31 -0
- package/tests/pour.js +242 -0
- package/tests/pour.ts +273 -0
- package/tests/qualWeb.d.ts +39 -0
- package/tests/qualWeb.js +302 -272
- package/tests/qualWeb.ts +415 -0
- package/tests/surea11y.d.ts +33 -0
- package/tests/surea11y.js +288 -0
- package/tests/surea11y.ts +334 -0
- package/tests/testaro.d.ts +25 -0
- package/tests/testaro.js +745 -652
- package/tests/testaro.ts +862 -0
- package/tests/wave.d.ts +46 -0
- package/tests/wave.js +166 -177
- package/tests/wave.ts +252 -0
- package/tsconfig.json +17 -0
- package/types.d.ts +243 -0
- package/types.js +10 -0
- package/types.ts +376 -0
- package/validation/act/README.md +46 -0
- package/validation/act/capture.js +424 -0
- package/validation/act/chromium-issue-draft.md +66 -0
- package/validation/act/fp-triage-2026-08-22.md +86 -0
- package/validation/act/isolation-notes.md +159 -0
- package/validation/act/playwright-issue-draft.md +73 -0
- package/validation/act/propose-mappings.js +0 -0
- package/validation/act/repro-cdp-raw.js +105 -0
- package/validation/act/repro-metarefresh.js +65 -0
- package/validation/act/score.js +184 -0
- package/validation/act/stage3a-stress-report.md +69 -0
- package/validation/act/stage3b-mapping-proposals.md +94 -0
- package/validation/act/stage3b-triage-draft.md +138 -0
- package/validation/act/surea11y-track-a-2026-09-01.md +50 -0
- package/validation/executors/netWatch.js +180 -90
- package/validation/executors/test.js +17 -2
- package/validation/executors/tests.js +118 -10
- package/validation/jobs/reports/raw/260901T1000-surea11y-validation.json +964 -0
- package/validation/jobs/todo/240101T1200-simple-example.json +14 -6
- package/validation/jobs/todo/240101T1300-shoot-example.json +2 -1
- package/validation/jobs/todo/260821T1900-pour-validation.json +45 -0
- package/validation/jobs/todo/260901T1000-surea11y-validation.json +45 -0
- package/validation/knownFailures.json +1 -0
- package/validation/tests/jobProperties/adbID.json +27 -2
- package/validation/tests/jobProperties/{focOp.json → allCapStyle.json} +56 -53
- package/validation/tests/jobProperties/allCaps.json +25 -0
- package/validation/tests/jobProperties/allHidden.json +133 -13
- package/validation/tests/jobProperties/allSlanted.json +3 -3
- package/validation/tests/jobProperties/altScheme.json +23 -8
- package/validation/tests/jobProperties/attVal.json +57 -57
- package/validation/tests/jobProperties/autocomplete.json +11 -1
- package/validation/tests/jobProperties/bulk.json +6 -1
- package/validation/tests/jobProperties/buttonMenu.json +63 -42
- package/validation/tests/jobProperties/captionLoc.json +1 -6
- package/validation/tests/jobProperties/checkpoint-browser.json +401 -0
- package/validation/tests/jobProperties/checkpoint-page.json +397 -0
- package/validation/tests/jobProperties/checkpoint.json +395 -0
- package/validation/tests/jobProperties/datalistRef.json +20 -5
- package/validation/tests/jobProperties/distortion.json +28 -3
- package/validation/tests/jobProperties/docType.json +2 -2
- package/validation/tests/jobProperties/dupAtt.json +48 -33
- package/validation/tests/jobProperties/elements.json +28 -28
- package/validation/tests/jobProperties/embAc.json +36 -31
- package/validation/tests/jobProperties/focAndOp.json +284 -0
- package/validation/tests/jobProperties/focInd.json +34 -34
- package/validation/tests/jobProperties/focVis.json +1 -1
- package/validation/tests/jobProperties/hover.json +39 -37
- package/validation/tests/jobProperties/hr.json +13 -3
- package/validation/tests/jobProperties/imageLink.json +0 -5
- package/validation/tests/jobProperties/labClash.json +68 -33
- package/validation/tests/jobProperties/legendLoc.json +1 -6
- package/validation/tests/jobProperties/lineHeight.json +2 -2
- package/validation/tests/jobProperties/linkAmb.json +13 -18
- package/validation/tests/jobProperties/linkExt.json +1 -1
- package/validation/tests/jobProperties/linkOldAtt.json +12 -2
- package/validation/tests/jobProperties/linkTo.json +1 -1
- package/validation/tests/jobProperties/linkUl.json +65 -65
- package/validation/tests/jobProperties/miniText.json +7 -2
- package/validation/tests/jobProperties/motion.json +4 -50
- package/validation/tests/jobProperties/nonTable.json +48 -3
- package/validation/tests/jobProperties/optRoleSel.json +12 -2
- package/validation/tests/jobProperties/phOnly.json +6 -16
- package/validation/tests/jobProperties/pseudoP.json +17 -2
- package/validation/tests/jobProperties/radioSet.json +30 -30
- package/validation/tests/jobProperties/role.json +25 -5
- package/validation/tests/jobProperties/secHeading.json +26 -21
- package/validation/tests/jobProperties/styleDiff.json +35 -5
- package/validation/tests/jobProperties/tabNav.json +3 -1
- package/validation/tests/jobProperties/targetsNear.json +237 -0
- package/validation/tests/jobProperties/textNodes.json +29 -29
- package/validation/tests/jobProperties/textSem.json +26 -1
- package/validation/tests/jobProperties/title.json +12 -2
- package/validation/tests/jobProperties/titledEl.json +39 -9
- package/validation/tests/jobProperties/userPath.json +317 -0
- package/validation/tests/jobProperties/zIndex.json +40 -35
- package/validation/tests/targets/allCapStyle/index.html +26 -0
- package/validation/tests/targets/checkpoint/index.html +38 -0
- package/validation/tests/targets/datalistRef/index.html +1 -1
- package/validation/tests/targets/focAndOp/bad.html +29 -0
- package/validation/tests/targets/{focOp → focAndOp}/good.html +3 -1
- package/validation/tests/targets/focInd/bad.html +2 -1
- package/validation/tests/targets/headEl/index.html +10 -1
- package/validation/tests/targets/{targetSmall → targetsNear}/index.html +15 -1
- package/validation/tests/targets/userPath/index.html +42 -0
- package/validation/validateTest.js +61 -9
- package/.claude/settings.local.json +0 -11
- package/.eslintrc.json +0 -41
- package/htmlcs/.eslintrc.json +0 -67
- package/validation/tests/jobProperties/linkTitle.json +0 -127
- package/validation/tests/jobProperties/opFoc.json +0 -164
- package/validation/tests/jobProperties/targetSmall.json +0 -152
- package/validation/tests/jobProperties/targetTiny.json +0 -142
- package/validation/tests/targets/focOp/bad.html +0 -25
- package/validation/tests/targets/linkTitle/index.html +0 -24
- package/validation/tests/targets/opFoc/bad.html +0 -26
- package/validation/tests/targets/opFoc/good.html +0 -23
package/testaro/allHidden.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/*
|
|
2
3
|
© 2023 CVS Health and/or one of its affiliates. All rights reserved.
|
|
3
4
|
© 2026 Jeff Witt.
|
|
@@ -7,41 +8,39 @@
|
|
|
7
8
|
|
|
8
9
|
SPDX-License-Identifier: MIT
|
|
9
10
|
*/
|
|
10
|
-
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.reporter = void 0;
|
|
13
|
+
const xPath_1 = require("../procs/xPath");
|
|
11
14
|
/*
|
|
12
15
|
allHidden
|
|
13
|
-
This test reports a page that is entirely or mainly hidden.
|
|
16
|
+
This test reports a page that is entirely or mainly hidden. Compiled to allHidden.js by tsc
|
|
17
|
+
(issue #73); edit this file, not the emitted one.
|
|
14
18
|
*/
|
|
15
|
-
|
|
16
|
-
// IMPORTS
|
|
17
|
-
|
|
18
|
-
const {getXPathCatalogIndex} = require('../procs/xPath');
|
|
19
|
-
|
|
20
19
|
// FUNCTIONS
|
|
21
|
-
|
|
22
20
|
// Runs the test and returns the result.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
21
|
+
const reporter = async (page, report) => {
|
|
22
|
+
// Get a count of elements deemed visible by Playwright.
|
|
23
|
+
const visibleElementCount = await page.locator('body :visible').count();
|
|
24
|
+
// If no element is visible:
|
|
25
|
+
if (!visibleElementCount) {
|
|
26
|
+
// Return data, totals, and a summary standard instance.
|
|
27
|
+
return {
|
|
28
|
+
data: {},
|
|
29
|
+
totals: [0, 0, 0, 1],
|
|
30
|
+
standardInstances: [{
|
|
31
|
+
ruleID: 'allHidden',
|
|
32
|
+
what: 'The entire page body is hidden or empty',
|
|
33
|
+
ordinalSeverity: 3,
|
|
34
|
+
count: 1,
|
|
35
|
+
catalogIndex: (0, xPath_1.getXPathCatalogIndex)(report, '/html/body')
|
|
36
|
+
}]
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
// Otherwise, return data, totals, and an empty array of standard instances.
|
|
29
40
|
return {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
ruleID: 'allHidden',
|
|
34
|
-
what: 'The entire page body is hidden or empty',
|
|
35
|
-
ordinalSeverity: 3,
|
|
36
|
-
count: 1,
|
|
37
|
-
catalogIndex: getXPathCatalogIndex(report, '/html/body')
|
|
38
|
-
}]
|
|
41
|
+
data: {},
|
|
42
|
+
totals: [0, 0, 0, 0],
|
|
43
|
+
standardInstances: []
|
|
39
44
|
};
|
|
40
|
-
}
|
|
41
|
-
// Otherwise, return data, totals, and an empty array of standard instances.
|
|
42
|
-
return {
|
|
43
|
-
data: {},
|
|
44
|
-
totals: [0, 0, 0, 0],
|
|
45
|
-
standardInstances: []
|
|
46
|
-
};
|
|
47
45
|
};
|
|
46
|
+
exports.reporter = reporter;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/*
|
|
2
|
+
© 2023 CVS Health and/or one of its affiliates. All rights reserved.
|
|
3
|
+
© 2026 Jeff Witt.
|
|
4
|
+
© 2025–2026 Jonathan Robert Pool.
|
|
5
|
+
|
|
6
|
+
Licensed under the MIT License. See LICENSE file at the project root or https://opensource.org/license/mit/ for details.
|
|
7
|
+
|
|
8
|
+
SPDX-License-Identifier: MIT
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
// IMPORTS
|
|
12
|
+
|
|
13
|
+
import type {Page} from 'playwright';
|
|
14
|
+
import {getXPathCatalogIndex} from '../procs/xPath';
|
|
15
|
+
import type {Report} from '../types';
|
|
16
|
+
|
|
17
|
+
/*
|
|
18
|
+
allHidden
|
|
19
|
+
This test reports a page that is entirely or mainly hidden. Compiled to allHidden.js by tsc
|
|
20
|
+
(issue #73); edit this file, not the emitted one.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
// FUNCTIONS
|
|
24
|
+
|
|
25
|
+
// Runs the test and returns the result.
|
|
26
|
+
export const reporter = async (page: Page, report: Report) => {
|
|
27
|
+
// Get a count of elements deemed visible by Playwright.
|
|
28
|
+
const visibleElementCount = await page.locator('body :visible').count();
|
|
29
|
+
// If no element is visible:
|
|
30
|
+
if (! visibleElementCount) {
|
|
31
|
+
// Return data, totals, and a summary standard instance.
|
|
32
|
+
return {
|
|
33
|
+
data: {},
|
|
34
|
+
totals: [0, 0, 0, 1],
|
|
35
|
+
standardInstances: [{
|
|
36
|
+
ruleID: 'allHidden',
|
|
37
|
+
what: 'The entire page body is hidden or empty',
|
|
38
|
+
ordinalSeverity: 3,
|
|
39
|
+
count: 1,
|
|
40
|
+
catalogIndex: getXPathCatalogIndex(report, '/html/body')
|
|
41
|
+
}]
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
// Otherwise, return data, totals, and an empty array of standard instances.
|
|
45
|
+
return {
|
|
46
|
+
data: {},
|
|
47
|
+
totals: [0, 0, 0, 0],
|
|
48
|
+
standardInstances: []
|
|
49
|
+
};
|
|
50
|
+
};
|
package/testaro/allSlanted.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/*
|
|
2
3
|
© 2023 CVS Health and/or one of its affiliates. All rights reserved.
|
|
3
4
|
© 2026 Jeff Witt.
|
|
@@ -7,45 +8,41 @@
|
|
|
7
8
|
|
|
8
9
|
SPDX-License-Identifier: MIT
|
|
9
10
|
*/
|
|
10
|
-
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.reporter = void 0;
|
|
13
|
+
const testaro_1 = require("../procs/testaro");
|
|
11
14
|
/*
|
|
12
15
|
allSlanted
|
|
13
16
|
Related to Tenon rule 154.
|
|
14
17
|
This test reports elements with italic or oblique text at least 40 characters long. Blocks of slanted text are difficult to read.
|
|
18
|
+
Compiled to allSlanted.js by tsc (issue #73); edit this file, not the emitted one.
|
|
15
19
|
*/
|
|
16
|
-
|
|
17
|
-
// IMPORTS
|
|
18
|
-
|
|
19
|
-
const {doTest} = require('../procs/testaro');
|
|
20
|
-
|
|
21
20
|
// FUNCTIONS
|
|
22
|
-
|
|
23
21
|
// Runs the test and returns the result.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
22
|
+
const reporter = async (page, report, _, withItems) => {
|
|
23
|
+
const getBadWhat = element => {
|
|
24
|
+
const styleDec = window.getComputedStyle(element);
|
|
25
|
+
const { textContent } = element;
|
|
26
|
+
// If the element contains 40 or more characters of slanted text:
|
|
27
|
+
if (['italic', 'oblique'].includes(styleDec.fontStyle) && textContent.length > 39) {
|
|
28
|
+
const parent = element.parentElement;
|
|
29
|
+
// If the element has a parent:
|
|
30
|
+
if (parent) {
|
|
31
|
+
// Get the style declaration of the parent.
|
|
32
|
+
const parentStyleDec = window.getComputedStyle(parent);
|
|
33
|
+
const { fontStyle: parentFontStyle } = parentStyleDec;
|
|
34
|
+
// If the parent also has slanted text:
|
|
35
|
+
if (['italic', 'oblique'].includes(parentFontStyle)) {
|
|
36
|
+
// Do not report a violation, because the slant may be inherited.
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// If it has no parent or its slant is autonomous, return a violation description.
|
|
41
|
+
return 'Element contains all-slanted text';
|
|
40
42
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
};
|
|
46
|
-
const selector = 'body, body *:not(style, script, svg)';
|
|
47
|
-
const whats = 'Elements contain all-slanted text';
|
|
48
|
-
return await doTest(
|
|
49
|
-
page, report, withItems, 'allSlanted', selector, whats, 0, getBadWhat.toString()
|
|
50
|
-
);
|
|
43
|
+
};
|
|
44
|
+
const selector = 'body, body *:not(style, script, svg)';
|
|
45
|
+
const whats = 'Elements contain all-slanted text';
|
|
46
|
+
return await (0, testaro_1.doTest)(page, report, withItems, 'allSlanted', selector, whats, 0, getBadWhat.toString());
|
|
51
47
|
};
|
|
48
|
+
exports.reporter = reporter;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/*
|
|
2
|
+
© 2023 CVS Health and/or one of its affiliates. All rights reserved.
|
|
3
|
+
© 2026 Jeff Witt.
|
|
4
|
+
© 2025–2026 Jonathan Robert Pool.
|
|
5
|
+
|
|
6
|
+
Licensed under the MIT License. See LICENSE file at the project root or https://opensource.org/license/mit/ for details.
|
|
7
|
+
|
|
8
|
+
SPDX-License-Identifier: MIT
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
// IMPORTS
|
|
12
|
+
|
|
13
|
+
import type {Page} from 'playwright';
|
|
14
|
+
import {doTest} from '../procs/testaro';
|
|
15
|
+
import type {GetBadWhat, Report} from '../types';
|
|
16
|
+
|
|
17
|
+
/*
|
|
18
|
+
allSlanted
|
|
19
|
+
Related to Tenon rule 154.
|
|
20
|
+
This test reports elements with italic or oblique text at least 40 characters long. Blocks of slanted text are difficult to read.
|
|
21
|
+
Compiled to allSlanted.js by tsc (issue #73); edit this file, not the emitted one.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
// FUNCTIONS
|
|
25
|
+
|
|
26
|
+
// Runs the test and returns the result.
|
|
27
|
+
export const reporter = async (page: Page, report: Report, _: unknown, withItems: boolean) => {
|
|
28
|
+
const getBadWhat: GetBadWhat = element => {
|
|
29
|
+
const styleDec = window.getComputedStyle(element);
|
|
30
|
+
const {textContent} = element;
|
|
31
|
+
// If the element contains 40 or more characters of slanted text:
|
|
32
|
+
if (['italic', 'oblique'].includes(styleDec.fontStyle) && textContent!.length > 39) {
|
|
33
|
+
const parent = element.parentElement;
|
|
34
|
+
// If the element has a parent:
|
|
35
|
+
if (parent) {
|
|
36
|
+
// Get the style declaration of the parent.
|
|
37
|
+
const parentStyleDec = window.getComputedStyle(parent);
|
|
38
|
+
const {fontStyle: parentFontStyle} = parentStyleDec;
|
|
39
|
+
// If the parent also has slanted text:
|
|
40
|
+
if (['italic', 'oblique'].includes(parentFontStyle)) {
|
|
41
|
+
// Do not report a violation, because the slant may be inherited.
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// If it has no parent or its slant is autonomous, return a violation description.
|
|
46
|
+
return 'Element contains all-slanted text';
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
const selector = 'body, body *:not(style, script, svg)';
|
|
50
|
+
const whats = 'Elements contain all-slanted text';
|
|
51
|
+
return await doTest(
|
|
52
|
+
page, report, withItems, 'allSlanted', selector, whats, 0, getBadWhat.toString()
|
|
53
|
+
);
|
|
54
|
+
};
|
package/testaro/altScheme.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/*
|
|
2
3
|
© 2025 CVS Health and/or one of its affiliates. All rights reserved.
|
|
3
4
|
© 2025 Juan S. Casado.
|
|
@@ -9,39 +10,35 @@
|
|
|
9
10
|
|
|
10
11
|
SPDX-License-Identifier: MIT
|
|
11
12
|
*/
|
|
12
|
-
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.reporter = void 0;
|
|
15
|
+
const testaro_1 = require("../procs/testaro");
|
|
13
16
|
/*
|
|
14
17
|
altScheme
|
|
15
|
-
This test reports img elements whose alt attributes are URLs or file names.
|
|
18
|
+
This test reports img elements whose alt attributes are URLs or file names. Compiled to
|
|
19
|
+
altScheme.js by tsc (issue #73); edit this file, not the emitted one.
|
|
16
20
|
*/
|
|
17
|
-
|
|
18
|
-
// IMPORTS
|
|
19
|
-
|
|
20
|
-
const {doTest} = require('../procs/testaro');
|
|
21
|
-
|
|
22
21
|
// FUNCTIONS
|
|
23
|
-
|
|
24
22
|
// Runs the test and returns the result.
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
page, report, withItems, 'altScheme', 'body img[alt]', whats, 1, getBadWhat.toString()
|
|
46
|
-
);
|
|
23
|
+
const reporter = async (page, report, _, withItems) => {
|
|
24
|
+
const getBadWhat = element => {
|
|
25
|
+
// Get the value of the alt attribute of the element.
|
|
26
|
+
const alt = (element.getAttribute('alt') || '').trim();
|
|
27
|
+
// If it is non-empty:
|
|
28
|
+
if (alt) {
|
|
29
|
+
const isURL = /^(?:https?:|file:|ftp:)\S+$/i.test(alt);
|
|
30
|
+
const isFileName = /favicon|^\S+\.(?:png|jpe?g|gif|svg|webp|ico)$/i.test(alt);
|
|
31
|
+
// If it is a URL or file name:
|
|
32
|
+
if (isURL || isFileName) {
|
|
33
|
+
const valueType = isURL && isFileName
|
|
34
|
+
? 'the URL of an image file'
|
|
35
|
+
: (isURL ? 'a URL' : 'a file name');
|
|
36
|
+
// Return a violation description.
|
|
37
|
+
return `img element has an alt attribute with ${valueType} as its value`;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
const whats = 'img elements have alt attributes with URL or filename values';
|
|
42
|
+
return await (0, testaro_1.doTest)(page, report, withItems, 'altScheme', 'body img[alt]', whats, 1, getBadWhat.toString());
|
|
47
43
|
};
|
|
44
|
+
exports.reporter = reporter;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/*
|
|
2
|
+
© 2025 CVS Health and/or one of its affiliates. All rights reserved.
|
|
3
|
+
© 2025 Juan S. Casado.
|
|
4
|
+
© 2026 Jeff Witt.
|
|
5
|
+
© 2025–2026 Jonathan Robert Pool.
|
|
6
|
+
|
|
7
|
+
Licensed under the MIT License. See LICENSE file at the project root or
|
|
8
|
+
https://opensource.org/license/mit/ for details.
|
|
9
|
+
|
|
10
|
+
SPDX-License-Identifier: MIT
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
// IMPORTS
|
|
14
|
+
|
|
15
|
+
import type {Page} from 'playwright';
|
|
16
|
+
import {doTest} from '../procs/testaro';
|
|
17
|
+
import type {GetBadWhat, Report} from '../types';
|
|
18
|
+
|
|
19
|
+
/*
|
|
20
|
+
altScheme
|
|
21
|
+
This test reports img elements whose alt attributes are URLs or file names. Compiled to
|
|
22
|
+
altScheme.js by tsc (issue #73); edit this file, not the emitted one.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
// FUNCTIONS
|
|
26
|
+
|
|
27
|
+
// Runs the test and returns the result.
|
|
28
|
+
export const reporter = async (page: Page, report: Report, _: unknown, withItems: boolean) => {
|
|
29
|
+
const getBadWhat: GetBadWhat = element => {
|
|
30
|
+
// Get the value of the alt attribute of the element.
|
|
31
|
+
const alt = (element.getAttribute('alt') || '').trim();
|
|
32
|
+
// If it is non-empty:
|
|
33
|
+
if (alt) {
|
|
34
|
+
const isURL = /^(?:https?:|file:|ftp:)\S+$/i.test(alt);
|
|
35
|
+
const isFileName = /favicon|^\S+\.(?:png|jpe?g|gif|svg|webp|ico)$/i.test(alt);
|
|
36
|
+
// If it is a URL or file name:
|
|
37
|
+
if (isURL || isFileName) {
|
|
38
|
+
const valueType = isURL && isFileName
|
|
39
|
+
? 'the URL of an image file'
|
|
40
|
+
: (isURL ? 'a URL' : 'a file name');
|
|
41
|
+
// Return a violation description.
|
|
42
|
+
return `img element has an alt attribute with ${valueType} as its value`;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
const whats = 'img elements have alt attributes with URL or filename values';
|
|
47
|
+
return await doTest(
|
|
48
|
+
page, report, withItems, 'altScheme', 'body img[alt]', whats, 1, getBadWhat.toString()
|
|
49
|
+
);
|
|
50
|
+
};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Page } from 'playwright';
|
|
2
|
+
import type { Report } from '../types';
|
|
3
|
+
export declare const reporter: (page: Page, report: Report, _0: unknown, withItems: boolean, attributeName: string, areLicit: boolean, values: string[]) => Promise<import("../procs/testaro").RuleResult>;
|
package/testaro/attVal.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/*
|
|
2
3
|
© 2023 CVS Health and/or one of its affiliates. All rights reserved.
|
|
3
4
|
© 2026 Jeff Witt.
|
|
@@ -7,31 +8,29 @@
|
|
|
7
8
|
|
|
8
9
|
SPDX-License-Identifier: MIT
|
|
9
10
|
*/
|
|
10
|
-
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.reporter = void 0;
|
|
13
|
+
const testaro_1 = require("../procs/testaro");
|
|
11
14
|
/*
|
|
12
15
|
attVal
|
|
13
16
|
This test reports elements with illicit values of an attribute.
|
|
17
|
+
Compiled to attVal.js by tsc (issue #73); edit this file, not the emitted one.
|
|
14
18
|
*/
|
|
15
|
-
|
|
16
|
-
// IMPORTS
|
|
17
|
-
|
|
18
|
-
const {doTest} = require('../procs/testaro');
|
|
19
|
-
|
|
20
19
|
// FUNCTIONS
|
|
21
|
-
|
|
22
20
|
// Runs the test and returns the result.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
21
|
+
const reporter = async (page, report, _0, withItems, attributeName, areLicit, values) => {
|
|
22
|
+
const getBadWhat = element => {
|
|
23
|
+
// Get the value of the attribute.
|
|
24
|
+
const value = element.getAttribute(attributeName);
|
|
25
|
+
// If it violates the rule:
|
|
26
|
+
if (areLicit !== values.includes(value)) {
|
|
27
|
+
// Return a violation description.
|
|
28
|
+
return `Element has attribute ${attributeName} with illicit value ${value}`;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
// The predicate runs inside the page, so bind its parameters as literals in the serialized source.
|
|
32
|
+
const getBadWhatString = `((attributeName, areLicit, values) => ${getBadWhat.toString()})(${JSON.stringify(attributeName)}, ${Boolean(areLicit)}, ${JSON.stringify(values)})`;
|
|
33
|
+
const whats = `Elements have attribute ${attributeName} with illicit values`;
|
|
34
|
+
return await (0, testaro_1.doTest)(page, report, withItems, 'attVal', `[${attributeName}]`, whats, 2, getBadWhatString);
|
|
37
35
|
};
|
|
36
|
+
exports.reporter = reporter;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/*
|
|
2
|
+
© 2023 CVS Health and/or one of its affiliates. All rights reserved.
|
|
3
|
+
© 2026 Jeff Witt.
|
|
4
|
+
© 2026 Jonathan Robert Pool.
|
|
5
|
+
|
|
6
|
+
Licensed under the MIT License. See LICENSE file at the project root or https://opensource.org/license/mit/ for details.
|
|
7
|
+
|
|
8
|
+
SPDX-License-Identifier: MIT
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
// IMPORTS
|
|
12
|
+
|
|
13
|
+
import type {Page} from 'playwright';
|
|
14
|
+
import {doTest} from '../procs/testaro';
|
|
15
|
+
import type {GetBadWhat, Report} from '../types';
|
|
16
|
+
|
|
17
|
+
/*
|
|
18
|
+
attVal
|
|
19
|
+
This test reports elements with illicit values of an attribute.
|
|
20
|
+
Compiled to attVal.js by tsc (issue #73); edit this file, not the emitted one.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
// FUNCTIONS
|
|
24
|
+
|
|
25
|
+
// Runs the test and returns the result.
|
|
26
|
+
export const reporter = async (
|
|
27
|
+
page: Page,
|
|
28
|
+
report: Report,
|
|
29
|
+
_0: unknown,
|
|
30
|
+
withItems: boolean,
|
|
31
|
+
attributeName: string,
|
|
32
|
+
areLicit: boolean,
|
|
33
|
+
values: string[]
|
|
34
|
+
) => {
|
|
35
|
+
const getBadWhat: GetBadWhat = element => {
|
|
36
|
+
// Get the value of the attribute.
|
|
37
|
+
const value = element.getAttribute(attributeName);
|
|
38
|
+
// If it violates the rule:
|
|
39
|
+
if (areLicit !== values.includes(value as string)) {
|
|
40
|
+
// Return a violation description.
|
|
41
|
+
return `Element has attribute ${attributeName} with illicit value ${value}`;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
// The predicate runs inside the page, so bind its parameters as literals in the serialized source.
|
|
45
|
+
const getBadWhatString = `((attributeName, areLicit, values) => ${
|
|
46
|
+
getBadWhat.toString()
|
|
47
|
+
})(${JSON.stringify(attributeName)}, ${Boolean(areLicit)}, ${JSON.stringify(values)})`;
|
|
48
|
+
const whats = `Elements have attribute ${attributeName} with illicit values`;
|
|
49
|
+
return await doTest(
|
|
50
|
+
page, report, withItems, 'attVal', `[${attributeName}]`, whats, 2, getBadWhatString
|
|
51
|
+
);
|
|
52
|
+
};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Page } from 'playwright';
|
|
2
|
+
import type { Report } from '../types';
|
|
3
|
+
export declare const reporter: (page: Page, report: Report, _0: unknown, withItems: boolean, labels?: Record<"name" | "email" | "given" | "family", string[]>) => Promise<import("../procs/testaro").RuleResult>;
|