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/.gitattributes
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Generated by tsc from the sibling .ts sources (npm run build:ts); do not edit.
|
|
2
|
+
types.js linguist-generated=true
|
|
3
|
+
types.d.ts linguist-generated=true
|
|
4
|
+
procs/xPath.js linguist-generated=true
|
|
5
|
+
procs/xPath.d.ts linguist-generated=true
|
|
6
|
+
procs/catalog.js linguist-generated=true
|
|
7
|
+
procs/catalog.d.ts linguist-generated=true
|
|
8
|
+
procs/testaro.js linguist-generated=true
|
|
9
|
+
procs/testaro.d.ts linguist-generated=true
|
|
10
|
+
testaro/altScheme.js linguist-generated=true
|
|
11
|
+
testaro/altScheme.d.ts linguist-generated=true
|
|
12
|
+
testaro/autocomplete.js linguist-generated=true
|
|
13
|
+
testaro/autocomplete.d.ts linguist-generated=true
|
|
14
|
+
testaro/datalistRef.js linguist-generated=true
|
|
15
|
+
testaro/datalistRef.d.ts linguist-generated=true
|
|
16
|
+
testaro/hr.js linguist-generated=true
|
|
17
|
+
testaro/hr.d.ts linguist-generated=true
|
|
18
|
+
testaro/lineHeight.js linguist-generated=true
|
|
19
|
+
testaro/lineHeight.d.ts linguist-generated=true
|
|
20
|
+
testaro/radioSet.js linguist-generated=true
|
|
21
|
+
testaro/radioSet.d.ts linguist-generated=true
|
|
22
|
+
testaro/allSlanted.js linguist-generated=true
|
|
23
|
+
testaro/allSlanted.d.ts linguist-generated=true
|
|
24
|
+
testaro/distortion.js linguist-generated=true
|
|
25
|
+
testaro/distortion.d.ts linguist-generated=true
|
|
26
|
+
testaro/miniText.js linguist-generated=true
|
|
27
|
+
testaro/miniText.d.ts linguist-generated=true
|
|
28
|
+
testaro/phOnly.js linguist-generated=true
|
|
29
|
+
testaro/phOnly.d.ts linguist-generated=true
|
|
30
|
+
testaro/legendLoc.js linguist-generated=true
|
|
31
|
+
testaro/legendLoc.d.ts linguist-generated=true
|
|
32
|
+
testaro/linkExt.js linguist-generated=true
|
|
33
|
+
testaro/linkExt.d.ts linguist-generated=true
|
|
34
|
+
testaro/linkOldAtt.js linguist-generated=true
|
|
35
|
+
testaro/linkOldAtt.d.ts linguist-generated=true
|
|
36
|
+
testaro/linkTo.js linguist-generated=true
|
|
37
|
+
testaro/linkTo.d.ts linguist-generated=true
|
|
38
|
+
testaro/linkUl.js linguist-generated=true
|
|
39
|
+
testaro/linkUl.d.ts linguist-generated=true
|
|
40
|
+
testaro/nonTable.js linguist-generated=true
|
|
41
|
+
testaro/nonTable.d.ts linguist-generated=true
|
|
42
|
+
testaro/optRoleSel.js linguist-generated=true
|
|
43
|
+
testaro/optRoleSel.d.ts linguist-generated=true
|
|
44
|
+
testaro/pseudoP.js linguist-generated=true
|
|
45
|
+
testaro/pseudoP.d.ts linguist-generated=true
|
|
46
|
+
testaro/secHeading.js linguist-generated=true
|
|
47
|
+
testaro/secHeading.d.ts linguist-generated=true
|
|
48
|
+
testaro/textSem.js linguist-generated=true
|
|
49
|
+
testaro/textSem.d.ts linguist-generated=true
|
|
50
|
+
testaro/titledEl.js linguist-generated=true
|
|
51
|
+
testaro/titledEl.d.ts linguist-generated=true
|
|
52
|
+
testaro/zIndex.js linguist-generated=true
|
|
53
|
+
testaro/zIndex.d.ts linguist-generated=true
|
|
54
|
+
testaro/title.js linguist-generated=true
|
|
55
|
+
testaro/title.d.ts linguist-generated=true
|
|
56
|
+
testaro/docType.js linguist-generated=true
|
|
57
|
+
testaro/docType.d.ts linguist-generated=true
|
|
58
|
+
testaro/allHidden.js linguist-generated=true
|
|
59
|
+
testaro/allHidden.d.ts linguist-generated=true
|
|
60
|
+
testaro/role.js linguist-generated=true
|
|
61
|
+
testaro/role.d.ts linguist-generated=true
|
|
62
|
+
testaro/bulk.js linguist-generated=true
|
|
63
|
+
testaro/bulk.d.ts linguist-generated=true
|
|
64
|
+
testaro/headEl.js linguist-generated=true
|
|
65
|
+
testaro/headEl.d.ts linguist-generated=true
|
|
66
|
+
testaro/linkAmb.js linguist-generated=true
|
|
67
|
+
testaro/linkAmb.d.ts linguist-generated=true
|
|
68
|
+
testaro/dupAtt.js linguist-generated=true
|
|
69
|
+
testaro/dupAtt.d.ts linguist-generated=true
|
|
70
|
+
testaro/hover.js linguist-generated=true
|
|
71
|
+
testaro/hover.d.ts linguist-generated=true
|
|
72
|
+
testaro/motion.js linguist-generated=true
|
|
73
|
+
testaro/motion.d.ts linguist-generated=true
|
|
74
|
+
testaro/targetsNear.js linguist-generated=true
|
|
75
|
+
testaro/targetsNear.d.ts linguist-generated=true
|
|
76
|
+
testaro/textNodes.js linguist-generated=true
|
|
77
|
+
testaro/textNodes.d.ts linguist-generated=true
|
|
78
|
+
testaro/elements.js linguist-generated=true
|
|
79
|
+
testaro/elements.d.ts linguist-generated=true
|
|
80
|
+
testaro/allCaps.js linguist-generated=true
|
|
81
|
+
testaro/allCaps.d.ts linguist-generated=true
|
|
82
|
+
testaro/focAll.js linguist-generated=true
|
|
83
|
+
testaro/focAll.d.ts linguist-generated=true
|
|
84
|
+
testaro/styleDiff.js linguist-generated=true
|
|
85
|
+
testaro/styleDiff.d.ts linguist-generated=true
|
|
86
|
+
testaro/buttonMenu.js linguist-generated=true
|
|
87
|
+
testaro/buttonMenu.d.ts linguist-generated=true
|
|
88
|
+
testaro/tabNav.js linguist-generated=true
|
|
89
|
+
testaro/tabNav.d.ts linguist-generated=true
|
|
90
|
+
testaro/registry.js linguist-generated=true
|
|
91
|
+
testaro/registry.d.ts linguist-generated=true
|
|
92
|
+
testaro/registry.ts linguist-generated=true
|
|
93
|
+
tests/testaro.js linguist-generated=true
|
|
94
|
+
tests/testaro.d.ts linguist-generated=true
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# © 2026 Jeff Witt.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the MIT License. See LICENSE file at the project root or
|
|
4
|
+
# https://opensource.org/license/mit/ for details.
|
|
5
|
+
#
|
|
6
|
+
# SPDX-License-Identifier: MIT
|
|
7
|
+
|
|
8
|
+
# CI: lints the code and validates the Testaro rules on every push and pull request.
|
|
9
|
+
|
|
10
|
+
name: CI
|
|
11
|
+
|
|
12
|
+
on:
|
|
13
|
+
push:
|
|
14
|
+
branches: [main]
|
|
15
|
+
pull_request:
|
|
16
|
+
|
|
17
|
+
concurrency:
|
|
18
|
+
group: ci-${{ github.ref }}
|
|
19
|
+
cancel-in-progress: true
|
|
20
|
+
|
|
21
|
+
jobs:
|
|
22
|
+
lint:
|
|
23
|
+
name: Lint
|
|
24
|
+
runs-on: ubuntu-latest
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@v5
|
|
27
|
+
- uses: actions/setup-node@v5
|
|
28
|
+
with:
|
|
29
|
+
node-version: 24
|
|
30
|
+
cache: npm
|
|
31
|
+
# Postinstall scripts only download browsers and a JRE, which linting does not need.
|
|
32
|
+
- run: npm ci --ignore-scripts
|
|
33
|
+
- run: npm run lint
|
|
34
|
+
|
|
35
|
+
validate:
|
|
36
|
+
name: Validate Testaro rules
|
|
37
|
+
runs-on: ubuntu-latest
|
|
38
|
+
# The image tag must match the playwright version in package-lock.json (see CONTAINERS.md).
|
|
39
|
+
# The next step enforces that; when Playwright is updated, update the tag here, too.
|
|
40
|
+
container:
|
|
41
|
+
image: mcr.microsoft.com/playwright:v1.62.1-noble
|
|
42
|
+
timeout-minutes: 45
|
|
43
|
+
env:
|
|
44
|
+
# The default Docker seccomp profile blocks the namespace cloning of the Chromium sandbox.
|
|
45
|
+
TESTARO_CHROMIUM_NO_SANDBOX: 'true'
|
|
46
|
+
steps:
|
|
47
|
+
- uses: actions/checkout@v5
|
|
48
|
+
- name: Require the container image to match the pinned Playwright version
|
|
49
|
+
run: |
|
|
50
|
+
lockVersion=$(node -p "require('./package-lock.json').packages['node_modules/playwright'].version")
|
|
51
|
+
imageVersion='1.62.1'
|
|
52
|
+
if [ "$lockVersion" != "$imageVersion" ]; then
|
|
53
|
+
echo "package-lock.json pins playwright $lockVersion, but this workflow uses the v$imageVersion image."
|
|
54
|
+
echo "Update the container image tag and imageVersion in .github/workflows/ci.yml (see CONTAINERS.md)."
|
|
55
|
+
exit 1
|
|
56
|
+
fi
|
|
57
|
+
- run: npm ci
|
|
58
|
+
- run: npm run tests
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# © 2026 Jeff Witt.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the MIT License. See LICENSE file at the project root or
|
|
4
|
+
# https://opensource.org/license/mit/ for details.
|
|
5
|
+
#
|
|
6
|
+
# SPDX-License-Identifier: MIT
|
|
7
|
+
|
|
8
|
+
# Publishes the package to npm when a GitHub release is published (the release tag must equal
|
|
9
|
+
# v<package.json version>), or on manual dispatch. Authenticates with the NPM_TOKEN repository
|
|
10
|
+
# secret, a granular access token with publish permission for the testaro package.
|
|
11
|
+
# prepublishOnly regenerates the rule registry and the emitted TypeScript, and the version
|
|
12
|
+
# check refuses a release tag that does not match.
|
|
13
|
+
|
|
14
|
+
name: Publish
|
|
15
|
+
|
|
16
|
+
on:
|
|
17
|
+
release:
|
|
18
|
+
types: [published]
|
|
19
|
+
workflow_dispatch:
|
|
20
|
+
|
|
21
|
+
permissions:
|
|
22
|
+
contents: read
|
|
23
|
+
id-token: write
|
|
24
|
+
|
|
25
|
+
jobs:
|
|
26
|
+
publish:
|
|
27
|
+
name: Publish to npm
|
|
28
|
+
runs-on: ubuntu-latest
|
|
29
|
+
steps:
|
|
30
|
+
- uses: actions/checkout@v5
|
|
31
|
+
- uses: actions/setup-node@v5
|
|
32
|
+
with:
|
|
33
|
+
node-version: 24
|
|
34
|
+
cache: npm
|
|
35
|
+
registry-url: https://registry.npmjs.org
|
|
36
|
+
- name: Check that the release tag matches the package version
|
|
37
|
+
if: github.event_name == 'release'
|
|
38
|
+
run: |
|
|
39
|
+
version=$(node -p "require('./package.json').version")
|
|
40
|
+
if [ "${{ github.event.release.tag_name }}" != "v$version" ]; then
|
|
41
|
+
echo "Release tag ${{ github.event.release.tag_name }} does not match package version v$version" >&2
|
|
42
|
+
exit 1
|
|
43
|
+
fi
|
|
44
|
+
- run: npm ci
|
|
45
|
+
- run: npm run lint
|
|
46
|
+
- run: npm run typecheck
|
|
47
|
+
- run: npm publish --provenance --access public
|
|
48
|
+
env:
|
|
49
|
+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
name: TypeScript
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
typecheck:
|
|
10
|
+
name: Type check and syntax check
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
timeout-minutes: 15
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v4
|
|
15
|
+
- uses: actions/setup-node@v4
|
|
16
|
+
with:
|
|
17
|
+
node-version: 24
|
|
18
|
+
cache: npm
|
|
19
|
+
- name: Install dependencies
|
|
20
|
+
run: npm ci --ignore-scripts --no-audit --no-fund
|
|
21
|
+
- name: Generate rule registry
|
|
22
|
+
run: npm run build:registry
|
|
23
|
+
- name: Compile TypeScript
|
|
24
|
+
run: npm run build:ts
|
|
25
|
+
- name: Committed emit matches sources
|
|
26
|
+
run: git diff --exit-code
|
|
27
|
+
- name: Syntax-check all JavaScript
|
|
28
|
+
run: |
|
|
29
|
+
set -e
|
|
30
|
+
find . -name '*.js' \
|
|
31
|
+
-not -path './node_modules/*' \
|
|
32
|
+
-not -path './.git/*' \
|
|
33
|
+
-not -path './dist/*' \
|
|
34
|
+
-not -path './ed11y/*' \
|
|
35
|
+
-print0 | xargs -0 -n1 node --check
|
package/AGENTS.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
- **Run job**: `npm run run [jobID]`
|
|
8
8
|
- **Directory watch**: `npm run dirWatch`
|
|
9
9
|
- **Network watch**: `npm run netWatch`
|
|
10
|
-
- **Lint**: `
|
|
10
|
+
- **Lint**: `npm run lint` (follows `eslint.config.mjs`)
|
|
11
11
|
|
|
12
12
|
## Architecture
|
|
13
13
|
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
- **Key files**: `run.js` (main executor), `actSpecs.js` (act specifications), `call.js` (CLI entry), `tests/testaro.js` (Testaro tool rules)
|
|
16
16
|
- **Tools**: Integrates these accessibility tools: Axe, Alfa, IBM Checker, QualWeb, ASLint, WAVE, Ed11y, HTML CodeSniffer, Nu Html Checker API, Nu Html Checker, Testaro
|
|
17
17
|
- **Data flow**: Jobs (JSON) → run.js → tool tests → reports (with standardized results)
|
|
18
|
-
- **Env vars**: Required for WAVE (`WAVE_KEY`); optional `DEBUG`, `WAITS`, `JOBDIR`, `REPORTDIR`, `
|
|
18
|
+
- **Env vars**: Required for WAVE (`WAVE_KEY`); optional `DEBUG`, `WAITS`, `JOBDIR`, `REPORTDIR`; for server polling `NETWATCH_URL_JOB`, `NETWATCH_URL_REPORT`, `NETWATCH_AUTH_TYPE`, `NETWATCH_WORKER_ID`, `NETWATCH_WORKER_SECRET`
|
|
19
19
|
|
|
20
20
|
## Code Style
|
|
21
21
|
|
package/CLAUDE.md
CHANGED
|
@@ -12,7 +12,7 @@ npm run deps
|
|
|
12
12
|
npm run build
|
|
13
13
|
|
|
14
14
|
# Lint (ESLint)
|
|
15
|
-
|
|
15
|
+
npm run lint
|
|
16
16
|
|
|
17
17
|
# Validate a single Testaro rule (replace <ruleID> with the rule name, e.g. allSlanted)
|
|
18
18
|
npm test <ruleID>
|
|
@@ -32,25 +32,25 @@ node call netWatch <true|false> <intervalSeconds> [<true|false>]
|
|
|
32
32
|
|
|
33
33
|
## Architecture
|
|
34
34
|
|
|
35
|
-
Testaro is an ensemble accessibility test runner. It integrates
|
|
35
|
+
Testaro is an ensemble accessibility test runner. It integrates 12 external tools plus ~50 of its own rules (the "testaro" tool) and produces standardized reports from a job document.
|
|
36
36
|
|
|
37
37
|
### Job → Report lifecycle
|
|
38
38
|
|
|
39
39
|
1. A caller provides a **job** — a plain JS/JSON object with a `target` URL, `browserID`, optional `device`, and an `acts` array.
|
|
40
|
-
2. `run.js` exports `doJob(job)`, which validates the job (`procs/job.js`), builds a DOM **catalog** (`procs/catalog.
|
|
41
|
-
3. `doActs.js` iterates the acts array. For `test` acts it forks a child process running `procs/doTestAct.js` (one per tool invocation) and enforces per-tool time limits. Non-test acts (browser interactions) execute in the parent.
|
|
42
|
-
4. Each tool's test module lives in `tests/<toolID>.js
|
|
40
|
+
2. `run.js` exports `doJob(job)`, which validates the job (`procs/job.js`), builds a DOM **catalog** (`procs/catalog.ts`) as checkpoint 0, then delegates to `procs/doActs.js`.
|
|
41
|
+
3. `doActs.js` iterates the acts array. For `test` acts it forks a child process running `procs/doTestAct.js` (one per tool invocation) and enforces per-tool time limits. Non-test acts (browser interactions) execute in the parent through `procs/actDo.js`. A `checkpoint` act snapshots the live page (`procs/checkpoint.js`) as a page state that later test acts observe: the child's launcher replays the recorded interaction acts before the tool runs (`docs/checkpoint-scanning.md`).
|
|
42
|
+
4. Each tool's test module lives in `tests/<toolID>.ts` (compiled to a committed `tests/<toolID>.js`). It calls the tool's library and converts the native result to the **standard result** shape (`prevented`, `totals[4]`, `outcomeTotals`, `instances[]`) using the helpers in `procs/standard.ts`. Every instance carries an `outcome` (`failed` or `cantTell`) that is the authoritative certainty signal; `ordinalSeverity` still encodes certainty per tool until it is redefined as impact only (see `docs/standard-result-outcome.md`).
|
|
43
43
|
5. `doJob` returns the job object with `jobData` and `catalog` added at the top level and `result` added inside each `test` act. The job's `standard` property controls what `result` contains: `'no'` → `nativeResult` only; `'only'` → `standardResult` only; `'also'` → both.
|
|
44
44
|
|
|
45
|
-
The
|
|
45
|
+
The 19 act types are defined and documented in `actSpecs.js` (`etc` property). The main interactive types are `button`, `checkbox`, `focus`, `link`, `press`, `presses`, `radio`, `reveal`, `search`, `select`, `text`, `url`, `wait`. The `test` type runs a tool. `launch`, `next`, `page`, `state` control flow. `checkpoint` snapshots a page state. A `test` act's optional `scope` (`page` or `changed`) restricts element-local rules to the subtrees changed since the previous checkpoint (`procs/scope.js`); reports with two or more checkpoints gain `flow`, the issue deltas between checkpoints (`procs/flow.js`). Move acts accept a Playwright `selector`; `procs/userPath.js` converts a recorded user path (yra-monitor's action shape) into acts. See `docs/checkpoint-scanning.md`.
|
|
46
46
|
|
|
47
47
|
### Testaro rules (`testaro/` directory)
|
|
48
48
|
|
|
49
|
-
Each file exports a `reporter(page, catalog, withItems)` async function. Rules are registered in `tests/testaro.
|
|
49
|
+
Each file exports a `reporter(page, catalog, withItems)` async function. Rules are registered in `tests/testaro.ts` in the `allRules` array, which controls default execution order, contamination flags, time limits, `defaultOn`, and an optional default `outcome`. The generated `testaro/registry.ts` maps rule IDs to modules.
|
|
50
50
|
|
|
51
51
|
The default order in `allRules` reflects a two-phase execution strategy: non-contaminating rules (`contaminates: false`) come first and all share a single page load; contaminating rules (`contaminates: true`) follow, each tested on a freshly loaded copy of the page.
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
The `motion` rule is atypical: it takes its own screenshot and compares it with the page image of the checkpoint being tested (`report.images`, made when the catalog was built), so that visible page change is detected without waiting between two screenshots of its own.
|
|
54
54
|
|
|
55
55
|
Two implementation patterns exist:
|
|
56
56
|
|
|
@@ -61,7 +61,7 @@ Two implementation patterns exist:
|
|
|
61
61
|
|
|
62
62
|
A revision of the validation architecture is currently being planned. In the meantime the next paragraph describes its current design, not guaranteed to work without error.
|
|
63
63
|
|
|
64
|
-
Validation tests live in `validation/tests/
|
|
64
|
+
Validation tests live in `validation/tests/jobProperties/` (jobs with `expect` arrays) and `validation/tests/targets/` (static HTML pages served locally as test targets). Running `npm test <ruleID>` executes `validation/executors/test.js` → `validation/validateTest.js`, which runs the job and compares `result` fields against `expect` clauses.
|
|
65
65
|
|
|
66
66
|
### Tool XPath strategy
|
|
67
67
|
|
|
@@ -81,21 +81,23 @@ Key variables:
|
|
|
81
81
|
- `WAITS` — ms delay inserted between Playwright operations (useful for debugging)
|
|
82
82
|
- `WAVE_KEY` — API key for the WAVE subscription API
|
|
83
83
|
- `JOBDIR` / `REPORTDIR` — root directories for job files and report output
|
|
84
|
-
- `
|
|
85
|
-
- `NETWATCH_URL_<N>_JOB/REPORT/AUTH`, `NETWATCH_URLS` — server polling configuration
|
|
84
|
+
- `NETWATCH_URL_JOB`/`NETWATCH_URL_REPORT`/`NETWATCH_AUTH_TYPE`/`NETWATCH_WORKER_ID`/`NETWATCH_WORKER_SECRET` — server polling configuration
|
|
86
85
|
- `TIMEOUT_MULTIPLIER` — scales all per-tool time limits (default 1)
|
|
86
|
+
- `NAV_WAIT_UNTIL`/`NAV_TIMEOUT`/`NAV_FAIL_FAST_4XX`, `SCANNER_ID`, `PRESCAN_SCROLL`, `TESTARO_RULE_RETRIES`, `QUALWEB_STEALTH`/`QUALWEB_ADBLOCK` — deployment defaults that job properties (`navigation`, `scannerId`, `scroll`, `browserChannel`; `retries`, `stealth`, `adBlock` on test acts) override (`procs/config.js`)
|
|
87
87
|
|
|
88
88
|
## Code style
|
|
89
89
|
|
|
90
|
-
|
|
90
|
+
The rule modules, the tool adapters, `procs/testaro.ts`, `procs/catalog.ts`, `procs/xPath.ts`, `procs/standard.ts`, and `types.ts` are TypeScript sources; their `.js` and `.d.ts` outputs are committed. Edit the `.ts` file, then run `npm run build:ts` (and `npm run build:registry` after adding or removing a rule module) and commit the regenerated outputs; CI fails if they drift. Files without a `.ts` counterpart are still plain JavaScript. See `CONTRIBUTING.md`.
|
|
91
|
+
|
|
92
|
+
ESLint (`eslint.config.mjs`): 2-space indent, single quotes, semicolons, Stroustrup brace style (`else`/`catch` on a new line after `}`), `no-use-before-define`. Emitted `.js` files are excluded from linting. The vendored `htmlcs/HTMLCS.js`, `ed11y`, `surea11y`, and `pour` bundles are excluded from linting; `htmlcs/HTMLCS.js` must not be reformatted.
|
|
91
93
|
|
|
92
94
|
Long comments are not broken into multiple lines per paragraph.
|
|
93
95
|
|
|
94
96
|
## Adding a new Testaro rule
|
|
95
97
|
|
|
96
|
-
1. Add an entry to `allRules` in `tests/testaro.
|
|
97
|
-
2. Create `testaro/<ruleID>.
|
|
98
|
-
3. Write a validation job in `validation/tests/
|
|
98
|
+
1. Add an entry to `allRules` in `tests/testaro.ts`.
|
|
99
|
+
2. Create `testaro/<ruleID>.ts` exporting a `reporter` function using `doTest` (preferred) or `getBasicResult`, then run `npm run build:registry && npm run build:ts` and commit the regenerated registry and emitted files.
|
|
100
|
+
3. Write a validation job in `validation/tests/jobProperties/<ruleID>.json` with an `expect` array and corresponding HTML target(s) in `validation/tests/targets/<ruleID>/`.
|
|
99
101
|
4. Run `npm test <ruleID>` until validation passes.
|
|
100
102
|
|
|
101
103
|
## Key files
|
|
@@ -104,14 +106,18 @@ Long comments are not broken into multiple lines per paragraph.
|
|
|
104
106
|
| ---- | ------- |
|
|
105
107
|
| `run.js` | `doJob()` — the main entry point |
|
|
106
108
|
| `call.js` | CLI wrapper for `run`, `dirWatch`, `netWatch` |
|
|
107
|
-
| `procs/doActs.js` | Iterates acts; forks child for each tool |
|
|
109
|
+
| `procs/doActs.js` | Iterates acts; forks child for each tool; assigns test acts to checkpoints |
|
|
110
|
+
| `procs/actDo.js` | Performs the acts that operate on a live page; replays a checkpoint's acts |
|
|
111
|
+
| `procs/checkpoint.js` | Snapshots a live page as a checkpoint |
|
|
108
112
|
| `procs/doTestAct.js` | Child-process entry point for tool invocations |
|
|
109
113
|
| `procs/testaro.js` | `doTest` / `getBasicResult` helpers for Testaro rules |
|
|
110
114
|
| `procs/launch.js` | Browser lifecycle (launch, goTo, nonce, wait) |
|
|
111
|
-
| `procs/catalog.
|
|
115
|
+
| `procs/catalog.ts` | Builds the element catalog from the DOM (checkpoint 0, and any live page for later checkpoints) |
|
|
112
116
|
| `procs/job.js` | Job validation; `tools` constant |
|
|
113
117
|
| `actSpecs.js` | Canonical specs for all 18 act types |
|
|
114
|
-
| `tests/testaro.
|
|
118
|
+
| `tests/testaro.ts` | `allRules` registry for the testaro tool |
|
|
119
|
+
| `procs/standard.ts` | Builders for the standard result and its instances (`outcome`, `uncertainty`, `needed`) |
|
|
120
|
+
| `testaro/registry.ts` | Generated map of rule IDs to rule modules (`npm run build:registry`) |
|
|
115
121
|
| `testaro/<ruleID>.js` | One file per Testaro rule |
|
|
116
122
|
| `validation/validateTest.js` | Core validation harness |
|
|
117
123
|
|
package/CONTAINERS.md
CHANGED
|
@@ -63,17 +63,20 @@ docker run --rm --init \
|
|
|
63
63
|
|
|
64
64
|
## Server polling
|
|
65
65
|
|
|
66
|
-
To poll a server for jobs instead of watching a directory, override the command and provide the `netWatch` variables:
|
|
66
|
+
To poll a server for jobs instead of watching a directory, override the command and provide the `netWatch` variables, such as:
|
|
67
67
|
|
|
68
68
|
```bash
|
|
69
69
|
docker run --rm --init \
|
|
70
|
-
-e
|
|
71
|
-
-e
|
|
72
|
-
-e
|
|
73
|
-
-e
|
|
74
|
-
|
|
70
|
+
-e NETWATCH_URL_JOB=https://myserver.com/worker/job \
|
|
71
|
+
-e NETWATCH_URL_REPORT=https://myserver.com/worker/report \
|
|
72
|
+
-e NETWATCH_AUTH_TYPE=header \
|
|
73
|
+
-e NETWATCH_WORKER_ID=worker1 \
|
|
74
|
+
-e NETWATCH_WORKER_SECRET=seekRut \
|
|
75
|
+
testaro node call netWatch true 300
|
|
75
76
|
```
|
|
76
77
|
|
|
78
|
+
The same variables can be supplied through the Compose stack instead: define them in `.env` and run `docker compose run testaro node call netWatch true 300`. A third `netWatch` argument of `true` would disable certificate verification; leave it off except against servers you control.
|
|
79
|
+
|
|
77
80
|
## Operational notes
|
|
78
81
|
|
|
79
82
|
- **Init process**: Testaro forks a child process per test act, and some tools relaunch browsers repeatedly, so zombie reaping matters more than for typical browser-automation applications. Always run with an init process (`docker run --init`; in Compose, `init: true`).
|
package/CONTRIBUTING.md
CHANGED
|
@@ -41,18 +41,18 @@ The second step is to write a validator for the new rule. A validator is softwar
|
|
|
41
41
|
|
|
42
42
|
Every Testaro rule (which means each of the approximately 50 rules of the Testaro tool) has a correspoding validator. A validator has two parts:
|
|
43
43
|
|
|
44
|
-
- A job file, in the `validation/tests/
|
|
44
|
+
- A job-properties file, in the `validation/tests/jobProperties` directory. It tells Testaro what tests to perform and what the results should be.
|
|
45
45
|
- A target directory, within the `validation/tests/targets` directory. The target directory contains one or more HTML files that will be tested by the job.
|
|
46
46
|
|
|
47
47
|
Inspecting some of the jobs and targets in the `validation/tests` directory can help you understand how validators work.
|
|
48
48
|
|
|
49
49
|
### Step 3
|
|
50
50
|
|
|
51
|
-
The third step is to add an entry to the `allRules`
|
|
51
|
+
The third step is to add an entry to the `allRules` array in the `tests/testaro.ts` file, and then to run `npm run build:ts` so that the emitted `tests/testaro.js` matches. See [Editing TypeScript files](#editing-typescript-files) below.
|
|
52
52
|
|
|
53
53
|
### Step 4
|
|
54
54
|
|
|
55
|
-
The fourth step is to implement the new rule by creating a
|
|
55
|
+
The fourth step is to implement the new rule by creating a TypeScript file and saving it in the `testaro` directory. Then run `npm run build:registry && npm run build:ts`, which adds the rule to the generated registry and compiles both files. See [Editing TypeScript files](#editing-typescript-files) below.
|
|
56
56
|
|
|
57
57
|
To optimize quality, it may be wise for one person to perform steps 1, 2, and 3, and then for a second person independently to perform step 4 (“clean-room” development).
|
|
58
58
|
|
|
@@ -62,6 +62,32 @@ Whether a new rule should be implemented with support from the `doTest` function
|
|
|
62
62
|
|
|
63
63
|
The existing `testaro` tests can serve as templates for new ones. At present, only the `hover` and `role` tests make use of the `getBasicResult` function.
|
|
64
64
|
|
|
65
|
+
## Editing TypeScript files
|
|
66
|
+
|
|
67
|
+
Testaro is migrating from JavaScript to TypeScript, one file at a time ([issue #73](https://github.com/YRA-Tech/testaro/issues/73)). Files that have been converted exist in three forms in the same directory:
|
|
68
|
+
|
|
69
|
+
- `x.ts` — the source, the only one you edit.
|
|
70
|
+
- `x.js` — compiled from `x.ts` by the TypeScript compiler, and **committed**.
|
|
71
|
+
- `x.d.ts` — the type declarations, also compiled and committed.
|
|
72
|
+
|
|
73
|
+
The emitted files are committed rather than built at install time so that the package layout is identical to what it was before the migration: consumers that deep-import a module path, and the `patch-package` patches that some deployments apply, keep working unchanged. Every converted `.ts` file says so near the top:
|
|
74
|
+
|
|
75
|
+
```text
|
|
76
|
+
Compiled to x.js by tsc (issue #73); edit this file, not the emitted one.
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**If a file has a `.ts` version, edit that one and never the emitted `.js`.** After editing, run:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
npm run build:ts
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
and commit the regenerated `.js` and `.d.ts` alongside your `.ts` change. If you added or removed a rule module in the `testaro` directory, run `npm run build:registry` first, which regenerates `testaro/registry.ts` from the modules on disk.
|
|
86
|
+
|
|
87
|
+
Continuous integration enforces this: it regenerates the registry, compiles, and fails the pull request if any emitted file differs from what was committed. A hand-edited `.js` will therefore fail the check, and the edit would be overwritten by the next compile in any case.
|
|
88
|
+
|
|
89
|
+
Files that have not been converted yet are still plain JavaScript with no `.ts` counterpart; edit those directly, as before. Some of them have a hand-written `x.d.ts` neighbor that describes the module to converted TypeScript files. If you change such a module's exported interface, update its `.d.ts` to match.
|
|
90
|
+
|
|
65
91
|
## License agreement
|
|
66
92
|
|
|
67
93
|
From 12 February 2024 through 30 September 2025, contributors of code to Testaro executed the [CVS Health OSS Project Contributor License Agreement](https://forms.office.com/pages/responsepage.aspx?id=uGG7-v46dU65NKR_eCuM1xbiih2MIwxBuRvO0D_wqVFUQ1k0OE5SVVJWWkY4MTVJMkY3Sk9GM1FHRC4u) for Testaro before any pull request was approved and merged.
|
package/Dockerfile
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# The base-image tag must match the version of the playwright package in
|
|
11
11
|
# package-lock.json, so that the browsers baked into the image are the ones
|
|
12
12
|
# the installed Playwright expects.
|
|
13
|
-
FROM mcr.microsoft.com/playwright:v1.62.
|
|
13
|
+
FROM mcr.microsoft.com/playwright:v1.62.1-noble
|
|
14
14
|
|
|
15
15
|
# Install a headless Java runtime for the nuVnu test (vnu-jar); baking it in
|
|
16
16
|
# prevents vnu-jar from downloading a Temurin runtime over the network on
|