@axe-core/cli 4.7.3 → 4.7.4-2456ed6.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.
Files changed (55) hide show
  1. package/CHANGELOG.md +11 -45
  2. package/package.json +8 -11
  3. package/src/bin/cli.test.ts +32 -1
  4. package/src/bin/cli.ts +4 -0
  5. package/src/bin/index.ts +53 -3
  6. package/src/lib/events.ts +1 -11
  7. package/src/lib/utils.test.ts +45 -15
  8. package/src/lib/utils.ts +21 -17
  9. package/src/lib/webdriver.ts +6 -1
  10. package/src/testutils/axe-core@2.5.0.js +54 -66
  11. package/src/testutils/simple-clean.html +11 -0
  12. package/src/types.ts +2 -1
  13. package/dist/package.json +0 -91
  14. package/dist/src/bin/cli.d.ts +0 -2
  15. package/dist/src/bin/cli.js +0 -39
  16. package/dist/src/bin/cli.js.map +0 -1
  17. package/dist/src/bin/cli.test.d.ts +0 -1
  18. package/dist/src/bin/cli.test.js +0 -241
  19. package/dist/src/bin/cli.test.js.map +0 -1
  20. package/dist/src/bin/index.d.ts +0 -5
  21. package/dist/src/bin/index.js +0 -120
  22. package/dist/src/bin/index.js.map +0 -1
  23. package/dist/src/lib/axe-test-urls.d.ts +0 -4
  24. package/dist/src/lib/axe-test-urls.js +0 -89
  25. package/dist/src/lib/axe-test-urls.js.map +0 -1
  26. package/dist/src/lib/axe-test-urls.test.d.ts +0 -1
  27. package/dist/src/lib/axe-test-urls.test.js +0 -73
  28. package/dist/src/lib/axe-test-urls.test.js.map +0 -1
  29. package/dist/src/lib/events.d.ts +0 -10
  30. package/dist/src/lib/events.js +0 -57
  31. package/dist/src/lib/events.js.map +0 -1
  32. package/dist/src/lib/events.test.d.ts +0 -1
  33. package/dist/src/lib/events.test.js +0 -31
  34. package/dist/src/lib/events.test.js.map +0 -1
  35. package/dist/src/lib/index.d.ts +0 -4
  36. package/dist/src/lib/index.js +0 -36
  37. package/dist/src/lib/index.js.map +0 -1
  38. package/dist/src/lib/utils.d.ts +0 -15
  39. package/dist/src/lib/utils.js +0 -120
  40. package/dist/src/lib/utils.js.map +0 -1
  41. package/dist/src/lib/utils.test.d.ts +0 -1
  42. package/dist/src/lib/utils.test.js +0 -140
  43. package/dist/src/lib/utils.test.js.map +0 -1
  44. package/dist/src/lib/webdriver.d.ts +0 -4
  45. package/dist/src/lib/webdriver.js +0 -46
  46. package/dist/src/lib/webdriver.js.map +0 -1
  47. package/dist/src/lib/webdriver.test.d.ts +0 -1
  48. package/dist/src/lib/webdriver.test.js +0 -102
  49. package/dist/src/lib/webdriver.test.js.map +0 -1
  50. package/dist/src/testutils/index.d.ts +0 -19
  51. package/dist/src/testutils/index.js +0 -51
  52. package/dist/src/testutils/index.js.map +0 -1
  53. package/dist/src/types.d.ts +0 -36
  54. package/dist/src/types.js +0 -18
  55. package/dist/src/types.js.map +0 -1
@@ -1096,15 +1096,14 @@
1096
1096
  }
1097
1097
  axe._load = function (audit) {
1098
1098
  'use strict';
1099
- axe.utils.respondable.subscribe('axe.ping', function (
1100
- data,
1101
- keepalive,
1102
- respond
1103
- ) {
1104
- respond({
1105
- axe: true
1106
- });
1107
- });
1099
+ axe.utils.respondable.subscribe(
1100
+ 'axe.ping',
1101
+ function (data, keepalive, respond) {
1102
+ respond({
1103
+ axe: true
1104
+ });
1105
+ }
1106
+ );
1108
1107
  axe.utils.respondable.subscribe('axe.start', runCommand);
1109
1108
  axe._audit = new Audit(audit);
1110
1109
  };
@@ -1843,16 +1842,20 @@
1843
1842
  timeout = setTimeout(function () {
1844
1843
  reject(err('Axe in frame timed out', node));
1845
1844
  }, 3e4);
1846
- axe.utils.respondable(win, 'axe.start', parameters, undefined, function (
1847
- data
1848
- ) {
1849
- clearTimeout(timeout);
1850
- if (data instanceof Error === false) {
1851
- resolve(data);
1852
- } else {
1853
- reject(data);
1845
+ axe.utils.respondable(
1846
+ win,
1847
+ 'axe.start',
1848
+ parameters,
1849
+ undefined,
1850
+ function (data) {
1851
+ clearTimeout(timeout);
1852
+ if (data instanceof Error === false) {
1853
+ resolve(data);
1854
+ } else {
1855
+ reject(data);
1856
+ }
1854
1857
  }
1855
- });
1858
+ );
1856
1859
  });
1857
1860
  };
1858
1861
  function collectResultsFromFrames(
@@ -3779,8 +3782,7 @@
3779
3782
  checkboxgroup: {
3780
3783
  description:
3781
3784
  'Ensures related <input type="checkbox"> elements have a group and that that group designation is consistent',
3782
- help:
3783
- 'Checkbox inputs with the same name attribute value must be part of a group'
3785
+ help: 'Checkbox inputs with the same name attribute value must be part of a group'
3784
3786
  },
3785
3787
  'color-contrast': {
3786
3788
  description:
@@ -3789,8 +3791,7 @@
3789
3791
  },
3790
3792
  'definition-list': {
3791
3793
  description: 'Ensures <dl> elements are structured correctly',
3792
- help:
3793
- '<dl> elements must only directly contain properly-ordered <dt> and <dd> groups, <script> or <template> elements'
3794
+ help: '<dl> elements must only directly contain properly-ordered <dt> and <dd> groups, <script> or <template> elements'
3794
3795
  },
3795
3796
  dlitem: {
3796
3797
  description: 'Ensures <dt> and <dd> elements are contained by a <dl>',
@@ -3830,8 +3831,7 @@
3830
3831
  'href-no-hash': {
3831
3832
  description:
3832
3833
  'Ensures that href values are valid link references to promote only using anchors as links',
3833
- help:
3834
- 'Anchors must only be used as links with valid URLs or URL fragments'
3834
+ help: 'Anchors must only be used as links with valid URLs or URL fragments'
3835
3835
  },
3836
3836
  'html-has-lang': {
3837
3837
  description: 'Ensures every HTML document has a lang attribute',
@@ -3850,8 +3850,7 @@
3850
3850
  'image-redundant-alt': {
3851
3851
  description:
3852
3852
  'Ensure button and link text is not repeated as image alternative',
3853
- help:
3854
- 'Text of buttons and links should not be repeated in the image alternative'
3853
+ help: 'Text of buttons and links should not be repeated in the image alternative'
3855
3854
  },
3856
3855
  'input-image-alt': {
3857
3856
  description:
@@ -3874,8 +3873,7 @@
3874
3873
  },
3875
3874
  'link-in-text-block': {
3876
3875
  description: 'Links can be distinguished without relying on color',
3877
- help:
3878
- 'Links must be distinguished from surrounding text in a way that does not rely on color'
3876
+ help: 'Links must be distinguished from surrounding text in a way that does not rely on color'
3879
3877
  },
3880
3878
  'link-name': {
3881
3879
  description: 'Ensures links have discernible text',
@@ -3883,8 +3881,7 @@
3883
3881
  },
3884
3882
  list: {
3885
3883
  description: 'Ensures that lists are structured correctly',
3886
- help:
3887
- '<ul> and <ol> must only directly contain <li>, <script> or <template> elements'
3884
+ help: '<ul> and <ol> must only directly contain <li>, <script> or <template> elements'
3888
3885
  },
3889
3886
  listitem: {
3890
3887
  description: 'Ensures <li> elements are used semantically',
@@ -3914,14 +3911,12 @@
3914
3911
  },
3915
3912
  'p-as-heading': {
3916
3913
  description: 'Ensure p elements are not used to style headings',
3917
- help:
3918
- 'Bold, italic text and font-size are not used to style p elements as a heading'
3914
+ help: 'Bold, italic text and font-size are not used to style p elements as a heading'
3919
3915
  },
3920
3916
  radiogroup: {
3921
3917
  description:
3922
3918
  'Ensures related <input type="radio"> elements have a group and that the group designation is consistent',
3923
- help:
3924
- 'Radio inputs with the same name attribute value must be part of a group'
3919
+ help: 'Radio inputs with the same name attribute value must be part of a group'
3925
3920
  },
3926
3921
  region: {
3927
3922
  description:
@@ -3949,32 +3944,27 @@
3949
3944
  'table-duplicate-name': {
3950
3945
  description:
3951
3946
  'Ensure that tables do not have the same summary and caption',
3952
- help:
3953
- 'The <caption> element should not contain the same text as the summary attribute'
3947
+ help: 'The <caption> element should not contain the same text as the summary attribute'
3954
3948
  },
3955
3949
  'table-fake-caption': {
3956
3950
  description:
3957
3951
  'Ensure that tables with a caption use the <caption> element.',
3958
- help:
3959
- 'Data or header cells should not be used to give caption to a data table.'
3952
+ help: 'Data or header cells should not be used to give caption to a data table.'
3960
3953
  },
3961
3954
  'td-has-header': {
3962
3955
  description:
3963
3956
  'Ensure that each non-empty data cell in a large table has one or more table headers',
3964
- help:
3965
- 'All non-empty td element in table larger than 3 by 3 must have an associated table header'
3957
+ help: 'All non-empty td element in table larger than 3 by 3 must have an associated table header'
3966
3958
  },
3967
3959
  'td-headers-attr': {
3968
3960
  description:
3969
3961
  'Ensure that each cell in a table using the headers refers to another cell in that table',
3970
- help:
3971
- 'All cells in a table element that use the headers attribute must only refer to other cells of that same table'
3962
+ help: 'All cells in a table element that use the headers attribute must only refer to other cells of that same table'
3972
3963
  },
3973
3964
  'th-has-data-cells': {
3974
3965
  description:
3975
3966
  'Ensure that each table header in a data table refers to data cells',
3976
- help:
3977
- 'All th elements and elements with role=columnheader/rowheader must have data cells they describe'
3967
+ help: 'All th elements and elements with role=columnheader/rowheader must have data cells they describe'
3978
3968
  },
3979
3969
  'valid-lang': {
3980
3970
  description: 'Ensures lang attributes have valid values',
@@ -9136,29 +9126,27 @@
9136
9126
  }
9137
9127
  return set;
9138
9128
  };
9139
- var sortRolesByOptimalAriaContext = function sortRolesByOptimalAriaContext(
9140
- roles,
9141
- ariaAttributes
9142
- ) {
9143
- var getScore = function getScore(role) {
9144
- var allowedAriaAttributes = aria.allowedAttr(role);
9145
- return allowedAriaAttributes.reduce(function (score, attribute) {
9146
- return score + (ariaAttributes.indexOf(attribute) > -1 ? 1 : 0);
9147
- }, 0);
9148
- };
9149
- var scored = roles.map(function (role) {
9150
- return {
9151
- score: getScore(role),
9152
- name: role
9129
+ var sortRolesByOptimalAriaContext =
9130
+ function sortRolesByOptimalAriaContext(roles, ariaAttributes) {
9131
+ var getScore = function getScore(role) {
9132
+ var allowedAriaAttributes = aria.allowedAttr(role);
9133
+ return allowedAriaAttributes.reduce(function (score, attribute) {
9134
+ return score + (ariaAttributes.indexOf(attribute) > -1 ? 1 : 0);
9135
+ }, 0);
9153
9136
  };
9154
- });
9155
- var sorted = scored.sort(function (scoredRoleA, scoredRoleB) {
9156
- return scoredRoleB.score - scoredRoleA.score;
9157
- });
9158
- return sorted.map(function (sortedRole) {
9159
- return sortedRole.name;
9160
- });
9161
- };
9137
+ var scored = roles.map(function (role) {
9138
+ return {
9139
+ score: getScore(role),
9140
+ name: role
9141
+ };
9142
+ });
9143
+ var sorted = scored.sort(function (scoredRoleA, scoredRoleB) {
9144
+ return scoredRoleB.score - scoredRoleA.score;
9145
+ });
9146
+ return sorted.map(function (sortedRole) {
9147
+ return sortedRole.name;
9148
+ });
9149
+ };
9162
9150
  var roles = Object.keys(lookupTables.role).map(function (role) {
9163
9151
  var lookup = lookupTables.role[role];
9164
9152
  return {
@@ -0,0 +1,11 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Document</title>
7
+ </head>
8
+ <body>
9
+ <h1>This is a document.</h1>
10
+ </body>
11
+ </html>
package/src/types.ts CHANGED
@@ -6,7 +6,7 @@ export * from './lib';
6
6
  export interface EventParams {
7
7
  silentMode: boolean;
8
8
  timer: boolean;
9
- cliReporter: (...args: any[]) => void;
9
+ cliReporter: (...args: unknown[]) => void;
10
10
  verbose: boolean;
11
11
  exit: boolean;
12
12
  }
@@ -23,6 +23,7 @@ export interface WebdriverConfigParams {
23
23
  browser: string;
24
24
  timeout: number;
25
25
  chromedriverPath?: string;
26
+ chromePath?: string;
26
27
  path?: string;
27
28
  chromeOptions?: string[];
28
29
  builder?: Builder;
package/dist/package.json DELETED
@@ -1,91 +0,0 @@
1
- {
2
- "name": "@axe-core/cli",
3
- "version": "4.7.3",
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.3",
48
- "axe-core": "^4.7.0",
49
- "chromedriver": "^113.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": "ad1c229716920cbc359553e0bcb2e0b20ac55ac9"
91
- }
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
@@ -1,39 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
1
- import 'mocha';
@@ -1,241 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../../../src/bin/cli.test.ts"],"names":[],"mappings":"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"}