@axe-core/cli 4.7.4-alpha.408 → 4.7.4-bbfaae4.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/package.json +12 -11
- package/.eslintrc.js +0 -18
- package/CHANGELOG.md +0 -235
- package/dist/package.json +0 -91
- package/dist/src/bin/cli.d.ts +0 -2
- package/dist/src/bin/cli.js +0 -39
- package/dist/src/bin/cli.js.map +0 -1
- package/dist/src/bin/cli.test.d.ts +0 -1
- package/dist/src/bin/cli.test.js +0 -251
- package/dist/src/bin/cli.test.js.map +0 -1
- package/dist/src/bin/index.d.ts +0 -5
- package/dist/src/bin/index.js +0 -138
- package/dist/src/bin/index.js.map +0 -1
- package/dist/src/lib/axe-test-urls.d.ts +0 -4
- package/dist/src/lib/axe-test-urls.js +0 -89
- package/dist/src/lib/axe-test-urls.js.map +0 -1
- package/dist/src/lib/axe-test-urls.test.d.ts +0 -1
- package/dist/src/lib/axe-test-urls.test.js +0 -73
- package/dist/src/lib/axe-test-urls.test.js.map +0 -1
- package/dist/src/lib/events.d.ts +0 -10
- package/dist/src/lib/events.js +0 -54
- package/dist/src/lib/events.js.map +0 -1
- package/dist/src/lib/events.test.d.ts +0 -1
- package/dist/src/lib/events.test.js +0 -31
- package/dist/src/lib/events.test.js.map +0 -1
- package/dist/src/lib/index.d.ts +0 -4
- package/dist/src/lib/index.js +0 -36
- package/dist/src/lib/index.js.map +0 -1
- package/dist/src/lib/utils.d.ts +0 -15
- package/dist/src/lib/utils.js +0 -120
- package/dist/src/lib/utils.js.map +0 -1
- package/dist/src/lib/utils.test.d.ts +0 -1
- package/dist/src/lib/utils.test.js +0 -140
- package/dist/src/lib/utils.test.js.map +0 -1
- package/dist/src/lib/webdriver.d.ts +0 -4
- package/dist/src/lib/webdriver.js +0 -46
- package/dist/src/lib/webdriver.js.map +0 -1
- package/dist/src/lib/webdriver.test.d.ts +0 -1
- package/dist/src/lib/webdriver.test.js +0 -102
- package/dist/src/lib/webdriver.test.js.map +0 -1
- package/dist/src/testutils/index.d.ts +0 -19
- package/dist/src/testutils/index.js +0 -51
- package/dist/src/testutils/index.js.map +0 -1
- package/dist/src/types.d.ts +0 -36
- package/dist/src/types.js +0 -18
- package/dist/src/types.js.map +0 -1
- package/src/bin/cli.test.ts +0 -407
- package/src/bin/cli.ts +0 -82
- package/src/bin/index.ts +0 -184
- package/src/lib/axe-test-urls.test.ts +0 -73
- package/src/lib/axe-test-urls.ts +0 -98
- package/src/lib/events.test.ts +0 -26
- package/src/lib/events.ts +0 -68
- package/src/lib/index.ts +0 -5
- package/src/lib/utils.test.ts +0 -130
- package/src/lib/utils.ts +0 -143
- package/src/lib/webdriver.test.ts +0 -104
- package/src/lib/webdriver.ts +0 -38
- package/src/testutils/axe-core@2.5.0.js +0 -18941
- package/src/testutils/index.ts +0 -47
- package/src/testutils/simple-clean.html +0 -11
- package/src/testutils/simple.html +0 -12
- package/src/types.ts +0 -41
- package/tsconfig.json +0 -19
package/src/lib/utils.ts
DELETED
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import colors from 'colors';
|
|
4
|
-
import { AxeResults } from 'axe-core';
|
|
5
|
-
|
|
6
|
-
export const saveOutcome = (
|
|
7
|
-
outcome: AxeResults | AxeResults[],
|
|
8
|
-
fileName?: string,
|
|
9
|
-
dir?: string
|
|
10
|
-
): string => {
|
|
11
|
-
if (typeof fileName !== 'string') {
|
|
12
|
-
fileName = 'axe-results-' + Date.now() + '.json';
|
|
13
|
-
}
|
|
14
|
-
/* istanbul ignore if */
|
|
15
|
-
if (typeof dir !== 'string') {
|
|
16
|
-
dir = process.cwd();
|
|
17
|
-
} else if (!path.isAbsolute(dir)) {
|
|
18
|
-
dir = path.join(process.cwd(), dir);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const filePath = path.join(dir, fileName);
|
|
22
|
-
|
|
23
|
-
/* istanbul ignore else */
|
|
24
|
-
if (!fs.existsSync(filePath)) {
|
|
25
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
26
|
-
}
|
|
27
|
-
fs.writeFileSync(filePath, JSON.stringify(outcome, null, 2), 'utf-8');
|
|
28
|
-
return filePath;
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
export const parseUrl = (url: string): string => {
|
|
32
|
-
if (!/[a-z]+:\/\//.test(url)) {
|
|
33
|
-
return 'http://' + url;
|
|
34
|
-
}
|
|
35
|
-
return url;
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
export const parseBrowser = (browser?: string): string | Error => {
|
|
39
|
-
if (!browser) {
|
|
40
|
-
return 'chrome-headless';
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
const l = browser.length;
|
|
44
|
-
switch (browser.toLowerCase()) {
|
|
45
|
-
case 'ff':
|
|
46
|
-
case 'firefox'.substr(0, l):
|
|
47
|
-
case 'gecko'.substr(0, l):
|
|
48
|
-
case 'marionette'.substr(0, l):
|
|
49
|
-
return 'firefox';
|
|
50
|
-
|
|
51
|
-
case 'chrome'.substr(0, l):
|
|
52
|
-
return 'chrome';
|
|
53
|
-
|
|
54
|
-
case 'ie':
|
|
55
|
-
case 'explorer'.substr(0, l):
|
|
56
|
-
case 'internetexplorer'.substr(0, l):
|
|
57
|
-
case 'internet_explorer'.substr(0, l):
|
|
58
|
-
case 'internet-explorer'.substr(0, l):
|
|
59
|
-
return 'ie';
|
|
60
|
-
|
|
61
|
-
case 'safari'.substr(0, l):
|
|
62
|
-
return 'safari';
|
|
63
|
-
|
|
64
|
-
case 'edge'.substr(0, l):
|
|
65
|
-
case 'microsoftedge'.substr(0, l):
|
|
66
|
-
return 'MicrosoftEdge';
|
|
67
|
-
|
|
68
|
-
default:
|
|
69
|
-
throw new Error('Unknown browser ' + browser);
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
export const getAxeSource = (axePath?: string): string | void => {
|
|
74
|
-
// Abort if axePath should exist, and it isn't
|
|
75
|
-
if (axePath && !fs.existsSync(axePath)) {
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// Look for axe in current working directory
|
|
80
|
-
if (!axePath) {
|
|
81
|
-
axePath = path.join(process.cwd(), 'axe.js');
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
if (!fs.existsSync(axePath)) {
|
|
85
|
-
// Look for axe in CWD ./node_modules
|
|
86
|
-
axePath = path.join(process.cwd(), 'node_modules', 'axe-core', 'axe.js');
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
if (!fs.existsSync(axePath)) {
|
|
90
|
-
// `__dirname` is /@axe-core/cli/dist/src/lib when installed globally
|
|
91
|
-
// to access the locally installed axe-core package we need to go up 3 levels
|
|
92
|
-
// if all else fails, use the locally installed axe
|
|
93
|
-
axePath = path.join(
|
|
94
|
-
__dirname,
|
|
95
|
-
'..',
|
|
96
|
-
'..',
|
|
97
|
-
'..',
|
|
98
|
-
'node_modules',
|
|
99
|
-
'axe-core',
|
|
100
|
-
'axe.js'
|
|
101
|
-
);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
return fs.readFileSync(axePath, 'utf-8');
|
|
105
|
-
};
|
|
106
|
-
|
|
107
|
-
export const getAxeVersion = (source: string): string => {
|
|
108
|
-
const match = source.match(/\.version\s*=\s'([^']+)'/);
|
|
109
|
-
return match ? match[1] : 'unknown version';
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
export const splitList = (val: string): string[] => {
|
|
113
|
-
return val.split(/[,;]/).map(str => str.trim());
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
export const selectorToString = (
|
|
117
|
-
selectors: string[],
|
|
118
|
-
separator?: string
|
|
119
|
-
): string => {
|
|
120
|
-
separator = separator || ' ';
|
|
121
|
-
return selectors
|
|
122
|
-
.reduce((prev, curr) => prev.concat(curr as never), [])
|
|
123
|
-
.join(separator);
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
export const reporter = (
|
|
127
|
-
noReporter: boolean,
|
|
128
|
-
silentMode: boolean
|
|
129
|
-
): (() => void) => {
|
|
130
|
-
if (!noReporter || silentMode) {
|
|
131
|
-
return () => {};
|
|
132
|
-
} else {
|
|
133
|
-
return (...args: string[]) => {
|
|
134
|
-
console.log(...args);
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
};
|
|
138
|
-
|
|
139
|
-
export const link = colors.underline.blue;
|
|
140
|
-
export const error = colors.red.bold;
|
|
141
|
-
export const bold = colors.bold;
|
|
142
|
-
export const green = colors.green;
|
|
143
|
-
export const italics = colors.italic;
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import 'mocha';
|
|
2
|
-
import { assert } from 'chai';
|
|
3
|
-
import { startDriver } from './webdriver';
|
|
4
|
-
import { WebDriver } from 'selenium-webdriver';
|
|
5
|
-
import chromedriver from 'chromedriver';
|
|
6
|
-
import chrome from 'selenium-webdriver/chrome';
|
|
7
|
-
import type { Options } from 'selenium-webdriver/chrome';
|
|
8
|
-
import path from 'path';
|
|
9
|
-
import { WebdriverConfigParams } from '../types';
|
|
10
|
-
describe('startDriver', () => {
|
|
11
|
-
let config: WebdriverConfigParams;
|
|
12
|
-
let browser: string;
|
|
13
|
-
let driver: WebDriver;
|
|
14
|
-
beforeEach(() => {
|
|
15
|
-
browser = 'chrome-headless';
|
|
16
|
-
config = {
|
|
17
|
-
timeout: 90,
|
|
18
|
-
get browser() {
|
|
19
|
-
return browser;
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
afterEach(async () => {
|
|
25
|
-
await driver.quit();
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
it('creates a driver', async () => {
|
|
29
|
-
driver = await startDriver(config);
|
|
30
|
-
assert.isObject(driver);
|
|
31
|
-
assert.isFunction(driver.manage);
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
xit('sets the config.browser as the browser', async () => {
|
|
35
|
-
browser = 'chrome';
|
|
36
|
-
driver = await startDriver(config);
|
|
37
|
-
const capabilities = await driver.getCapabilities();
|
|
38
|
-
assert.equal(capabilities.get('browserName'), browser);
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
it('sets the browser as chrome with chrome-headless', async () => {
|
|
42
|
-
browser = 'chrome-headless';
|
|
43
|
-
driver = await startDriver(config);
|
|
44
|
-
const capabilities = await driver.getCapabilities();
|
|
45
|
-
|
|
46
|
-
assert.equal(capabilities.get('browserName'), 'chrome');
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
it('uses the chromedriver path with chrome-headless', async () => {
|
|
50
|
-
browser = 'chrome-headless';
|
|
51
|
-
driver = await startDriver(config);
|
|
52
|
-
const chromedriverPath = (config as any).builder.chromeService_.exe_;
|
|
53
|
-
|
|
54
|
-
assert.equal(chromedriverPath, chromedriver.path);
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
it('uses the passed in chromedriver path with chrome-headless', async () => {
|
|
58
|
-
browser = 'chrome-headless';
|
|
59
|
-
config.chromedriverPath = path.relative(process.cwd(), chromedriver.path);
|
|
60
|
-
driver = await startDriver(config);
|
|
61
|
-
const chromedriverPath = (config as any).builder.chromeService_.exe_;
|
|
62
|
-
|
|
63
|
-
assert.notEqual(config.chromedriverPath, chromedriver.path);
|
|
64
|
-
assert.equal(chromedriverPath, config.chromedriverPath);
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
it('passes the --no-sandbox argument to chromeOptions', async () => {
|
|
68
|
-
browser = 'chrome-headless';
|
|
69
|
-
config.chromeOptions = ['--no-sandbox'];
|
|
70
|
-
driver = await startDriver(config);
|
|
71
|
-
|
|
72
|
-
const options = config?.builder?.getChromeOptions();
|
|
73
|
-
assert.isArray(options?.get('goog:chromeOptions').args);
|
|
74
|
-
assert.deepEqual(options?.get('goog:chromeOptions').args, [
|
|
75
|
-
'headless',
|
|
76
|
-
'--no-sandbox'
|
|
77
|
-
]);
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
it('passes multiple arguments argument to chromeOptions', async () => {
|
|
81
|
-
browser = 'chrome-headless';
|
|
82
|
-
config.chromeOptions = ['no-sandbox', 'disable-dev-shm-usage'];
|
|
83
|
-
driver = await startDriver(config);
|
|
84
|
-
|
|
85
|
-
const options = config?.builder?.getChromeOptions();
|
|
86
|
-
assert.isArray(options?.get('goog:chromeOptions').args);
|
|
87
|
-
assert.deepEqual(options?.get('goog:chromeOptions').args, [
|
|
88
|
-
'headless',
|
|
89
|
-
'no-sandbox',
|
|
90
|
-
'disable-dev-shm-usage'
|
|
91
|
-
]);
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
it('sets the --timeout flag', async () => {
|
|
95
|
-
browser = 'chrome-headless';
|
|
96
|
-
config.timeout = 10000;
|
|
97
|
-
driver = await startDriver(config);
|
|
98
|
-
config.builder;
|
|
99
|
-
const timeoutValue = await driver.manage().getTimeouts();
|
|
100
|
-
|
|
101
|
-
assert.isObject(timeoutValue);
|
|
102
|
-
assert.deepEqual(timeoutValue.script, 10000000);
|
|
103
|
-
});
|
|
104
|
-
});
|
package/src/lib/webdriver.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import chromedriver from 'chromedriver';
|
|
2
|
-
import { Builder, type WebDriver } from 'selenium-webdriver';
|
|
3
|
-
import chrome from 'selenium-webdriver/chrome';
|
|
4
|
-
import { WebdriverConfigParams } from '../types';
|
|
5
|
-
|
|
6
|
-
const startDriver = async (
|
|
7
|
-
config: WebdriverConfigParams
|
|
8
|
-
): Promise<WebDriver> => {
|
|
9
|
-
const scriptTimeout = config.timeout * 1000.0;
|
|
10
|
-
let builder: Builder;
|
|
11
|
-
/* istanbul ignore else */
|
|
12
|
-
if (config.browser === 'chrome-headless') {
|
|
13
|
-
const service = new chrome.ServiceBuilder(
|
|
14
|
-
config.chromedriverPath || chromedriver.path
|
|
15
|
-
);
|
|
16
|
-
|
|
17
|
-
let options = new chrome.Options().headless();
|
|
18
|
-
if (config.chromeOptions?.length) {
|
|
19
|
-
options = config.chromeOptions.reduce(function (options, arg) {
|
|
20
|
-
return options.addArguments(arg);
|
|
21
|
-
}, options);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
builder = new Builder()
|
|
25
|
-
.forBrowser('chrome')
|
|
26
|
-
.setChromeOptions(options)
|
|
27
|
-
.setChromeService(service);
|
|
28
|
-
} else {
|
|
29
|
-
builder = new Builder().forBrowser(config.browser);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
config.builder = builder;
|
|
33
|
-
const driver = builder.build();
|
|
34
|
-
await driver.manage().setTimeouts({ script: scriptTimeout });
|
|
35
|
-
return driver;
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
export { startDriver };
|