@axe-core/cli 4.7.2-alpha.388 → 4.7.2-alpha.390

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.
Files changed (51) hide show
  1. package/dist/package.json +91 -0
  2. package/dist/src/bin/cli.d.ts +2 -0
  3. package/dist/src/bin/cli.js +39 -0
  4. package/dist/src/bin/cli.js.map +1 -0
  5. package/dist/src/bin/cli.test.d.ts +1 -0
  6. package/dist/src/bin/cli.test.js +241 -0
  7. package/dist/src/bin/cli.test.js.map +1 -0
  8. package/dist/src/bin/index.d.ts +5 -0
  9. package/dist/src/bin/index.js +120 -0
  10. package/dist/src/bin/index.js.map +1 -0
  11. package/dist/src/lib/axe-test-urls.d.ts +4 -0
  12. package/dist/src/lib/axe-test-urls.js +89 -0
  13. package/dist/src/lib/axe-test-urls.js.map +1 -0
  14. package/dist/src/lib/axe-test-urls.test.d.ts +1 -0
  15. package/dist/src/lib/axe-test-urls.test.js +73 -0
  16. package/dist/src/lib/axe-test-urls.test.js.map +1 -0
  17. package/dist/src/lib/events.d.ts +10 -0
  18. package/dist/src/lib/events.js +57 -0
  19. package/dist/src/lib/events.js.map +1 -0
  20. package/dist/src/lib/events.test.d.ts +1 -0
  21. package/dist/src/lib/events.test.js +31 -0
  22. package/dist/src/lib/events.test.js.map +1 -0
  23. package/dist/src/lib/index.d.ts +4 -0
  24. package/dist/src/lib/index.js +36 -0
  25. package/dist/src/lib/index.js.map +1 -0
  26. package/dist/src/lib/utils.d.ts +15 -0
  27. package/dist/src/lib/utils.js +120 -0
  28. package/dist/src/lib/utils.js.map +1 -0
  29. package/dist/src/lib/utils.test.d.ts +1 -0
  30. package/dist/src/lib/utils.test.js +140 -0
  31. package/dist/src/lib/utils.test.js.map +1 -0
  32. package/dist/src/lib/webdriver.d.ts +4 -0
  33. package/dist/src/lib/webdriver.js +46 -0
  34. package/dist/src/lib/webdriver.js.map +1 -0
  35. package/dist/src/lib/webdriver.test.d.ts +1 -0
  36. package/dist/src/lib/webdriver.test.js +102 -0
  37. package/dist/src/lib/webdriver.test.js.map +1 -0
  38. package/dist/src/testutils/index.d.ts +19 -0
  39. package/dist/src/testutils/index.js +51 -0
  40. package/dist/src/testutils/index.js.map +1 -0
  41. package/dist/src/types.d.ts +36 -0
  42. package/dist/src/types.js +18 -0
  43. package/dist/src/types.js.map +1 -0
  44. package/package.json +7 -17
  45. package/src/bin/cli.test.ts +3 -1
  46. package/tsconfig.json +3 -9
  47. package/dist/cli.js +0 -464
  48. package/dist/index.d.ts +0 -71
  49. package/dist/index.js +0 -229
  50. package/dist/index.mjs +0 -197
  51. package/esmTest.mjs +0 -6
@@ -0,0 +1,91 @@
1
+ {
2
+ "name": "@axe-core/cli",
3
+ "version": "4.7.2-alpha.390+0d0c9d1",
4
+ "description": "A CLI for accessibility testing using axe-core",
5
+ "author": {
6
+ "name": "Wilco Fiers",
7
+ "organization": "Deque Systems, Inc.",
8
+ "url": "http://github.com/wilcofiers/"
9
+ },
10
+ "contributors": [
11
+ {
12
+ "name": "Michael Siek (me@michaelsiek.com)"
13
+ }
14
+ ],
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "https://github.com/dequelabs/axe-core-npm.git"
18
+ },
19
+ "license": "MPL-2.0",
20
+ "main": "dist/src/lib/index.js",
21
+ "typings": "dist/src/types.d.ts",
22
+ "bin": {
23
+ "axe": "./dist/src/bin/cli.js"
24
+ },
25
+ "publishConfig": {
26
+ "access": "public"
27
+ },
28
+ "engines": {
29
+ "node": ">=8"
30
+ },
31
+ "scripts": {
32
+ "prebuild": "rimraf dist",
33
+ "build": "tsc",
34
+ "test": "mocha --timeout 60000 -r ts-node/register 'src/**/**.test.ts'",
35
+ "coverage": "nyc npm run test",
36
+ "prepare": "npm run build"
37
+ },
38
+ "keywords": [
39
+ "axe-core",
40
+ "accessibility",
41
+ "a11y",
42
+ "wcag",
43
+ "cli",
44
+ "testing"
45
+ ],
46
+ "dependencies": {
47
+ "@axe-core/webdriverjs": "4.7.2-alpha.390+0d0c9d1",
48
+ "axe-core": "^4.7.0",
49
+ "chromedriver": "^112.0.0",
50
+ "colors": "^1.4.0",
51
+ "commander": "^9.4.1",
52
+ "selenium-webdriver": "^4.8.1"
53
+ },
54
+ "devDependencies": {
55
+ "@types/chai": "^4.3.3",
56
+ "@types/chromedriver": "^81.0.1",
57
+ "@types/mocha": "^10.0.0",
58
+ "@types/mock-fs": "^4.13.1",
59
+ "@types/selenium-webdriver": "^4.1.5",
60
+ "chai": "^4.3.6",
61
+ "execa": "5.1.0",
62
+ "mocha": "^10.0.0",
63
+ "mock-fs": "^5.1.4",
64
+ "nyc": "^15.1.0",
65
+ "rimraf": "^3.0.2",
66
+ "tempy": "1.0.0",
67
+ "ts-node": "^10.9.1",
68
+ "typescript": "^4.8.4"
69
+ },
70
+ "nyc": {
71
+ "checkCoverage": true,
72
+ "extension": [
73
+ ".ts"
74
+ ],
75
+ "reporter": [
76
+ "text-summary",
77
+ "html"
78
+ ],
79
+ "statements": 95,
80
+ "branches": 92,
81
+ "functions": 94,
82
+ "lines": 95,
83
+ "exclude": [
84
+ "dist",
85
+ "coverage",
86
+ "**/*.test.ts",
87
+ "src/testutils"
88
+ ]
89
+ },
90
+ "gitHead": "0d0c9d1b75051b26f0bb745abc5c8974a9fa4d54"
91
+ }
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const commander_1 = require("commander");
8
+ const package_json_1 = require("../../package.json");
9
+ const utils_1 = require("../lib/utils");
10
+ const _1 = __importDefault(require("."));
11
+ const program = new commander_1.Command();
12
+ program
13
+ .version(package_json_1.version)
14
+ .usage('<url...> [options]')
15
+ .option('-i, --include <list>', 'CSS selector of included elements, comma separated', utils_1.splitList)
16
+ .option('-e, --exclude <list>', 'CSS selector of excluded elements, comma separated', utils_1.splitList)
17
+ .option('-r, --rules <list>', 'IDs of rules to run, comma separated', utils_1.splitList)
18
+ .option('-t, --tags <list>', 'Tags of rules to run, comma separated', utils_1.splitList)
19
+ .option('-l, --disable <list>', 'IDs of rules to disable, comma separated', utils_1.splitList)
20
+ .option('-b, --browser [browser-name]', 'Which browser to run (Webdriver required)')
21
+ .option('-s, --save [filename]', 'Save the output as a JSON file. Filename is optional')
22
+ .option('-j, --stdout', 'Output results to STDOUT and silence all other output')
23
+ .option('-d, --dir <path>', 'Output directory')
24
+ .option('-a, --axe-source <path>', 'Path to axe.js file')
25
+ .option('-q, --exit', 'Exit with `1` failure code if any a11y tests fail')
26
+ .option('-v, --verbose', 'Output metadata like test tool name, version and environment')
27
+ .option('--load-delay <n>', 'Set how much time (milliseconds) axe will wait after page load before running the audit (default: 0)')
28
+ .option('--timeout <n>', 'Set how much time (seconds) axe has to run',
29
+ // @ts-ignore
30
+ 90)
31
+ .option('--timer', 'Log the time it takes to run')
32
+ .option('--show-errors [boolean]', 'Display the full error stack', true)
33
+ // TODO: Replace this with a reporter option, this required adding
34
+ .option('--no-reporter', 'Turn the CLI reporter off')
35
+ .option('--chrome-options [options]', 'Options to provide to headless Chrome', utils_1.splitList)
36
+ .option('--chromedriver-path <path>', 'Absolute path to the desired chromedriver executable')
37
+ .action(_1.default);
38
+ program.parse(process.argv);
39
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/bin/cli.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,qDAA6C;AAC7C,wCAAyC;AACzC,yCAAoB;AAEpB,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,OAAO,CAAC,sBAAO,CAAC;KAChB,KAAK,CAAC,oBAAoB,CAAC;KAC3B,MAAM,CACL,sBAAsB,EACtB,oDAAoD,EACpD,iBAAS,CACV;KACA,MAAM,CACL,sBAAsB,EACtB,oDAAoD,EACpD,iBAAS,CACV;KACA,MAAM,CACL,oBAAoB,EACpB,sCAAsC,EACtC,iBAAS,CACV;KACA,MAAM,CACL,mBAAmB,EACnB,uCAAuC,EACvC,iBAAS,CACV;KACA,MAAM,CACL,sBAAsB,EACtB,0CAA0C,EAC1C,iBAAS,CACV;KACA,MAAM,CACL,8BAA8B,EAC9B,2CAA2C,CAC5C;KACA,MAAM,CACL,uBAAuB,EACvB,sDAAsD,CACvD;KACA,MAAM,CACL,cAAc,EACd,uDAAuD,CACxD;KACA,MAAM,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;KAC9C,MAAM,CAAC,yBAAyB,EAAE,qBAAqB,CAAC;KACxD,MAAM,CAAC,YAAY,EAAE,mDAAmD,CAAC;KACzE,MAAM,CACL,eAAe,EACf,8DAA8D,CAC/D;KACA,MAAM,CACL,kBAAkB,EAClB,sGAAsG,CACvG;KACA,MAAM,CACL,eAAe,EACf,4CAA4C;AAC5C,aAAa;AACb,EAAE,CACH;KACA,MAAM,CAAC,SAAS,EAAE,8BAA8B,CAAC;KACjD,MAAM,CAAC,yBAAyB,EAAE,8BAA8B,EAAE,IAAI,CAAC;IACxE,kEAAkE;KACjE,MAAM,CAAC,eAAe,EAAE,2BAA2B,CAAC;KACpD,MAAM,CACL,4BAA4B,EAC5B,uCAAuC,EACvC,iBAAS,CACV;KACA,MAAM,CACL,4BAA4B,EAC5B,sDAAsD,CACvD;KACA,MAAM,CAAC,UAAG,CAAC,CAAC;AAEf,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ import 'mocha';
@@ -0,0 +1,241 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ require("mocha");
16
+ const chai_1 = require("chai");
17
+ const tempy_1 = __importDefault(require("tempy"));
18
+ const http_1 = __importDefault(require("http"));
19
+ const path_1 = __importDefault(require("path"));
20
+ const fs_1 = __importDefault(require("fs"));
21
+ const package_json_1 = require("../../package.json");
22
+ const testutils_1 = __importDefault(require("../testutils/"));
23
+ const SIMPLE_HTML_FILE = path_1.default.join(__dirname, '..', 'testutils', 'simple.html');
24
+ const SIMPLE_HTML_SOURCE = fs_1.default.readFileSync(SIMPLE_HTML_FILE, 'utf8');
25
+ const PATH_TO_AXE_250 = path_1.default.resolve(__dirname, '..', 'testutils', 'axe-core@2.5.0.js');
26
+ describe('cli', () => {
27
+ it('--help', () => __awaiter(void 0, void 0, void 0, function* () {
28
+ const result = yield (0, testutils_1.default)('--help');
29
+ chai_1.assert.equal(result.exitCode, 0);
30
+ chai_1.assert.include(result.stdout, 'Options:');
31
+ }));
32
+ it('--version', () => __awaiter(void 0, void 0, void 0, function* () {
33
+ const result = yield (0, testutils_1.default)('--version');
34
+ chai_1.assert.equal(result.exitCode, 0);
35
+ chai_1.assert.deepEqual(result.stdout, package_json_1.version);
36
+ }));
37
+ describe('given a file:// url', () => {
38
+ it('should run an analysis', () => __awaiter(void 0, void 0, void 0, function* () {
39
+ const result = yield (0, testutils_1.default)(`file://${SIMPLE_HTML_FILE}`);
40
+ chai_1.assert.equal(result.exitCode, 0);
41
+ chai_1.assert.include(result.stdout, 'Violation of "marquee" with 1 occurrences!');
42
+ }));
43
+ });
44
+ describe('given a http:// url', () => {
45
+ let port;
46
+ let server;
47
+ before(done => {
48
+ server = http_1.default.createServer((req, res) => {
49
+ res.setHeader('Content-Type', 'text/html');
50
+ res.write(SIMPLE_HTML_SOURCE);
51
+ res.end();
52
+ });
53
+ server.listen(0, () => {
54
+ port = server.address().port;
55
+ done();
56
+ });
57
+ });
58
+ after(done => server.close(done));
59
+ it('should run an analysis', () => __awaiter(void 0, void 0, void 0, function* () {
60
+ const result = yield (0, testutils_1.default)(`http://127.0.0.1:${port}/`);
61
+ chai_1.assert.equal(result.exitCode, 0);
62
+ chai_1.assert.include(result.stdout, 'Violation of "marquee" with 1 occurrences!');
63
+ }));
64
+ });
65
+ describe('--axe-source', () => {
66
+ it('should use the provided version of axe-core', () => __awaiter(void 0, void 0, void 0, function* () {
67
+ const result = yield (0, testutils_1.default)(`file://${SIMPLE_HTML_FILE}`, '--axe-source', PATH_TO_AXE_250);
68
+ chai_1.assert.equal(result.exitCode, 0);
69
+ chai_1.assert.include(result.stdout, 'Violation of "marquee" with 1 occurrences!');
70
+ chai_1.assert.include(result.stdout, 'Running axe-core 2.5.0');
71
+ }));
72
+ it('error when given invalid axe source path', () => __awaiter(void 0, void 0, void 0, function* () {
73
+ const result = yield (0, testutils_1.default)(`file://${SIMPLE_HTML_FILE}`, '--axe-source', 'foobar');
74
+ chai_1.assert.equal(result.exitCode, 2);
75
+ chai_1.assert.include(result.stderr, 'Unable to find the axe-core source file');
76
+ }));
77
+ });
78
+ // cannot run in ci we _should_ have the ability to add arguments to firefox not just chrome to allow users to run this headless
79
+ describe.skip('--browser', () => {
80
+ it('should change the browser', () => __awaiter(void 0, void 0, void 0, function* () {
81
+ const result = yield (0, testutils_1.default)(`file://${SIMPLE_HTML_FILE}`, '--browser', 'firefox', '--verbose');
82
+ chai_1.assert.equal(result.exitCode, 0);
83
+ chai_1.assert.include(result.stdout, 'Firefox');
84
+ }));
85
+ });
86
+ describe('--rules', () => {
87
+ it('should only run the rules with the provided IDs', () => __awaiter(void 0, void 0, void 0, function* () {
88
+ const result = yield (0, testutils_1.default)(`file://${SIMPLE_HTML_FILE}`, '--rules', 'region');
89
+ chai_1.assert.equal(result.exitCode, 0);
90
+ chai_1.assert.include(result.stdout, 'Violation of "region" with');
91
+ }));
92
+ });
93
+ describe('--tags', () => {
94
+ it('should only run rules with the provided tags', () => __awaiter(void 0, void 0, void 0, function* () {
95
+ const result = yield (0, testutils_1.default)(`file://${SIMPLE_HTML_FILE}`, '--tags', 'cat.parsing,wcag222');
96
+ chai_1.assert.equal(result.exitCode, 0);
97
+ // Region is tagged with "cat.keyboard", "best-practice"
98
+ chai_1.assert.notInclude(result.stdout, 'Violation of "region" with');
99
+ }));
100
+ });
101
+ describe('--exit', () => {
102
+ it('should exit non-zero if violations are found', () => __awaiter(void 0, void 0, void 0, function* () {
103
+ try {
104
+ yield (0, testutils_1.default)(`file://${SIMPLE_HTML_FILE}`, '--exit');
105
+ }
106
+ catch (error) {
107
+ chai_1.assert.equal(error.exitCode, 1);
108
+ chai_1.assert.include(error.stdout, 'Violation of "marquee" with 1 occurrences!');
109
+ }
110
+ }));
111
+ });
112
+ describe('--dir', () => {
113
+ let reportDir;
114
+ beforeEach(() => {
115
+ reportDir = tempy_1.default.directory();
116
+ });
117
+ it('should save a JSON report to the provided directory', () => __awaiter(void 0, void 0, void 0, function* () {
118
+ const result = yield (0, testutils_1.default)(`file://${SIMPLE_HTML_FILE}`, '--dir', reportDir);
119
+ chai_1.assert.equal(result.exitCode, 0);
120
+ const files = fs_1.default.readdirSync(reportDir);
121
+ const report = files.find(f => f.endsWith('.json'));
122
+ (0, chai_1.assert)(report, 'Did not create JSON report');
123
+ }));
124
+ });
125
+ describe('--include', () => {
126
+ it('should set a list of elements to include', () => __awaiter(void 0, void 0, void 0, function* () {
127
+ const result = yield (0, testutils_1.default)(`file://${SIMPLE_HTML_FILE}`, '--include', 'marquee');
128
+ chai_1.assert.notInclude(result.stdout, 'Violation of "region"');
129
+ chai_1.assert.include(result.stdout, 'Violation of "marquee" with 1 occurrences!');
130
+ }));
131
+ it('should throw error if CSS selector is not found', () => __awaiter(void 0, void 0, void 0, function* () {
132
+ const result = yield (0, testutils_1.default)(`file://${SIMPLE_HTML_FILE}`, '--include', '#hazaar', '--show-errors');
133
+ chai_1.assert.include(result.stderr, 'javascript error: No elements found for include in page Context');
134
+ chai_1.assert.equal(result.exitCode, 1);
135
+ }));
136
+ it('should throw error if invalid selector is provided', () => __awaiter(void 0, void 0, void 0, function* () {
137
+ const result = yield (0, testutils_1.default)(`file://${SIMPLE_HTML_FILE}`, '--include', '#123', '--show-errors');
138
+ chai_1.assert.include(result.stderr, 'is not a valid selector');
139
+ chai_1.assert.equal(result.exitCode, 1);
140
+ }));
141
+ });
142
+ describe('--exclude', () => {
143
+ it('should set a list of elements to exclude', () => __awaiter(void 0, void 0, void 0, function* () {
144
+ const result = yield (0, testutils_1.default)(`file://${SIMPLE_HTML_FILE}`, '--exclude', 'marquee');
145
+ chai_1.assert.notInclude(result.stdout, 'Violation of "marquee" with 1 occurrences!');
146
+ }));
147
+ it('should throw error if invalid selector is provided', () => __awaiter(void 0, void 0, void 0, function* () {
148
+ const result = yield (0, testutils_1.default)(`file://${SIMPLE_HTML_FILE}`, '--exclude', '#123', '--show-errors');
149
+ chai_1.assert.include(result.stderr, 'is not a valid selector');
150
+ chai_1.assert.equal(result.exitCode, 1);
151
+ }));
152
+ });
153
+ describe('--disable', () => {
154
+ it('should not run rules with the provided IDs', () => __awaiter(void 0, void 0, void 0, function* () {
155
+ const result = yield (0, testutils_1.default)(`file://${SIMPLE_HTML_FILE}`, '--disable', 'region');
156
+ chai_1.assert.notInclude(result.stdout, 'Violation of "region" with');
157
+ }));
158
+ });
159
+ describe('--stdout', () => {
160
+ it('should only emit JSON to stdout', () => __awaiter(void 0, void 0, void 0, function* () {
161
+ const result = yield (0, testutils_1.default)(`file://${SIMPLE_HTML_FILE}`, '--stdout');
162
+ chai_1.assert.equal(result.exitCode, 0);
163
+ chai_1.assert.doesNotThrow(() => JSON.parse(result.stdout), 'Emitted invalid JSON');
164
+ }));
165
+ });
166
+ describe('--timer', () => {
167
+ it('should log the time it takes to run', () => __awaiter(void 0, void 0, void 0, function* () {
168
+ const result = yield (0, testutils_1.default)(`file://${SIMPLE_HTML_FILE}`, '--timer');
169
+ chai_1.assert.equal(result.exitCode, 0);
170
+ chai_1.assert.isEmpty(result.stderr);
171
+ chai_1.assert.include(result.stdout, 'axe-core execution time');
172
+ chai_1.assert.include(result.stdout, 'Total test time');
173
+ }));
174
+ });
175
+ describe('--no-reporter', () => {
176
+ it('should log the time it takes to run', () => __awaiter(void 0, void 0, void 0, function* () {
177
+ const result = yield (0, testutils_1.default)(`file://${SIMPLE_HTML_FILE}`, '--no-reporter');
178
+ chai_1.assert.equal(result.exitCode, 0);
179
+ chai_1.assert.notInclude(result.stdout, 'Violation of "marquee" with 1 occurrences!');
180
+ }));
181
+ });
182
+ describe('--show-errors', () => {
183
+ it('should log the time it takes to run defaults to show errors', () => __awaiter(void 0, void 0, void 0, function* () {
184
+ const result = yield (0, testutils_1.default)(`file://${SIMPLE_HTML_FILE}`, '--include', '#hazaar');
185
+ chai_1.assert.equal(result.exitCode, 1);
186
+ chai_1.assert.include(result.stderr, 'Error: JavascriptError: javascript error:');
187
+ }));
188
+ it('do not show errors when passed false', () => __awaiter(void 0, void 0, void 0, function* () {
189
+ const result = yield (0, testutils_1.default)(`file://${SIMPLE_HTML_FILE}`, '--include', '#hazaar', '--show-errors', 'false');
190
+ chai_1.assert.equal(result.exitCode, 1);
191
+ chai_1.assert.include(result.stderr, 'An error occurred while testing this page.');
192
+ }));
193
+ });
194
+ describe('--save', () => {
195
+ let reportDir;
196
+ beforeEach(() => {
197
+ reportDir = tempy_1.default.directory();
198
+ });
199
+ it('should save the output as a JSON file', () => __awaiter(void 0, void 0, void 0, function* () {
200
+ const result = yield (0, testutils_1.default)(`file://${SIMPLE_HTML_FILE}`, '--save', 'test-name.json', '--dir', reportDir);
201
+ const [report] = fs_1.default.readdirSync(reportDir);
202
+ chai_1.assert.equal(result.exitCode, 0);
203
+ chai_1.assert.equal(report, 'test-name.json');
204
+ }));
205
+ });
206
+ describe('--load-delay', () => {
207
+ it('should set how much time axe will wait after a page loads before running the audit', () => __awaiter(void 0, void 0, void 0, function* () {
208
+ const result = yield (0, testutils_1.default)(`file://${SIMPLE_HTML_FILE}`, '--load-delay', '1000');
209
+ chai_1.assert.equal(result.exitCode, 0);
210
+ chai_1.assert.include(result.stdout, 'Waiting for 1000 milliseconds after page load');
211
+ }));
212
+ });
213
+ describe('--verbose', () => {
214
+ it('should output metadata such as test tool name, version and environment', () => __awaiter(void 0, void 0, void 0, function* () {
215
+ const result = yield (0, testutils_1.default)(`file://${SIMPLE_HTML_FILE}`, '--verbose');
216
+ chai_1.assert.equal(result.exitCode, 0);
217
+ chai_1.assert.include(result.stdout, 'Test Runner');
218
+ chai_1.assert.include(result.stdout, 'Test Engine');
219
+ chai_1.assert.include(result.stdout, 'Test Environment');
220
+ }));
221
+ });
222
+ describe('--timeout', () => {
223
+ // Timeout the page immediately. Ideally we'd block the page for awhile, then timeout based on that. This seemed easier for now tho.
224
+ it('should set the page load timeout', () => __awaiter(void 0, void 0, void 0, function* () {
225
+ try {
226
+ yield (0, testutils_1.default)(`file://${SIMPLE_HTML_FILE}`, '--timeout', '0');
227
+ }
228
+ catch (error) {
229
+ chai_1.assert.notEqual(error.exitCode, 0);
230
+ chai_1.assert.include(error.stderr, 'An error occurred while testing this page.');
231
+ }
232
+ }));
233
+ });
234
+ describe('--chromedriver-path', () => {
235
+ it('should throw error if path does not exist', () => __awaiter(void 0, void 0, void 0, function* () {
236
+ const result = yield (0, testutils_1.default)(`file://${SIMPLE_HTML_FILE}`, '--chromedriver-path="someinvalidpath"', '--show-errors');
237
+ chai_1.assert.include(result.stderr, 'The specified executable path does not exist');
238
+ }));
239
+ });
240
+ });
241
+ //# sourceMappingURL=cli.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../../../src/bin/cli.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { OptionValues } from 'commander';
2
+ declare const cli: (args: OptionValues, url: {
3
+ args: string[];
4
+ }) => Promise<void>;
5
+ export default cli;
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const colors_1 = __importDefault(require("colors"));
16
+ const utils_1 = require("../lib/utils");
17
+ const axe_test_urls_1 = __importDefault(require("../lib/axe-test-urls"));
18
+ const events_1 = __importDefault(require("../lib/events"));
19
+ const webdriver_1 = require("../lib/webdriver");
20
+ const cli = (args, url) => __awaiter(void 0, void 0, void 0, function* () {
21
+ const { save, stdout, dir, exit, timer, reporter: noReporter, chromeOptions, verbose, timeout, include, exclude, tags, rules, disable, loadDelay, chromedriverPath } = args;
22
+ const showErrors = args.showErrors === true;
23
+ const silentMode = !!stdout;
24
+ args.axeSource = (0, utils_1.getAxeSource)(args.axeSource);
25
+ if (!args.axeSource) {
26
+ console.error((0, utils_1.error)('Unable to find the axe-core source file'));
27
+ process.exit(2);
28
+ }
29
+ args.browser = (0, utils_1.parseBrowser)(args.browser);
30
+ /* istanbul ignore if */
31
+ if (chromeOptions) {
32
+ /* istanbul ignore if */
33
+ if (args.browser !== 'chrome-headless') {
34
+ console.error((0, utils_1.error)('You may only provide --chrome-options when using headless chrome'));
35
+ process.exit(2);
36
+ }
37
+ }
38
+ const driverConfigs = {
39
+ browser: args.browser,
40
+ timeout,
41
+ chromeOptions,
42
+ chromedriverPath
43
+ };
44
+ args.driver = (0, webdriver_1.startDriver)(driverConfigs);
45
+ const cliReporter = (0, utils_1.reporter)(noReporter, silentMode);
46
+ const axeVersion = (0, utils_1.getAxeVersion)(args.axeSource);
47
+ if (!silentMode) {
48
+ console.log(colors_1.default.bold('Running axe-core ' + axeVersion + ' in ' + args.browser));
49
+ }
50
+ const urls = url.args.map(utils_1.parseUrl);
51
+ /* istanbul ignore if */
52
+ if (urls.length === 0) {
53
+ console.error((0, utils_1.error)('No url was specified. Check `axe --help` for help\n'));
54
+ }
55
+ const events = (0, events_1.default)({
56
+ silentMode,
57
+ timer,
58
+ cliReporter,
59
+ verbose,
60
+ exit
61
+ });
62
+ const testPageConfigParams = {
63
+ driver: args.driver,
64
+ timer,
65
+ loadDelay,
66
+ axeSource: args.axeSource,
67
+ include,
68
+ exclude,
69
+ tags,
70
+ rules,
71
+ disable
72
+ };
73
+ try {
74
+ const outcome = yield (0, axe_test_urls_1.default)(urls, testPageConfigParams, events);
75
+ if (silentMode) {
76
+ process.stdout.write(JSON.stringify(outcome, null, 2));
77
+ return;
78
+ }
79
+ if (timer) {
80
+ console.timeEnd('Total test time');
81
+ }
82
+ /* istanbul ignore if */
83
+ if (Array.isArray(outcome)) {
84
+ console.log((0, utils_1.bold)('Testing complete of %d pages\n'), outcome.length);
85
+ }
86
+ if (save || dir) {
87
+ try {
88
+ const fileName = (0, utils_1.saveOutcome)(outcome, save, dir);
89
+ console.log('Saved file at', fileName, '\n');
90
+ }
91
+ catch (e) {
92
+ /* istanbul ignore next */
93
+ console.error((0, utils_1.error)('Unable to save file!\n') + e);
94
+ process.exit(1);
95
+ }
96
+ }
97
+ /* istanbul ignore if */
98
+ if (silentMode) {
99
+ return;
100
+ }
101
+ console.log((0, utils_1.italics)('Please note that only 20% to 50% of all accessibility ' +
102
+ 'issues can automatically be detected. \nManual testing is ' +
103
+ 'always required. For more information see:\n%s\n'), (0, utils_1.link)('https://dequeuniversity.com/curriculum/courses/testingmethods'));
104
+ }
105
+ catch (e) {
106
+ /* istanbul ignore else */
107
+ if (!showErrors) {
108
+ console.error((0, utils_1.error)('An error occurred while testing this page.'));
109
+ }
110
+ else {
111
+ console.error((0, utils_1.error)('Error: %s'), e);
112
+ }
113
+ console.error('Please report the problem to: ' +
114
+ (0, utils_1.link)('https://github.com/dequelabs/axe-core-npm/issues/') +
115
+ '\n');
116
+ process.exit(1);
117
+ }
118
+ });
119
+ exports.default = cli;
120
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/bin/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { AxeResults } from 'axe-core';
2
+ import { EventResponse, ConfigParams } from '../types';
3
+ declare const testPages: (urls: string | string[], config: ConfigParams, events?: EventResponse) => Promise<AxeResults[] | AxeResults>;
4
+ export default testPages;
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const webdriverjs_1 = __importDefault(require("@axe-core/webdriverjs"));
16
+ const testPages = (urls, config, events) => __awaiter(void 0, void 0, void 0, function* () {
17
+ const driver = yield config.driver;
18
+ if (urls.length === 0) {
19
+ yield driver.quit();
20
+ return Promise.resolve([]);
21
+ }
22
+ return new Promise((resolve, reject) => {
23
+ const currentUrl = urls[0].replace(/[,;]$/, '');
24
+ if (events === null || events === void 0 ? void 0 : events.onTestStart) {
25
+ events === null || events === void 0 ? void 0 : events.onTestStart(currentUrl);
26
+ }
27
+ if (config.timer) {
28
+ events === null || events === void 0 ? void 0 : events.startTimer('axe page load time');
29
+ }
30
+ driver
31
+ .get(currentUrl)
32
+ .then(() => {
33
+ if (config.timer) {
34
+ events === null || events === void 0 ? void 0 : events.endTimer('axe page load time');
35
+ }
36
+ if (config.loadDelay) {
37
+ events === null || events === void 0 ? void 0 : events.waitingMessage(config.loadDelay);
38
+ }
39
+ return new Promise(resolve => {
40
+ setTimeout(resolve, config.loadDelay);
41
+ });
42
+ })
43
+ .then(() => {
44
+ const axe = new webdriverjs_1.default(driver, config.axeSource);
45
+ if (Array.isArray(config.include)) {
46
+ config.include.forEach((include) => axe.include(include));
47
+ }
48
+ if (Array.isArray(config.exclude)) {
49
+ config.exclude.forEach((exclude) => axe.exclude(exclude));
50
+ }
51
+ if (config.tags) {
52
+ axe.withTags(config.tags);
53
+ }
54
+ else if (config.rules) {
55
+ axe.withRules(config.rules);
56
+ }
57
+ /* istanbul ignore if */
58
+ if (config.disable) {
59
+ axe.disableRules(config.disable);
60
+ }
61
+ if (config.timer) {
62
+ events === null || events === void 0 ? void 0 : events.startTimer('axe-core execution time');
63
+ }
64
+ axe.analyze((err, results) => {
65
+ if (config.timer) {
66
+ events === null || events === void 0 ? void 0 : events.endTimer('axe-core execution time');
67
+ }
68
+ /* istanbul ignore if */
69
+ if (err) {
70
+ return reject(err);
71
+ }
72
+ // Notify about the update
73
+ if (events === null || events === void 0 ? void 0 : events.onTestComplete) {
74
+ events === null || events === void 0 ? void 0 : events.onTestComplete(results);
75
+ }
76
+ // Move to the next item
77
+ testPages(urls.slice(1), config, events).then((out) => {
78
+ resolve([results].concat(out));
79
+ });
80
+ });
81
+ })
82
+ .catch((e) => __awaiter(void 0, void 0, void 0, function* () {
83
+ yield driver.quit();
84
+ reject(e);
85
+ }));
86
+ });
87
+ });
88
+ exports.default = testPages;
89
+ //# sourceMappingURL=axe-test-urls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axe-test-urls.js","sourceRoot":"","sources":["../../../src/lib/axe-test-urls.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ import 'mocha';