From c602962cf44d70847979689fb12be632cf2c3187 Mon Sep 17 00:00:00 2001 From: Jean-Yves Moyen Date: Wed, 20 Nov 2024 14:15:53 +0100 Subject: [PATCH] Add ARIA and Best Practices filters --- .changeset/twelve-pots-happen.md | 5 +++++ packages/alfa-test-utils/src/audit/rules.ts | 14 +++++++++++++- .../audit/{fixtures.spec.tsx => fixtures.tsx} | 18 +++++++++++++++++- .../test/audit/outcomes.spec.tsx | 2 +- .../alfa-test-utils/test/audit/rules.spec.tsx | 12 +++++++++++- packages/alfa-test-utils/test/tsconfig.json | 2 +- 6 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 .changeset/twelve-pots-happen.md rename packages/alfa-test-utils/test/audit/{fixtures.spec.tsx => fixtures.tsx} (88%) diff --git a/.changeset/twelve-pots-happen.md b/.changeset/twelve-pots-happen.md new file mode 100644 index 00000000..29dce046 --- /dev/null +++ b/.changeset/twelve-pots-happen.md @@ -0,0 +1,5 @@ +--- +"@siteimprove/alfa-test-utils": minor +--- + +**Added:** A `Rules.ARIAFilter` and `Rules.bestPracticesFilter` are now available. diff --git a/packages/alfa-test-utils/src/audit/rules.ts b/packages/alfa-test-utils/src/audit/rules.ts index 21880362..ce714c29 100644 --- a/packages/alfa-test-utils/src/audit/rules.ts +++ b/packages/alfa-test-utils/src/audit/rules.ts @@ -1,7 +1,7 @@ import { Iterable } from "@siteimprove/alfa-iterable"; import type { Predicate } from "@siteimprove/alfa-predicate"; import { Refinement } from "@siteimprove/alfa-refinement"; -import rules, { Scope } from "@siteimprove/alfa-rules"; +import rules, { ARIA, BestPractice, Scope } from "@siteimprove/alfa-rules"; import type { Flattened } from "@siteimprove/alfa-rules"; import { Conformance, Criterion } from "@siteimprove/alfa-wcag"; @@ -53,6 +53,18 @@ export namespace Rules { export const wcag21aaFilter: Predicate = (rule) => rule.hasRequirement(and(Criterion.isCriterion, Conformance.isAA("2.1"))); + /** + * Filter matching the rules that check for ARIA conformance + */ + export const ARIAFilter: Predicate = (rule) => + rule.hasRequirement(ARIA.isARIA); + + /** + * Filter matching Best Practice rules. + */ + export const bestPracticesFilter: Predicate = (rule) => + rule.hasRequirement(BestPractice.isBestPractice); + /** * Filter matching the "component" rules. * diff --git a/packages/alfa-test-utils/test/audit/fixtures.spec.tsx b/packages/alfa-test-utils/test/audit/fixtures.tsx similarity index 88% rename from packages/alfa-test-utils/test/audit/fixtures.spec.tsx rename to packages/alfa-test-utils/test/audit/fixtures.tsx index 440533ac..143bd9e6 100644 --- a/packages/alfa-test-utils/test/audit/fixtures.spec.tsx +++ b/packages/alfa-test-utils/test/audit/fixtures.tsx @@ -1,4 +1,4 @@ -import { Scope } from "@siteimprove/alfa-rules"; +import { ARIA, BestPractice, Scope } from "@siteimprove/alfa-rules"; import { Criterion } from "@siteimprove/alfa-wcag"; import { makeRule } from "../fixtures.js"; @@ -133,6 +133,20 @@ export const rule18 = makeRule( export const rule19 = makeRule(1019, , [], [Scope.Page]); export const rule20 = makeRule(1020, , [], [Scope.Component]); +// ARIA and Best Practices +export const rule21 = makeRule( + 1021, + , + [ARIA.of("some URL")], + [Scope.Page] +); +export const rule22 = makeRule( + 1022, + , + [BestPractice.of("some other URL")], + [Scope.Page] +); + export const rules = [ rule1, rule2, @@ -154,4 +168,6 @@ export const rules = [ rule18, rule19, rule20, + rule21, + rule22, ]; diff --git a/packages/alfa-test-utils/test/audit/outcomes.spec.tsx b/packages/alfa-test-utils/test/audit/outcomes.spec.tsx index 3fd74264..9e857db1 100644 --- a/packages/alfa-test-utils/test/audit/outcomes.spec.tsx +++ b/packages/alfa-test-utils/test/audit/outcomes.spec.tsx @@ -2,7 +2,7 @@ import { h } from "@siteimprove/alfa-dom"; import { test } from "@siteimprove/alfa-test"; import { Outcomes } from "../../dist/index.js"; import { makeFailed, makeRule } from "../fixtures.js"; -import { rule1, rule2 } from "./fixtures.spec.js"; +import { rule1, rule2 } from "./fixtures.js"; const foo = foo; const id = foo.attribute("id").getUnsafe(); diff --git a/packages/alfa-test-utils/test/audit/rules.spec.tsx b/packages/alfa-test-utils/test/audit/rules.spec.tsx index 2c9e5800..47a95b91 100644 --- a/packages/alfa-test-utils/test/audit/rules.spec.tsx +++ b/packages/alfa-test-utils/test/audit/rules.spec.tsx @@ -21,7 +21,9 @@ import { rule16, rule18, rule20, -} from "./fixtures.spec.js"; + rule21, + rule22, +} from "./fixtures.js"; test(".aaFilter keeps the A+AA 2.0, 2.1 and 2.2 rules", (t) => { t.deepEqual(rules.filter(Rules.aaFilter), [ @@ -96,3 +98,11 @@ test(".cherryPickFilter selects individual rules", (t) => { [rule10, rule12, rule14, rule16, rule18] ); }); + +test(".ARIAFilter selects ARIA rules", (t) => { + t.deepEqual(rules.filter(Rules.ARIAFilter), [rule21]); +}); + +test(".bestPracticesFilter selects Best Practices rules", (t) => { + t.deepEqual(rules.filter(Rules.bestPracticesFilter), [rule22]); +}); diff --git a/packages/alfa-test-utils/test/tsconfig.json b/packages/alfa-test-utils/test/tsconfig.json index 27db72ee..8ed13f79 100644 --- a/packages/alfa-test-utils/test/tsconfig.json +++ b/packages/alfa-test-utils/test/tsconfig.json @@ -8,7 +8,7 @@ }, "files": [ "./audit/audit.spec.tsx", - "./audit/fixtures.spec.tsx", + "./audit/fixtures.tsx", "./audit/outcomes.spec.tsx", "./audit/rules.spec.tsx", "./fixtures.tsx",