@sa11y/jest 6.9.4 → 6.9.5-alpha.2
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/dist/automatic.d.ts +1 -0
- package/dist/automatic.d.ts.map +1 -1
- package/dist/automatic.js +61 -13
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +4 -0
- package/package.json +7 -7
package/dist/automatic.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export type AutoCheckOpts = {
|
|
|
6
6
|
cleanupAfterEach?: boolean;
|
|
7
7
|
consolidateResults?: boolean;
|
|
8
8
|
filesFilter?: string[];
|
|
9
|
+
runDOMMutationObserver?: boolean;
|
|
9
10
|
};
|
|
10
11
|
export declare const setOriginalDocumentBodyHtml: (bodyHtml: string | null) => void;
|
|
11
12
|
export declare const getOriginalDocumentBodyHtml: () => string | null;
|
package/dist/automatic.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"automatic.d.ts","sourceRoot":"","sources":["../src/automatic.ts"],"names":[],"mappings":"AAeA;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAI7B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"automatic.d.ts","sourceRoot":"","sources":["../src/automatic.ts"],"names":[],"mappings":"AAeA;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAI7B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CACpC,CAAC;AAgBF,eAAO,MAAM,2BAA2B,aAAc,MAAM,GAAG,IAAI,SAElE,CAAC;AAEF,eAAO,MAAM,2BAA2B,qBAEvC,CAAC;AAEF;;GAEG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAUtF;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,IAAI,GAAE,aAAoC,GAAG,OAAO,CAAC,IAAI,CAAC,CA4E9F;AAoBD;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,GAAE,aAAoC,GAAG,IAAI,CAmB7F"}
|
package/dist/automatic.js
CHANGED
|
@@ -24,6 +24,7 @@ const defaultAutoCheckOpts = {
|
|
|
24
24
|
filesFilter: [],
|
|
25
25
|
};
|
|
26
26
|
let originalDocumentBodyHtml = null;
|
|
27
|
+
let mutatedNodes = [];
|
|
27
28
|
const setOriginalDocumentBodyHtml = (bodyHtml) => {
|
|
28
29
|
originalDocumentBodyHtml = bodyHtml ?? null;
|
|
29
30
|
};
|
|
@@ -67,22 +68,44 @@ async function automaticCheck(opts = defaultAutoCheckOpts) {
|
|
|
67
68
|
let currNode = walker.firstChild();
|
|
68
69
|
const customRules = (0, common_1.useCustomRules)();
|
|
69
70
|
try {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
71
|
+
if (!opts.runDOMMutationObserver) {
|
|
72
|
+
while (currNode !== null) {
|
|
73
|
+
// TODO (spike): Use a logger lib with log levels selectable at runtime
|
|
74
|
+
// console.log(
|
|
75
|
+
// `♿ [DEBUG] Automatically checking a11y of ${currNode.nodeName}
|
|
76
|
+
// for test "${expect.getState().currentTestName}"
|
|
77
|
+
// : ${testPath}`
|
|
78
|
+
// );
|
|
79
|
+
// W-10004832 - Exclude descendancy based rules from automatic checks
|
|
80
|
+
if (customRules.length === 0)
|
|
81
|
+
violations.push(...(await (0, assert_1.getViolationsJSDOM)(currNode, (0, setup_1.adaptA11yConfig)(preset_rules_1.defaultRuleset))));
|
|
82
|
+
else
|
|
83
|
+
violations.push(...(await (0, assert_1.getViolationsJSDOM)(currNode, (0, setup_1.adaptA11yConfigCustomRules)(preset_rules_1.defaultRuleset, customRules))));
|
|
84
|
+
currNode = walker.nextSibling();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
// loop mutated nodes
|
|
89
|
+
for (let i = 0; i < mutatedNodes.length; i++) {
|
|
90
|
+
if (mutatedNodes[i]) {
|
|
91
|
+
document.body.innerHTML = mutatedNodes[i];
|
|
92
|
+
const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_ELEMENT);
|
|
93
|
+
let currNode = walker.firstChild();
|
|
94
|
+
while (currNode !== null) {
|
|
95
|
+
if (customRules.length === 0)
|
|
96
|
+
violations.push(...(await (0, assert_1.getViolationsJSDOM)(currNode, (0, setup_1.adaptA11yConfig)(preset_rules_1.defaultRuleset))));
|
|
97
|
+
else
|
|
98
|
+
violations.push(...(await (0, assert_1.getViolationsJSDOM)(currNode, (0, setup_1.adaptA11yConfigCustomRules)(preset_rules_1.defaultRuleset, customRules))));
|
|
99
|
+
currNode = walker.nextSibling();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
83
103
|
}
|
|
84
104
|
}
|
|
85
105
|
finally {
|
|
106
|
+
if (opts.runDOMMutationObserver) {
|
|
107
|
+
mutatedNodes = [];
|
|
108
|
+
}
|
|
86
109
|
(0, exports.setOriginalDocumentBodyHtml)(null);
|
|
87
110
|
document.body.innerHTML = currentDocumentHtml;
|
|
88
111
|
if (opts.cleanupAfterEach)
|
|
@@ -97,15 +120,40 @@ async function automaticCheck(opts = defaultAutoCheckOpts) {
|
|
|
97
120
|
}
|
|
98
121
|
}
|
|
99
122
|
exports.automaticCheck = automaticCheck;
|
|
123
|
+
function observerCallback(mutations, _observer) {
|
|
124
|
+
for (const mutation of mutations) {
|
|
125
|
+
mutation.addedNodes.forEach((node) => {
|
|
126
|
+
if (node?.parentElement?.innerHTML) {
|
|
127
|
+
mutatedNodes.push(node.parentElement.innerHTML);
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// https://developer.mozilla.org/en-US/docs/Web/API/MutationObserverInit
|
|
133
|
+
const observerOptions = {
|
|
134
|
+
subtree: true,
|
|
135
|
+
childList: true,
|
|
136
|
+
attributes: true,
|
|
137
|
+
characterData: true, // monitor changes to the character data contained within nodes
|
|
138
|
+
};
|
|
100
139
|
/**
|
|
101
140
|
* Register accessibility checks to be run automatically after each test
|
|
102
141
|
* @param opts - Options for automatic checks {@link AutoCheckOpts}
|
|
103
142
|
*/
|
|
104
143
|
function registerSa11yAutomaticChecks(opts = defaultAutoCheckOpts) {
|
|
105
144
|
if (opts.runAfterEach) {
|
|
145
|
+
const observer = new MutationObserver(observerCallback);
|
|
106
146
|
// TODO (fix): Make registration idempotent
|
|
107
147
|
(0, common_1.log)('Registering sa11y checks to be run automatically after each test');
|
|
148
|
+
beforeEach(() => {
|
|
149
|
+
if (opts.runDOMMutationObserver) {
|
|
150
|
+
observer.observe(document.body, observerOptions);
|
|
151
|
+
}
|
|
152
|
+
});
|
|
108
153
|
afterEach(async () => {
|
|
154
|
+
if (opts.runDOMMutationObserver) {
|
|
155
|
+
observer.disconnect(); // stop mutation observer
|
|
156
|
+
}
|
|
109
157
|
await automaticCheck(opts);
|
|
110
158
|
});
|
|
111
159
|
}
|
package/dist/setup.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAA6C,MAAM,eAAe,CAAC;AACtF,OAAO,EACH,aAAa,EAIhB,MAAM,aAAa,CAAC;AAIrB,eAAO,MAAM,aAAa,UAiBzB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACpB,aAAa,EAAE,aAAa,CAAC;CAKhC,CAAC;
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAA6C,MAAM,eAAe,CAAC;AACtF,OAAO,EACH,aAAa,EAIhB,MAAM,aAAa,CAAC;AAIrB,eAAO,MAAM,aAAa,UAiBzB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACpB,aAAa,EAAE,aAAa,CAAC;CAKhC,CAAC;AAmCF;;;GAGG;AACH,wBAAgB,KAAK,CAAC,IAAI,GAAE,SAA4B,GAAG,IAAI,CAkD9D;AACD;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAU3C;AACD;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,UAAU,CAKhG;AACD,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,WAAgB,GAAG,UAAU,CAM3F"}
|
package/dist/setup.js
CHANGED
|
@@ -38,6 +38,7 @@ const defaultSa11yOpts = {
|
|
|
38
38
|
runAfterEach: false,
|
|
39
39
|
cleanupAfterEach: false,
|
|
40
40
|
consolidateResults: false,
|
|
41
|
+
runDOMMutationObserver: false,
|
|
41
42
|
},
|
|
42
43
|
};
|
|
43
44
|
function registerRemoveChild() {
|
|
@@ -103,6 +104,9 @@ function setup(opts = defaultSa11yOpts) {
|
|
|
103
104
|
'ui-help-components/modules/forceHelp/searchResults/__tests__/searchResults.spec.js',
|
|
104
105
|
'ui-help-components/modules/forceHelp/linkToKnownIssue/__tests__/linkToKnownIssue.spec.js',
|
|
105
106
|
]);
|
|
107
|
+
// TODO: For testing purposes, using SA11Y_CUSTOM_RULES config
|
|
108
|
+
// autoCheckOpts.runDOMMutationObserver ||= !!process.env.SA11Y_ENABLE_DOM_MUTATION_CHECKS;
|
|
109
|
+
autoCheckOpts.runDOMMutationObserver || (autoCheckOpts.runDOMMutationObserver = !!process.env.SA11Y_CUSTOM_RULES);
|
|
106
110
|
(0, automatic_1.registerSa11yAutomaticChecks)(autoCheckOpts);
|
|
107
111
|
}
|
|
108
112
|
exports.setup = setup;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sa11y/jest",
|
|
3
|
-
"version": "6.9.
|
|
3
|
+
"version": "6.9.5-alpha.2",
|
|
4
4
|
"description": "Accessibility testing matcher for Jest",
|
|
5
5
|
"license": "BSD-3-Clause",
|
|
6
6
|
"homepage": "https://github.com/salesforce/sa11y/tree/master/packages/jest#readme",
|
|
@@ -24,9 +24,9 @@
|
|
|
24
24
|
],
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@jest/test-result": "^27",
|
|
27
|
-
"@sa11y/assert": "6.9.
|
|
28
|
-
"@sa11y/format": "6.9.
|
|
29
|
-
"@sa11y/preset-rules": "6.9.
|
|
27
|
+
"@sa11y/assert": "6.9.5-alpha.2",
|
|
28
|
+
"@sa11y/format": "6.9.5-alpha.2",
|
|
29
|
+
"@sa11y/preset-rules": "6.9.5-alpha.2",
|
|
30
30
|
"jest-matcher-utils": "^27"
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
@@ -34,8 +34,8 @@
|
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@jest/globals": "28.1.3",
|
|
37
|
-
"@sa11y/common": "6.9.
|
|
38
|
-
"@sa11y/test-utils": "6.9.
|
|
37
|
+
"@sa11y/common": "6.9.5-alpha.2",
|
|
38
|
+
"@sa11y/test-utils": "6.9.5-alpha.2"
|
|
39
39
|
},
|
|
40
40
|
"publishConfig": {
|
|
41
41
|
"access": "public"
|
|
@@ -43,5 +43,5 @@
|
|
|
43
43
|
"engines": {
|
|
44
44
|
"node": "^16 || ^18 || ^20"
|
|
45
45
|
},
|
|
46
|
-
"gitHead": "
|
|
46
|
+
"gitHead": "8cc0af54a947645808f23180aeaa7a5c97259033"
|
|
47
47
|
}
|