forked from foolip/mdn-bcd-collector
-
Notifications
You must be signed in to change notification settings - Fork 0
/
tests.js
84 lines (69 loc) · 1.84 KB
/
tests.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
//
// mdn-bcd-collector: tests.js
// Module for handling the tests for the web app
//
// © Google LLC, Gooborg Studios
// See the LICENSE file for copyright details
//
import didYouMean from 'didyoumean';
class Tests {
constructor(options) {
this.tests = options.tests;
this.endpoints = this.buildEndpoints();
this.httpOnly = options.httpOnly;
}
buildEndpoints() {
const endpoints = {
'': []
};
for (const ident of Object.keys(this.tests)) {
endpoints[''].push(ident);
let endpoint = '';
for (const part of ident.split('.')) {
endpoint += (endpoint ? '.' : '') + part;
if (!(endpoint in endpoints)) {
endpoints[endpoint] = [];
}
if (!endpoints[endpoint].includes(ident)) {
endpoints[endpoint].push(ident);
}
}
}
return endpoints;
}
listEndpoints() {
return Object.keys(this.endpoints);
}
didYouMean(input) {
return didYouMean(input, this.listEndpoints());
}
getTests(endpoint, testExposure, ignoreIdents = []) {
if (!(endpoint in this.endpoints)) {
return [];
}
const idents = this.endpoints[endpoint];
const tests = [];
for (const ident of idents) {
const ignore = ignoreIdents.some((ignoreIdent) => {
return ident === ignoreIdent || ident.startsWith(`${ignoreIdent}.`);
});
if (ignore) {
continue;
}
const test = this.tests[ident];
for (const exposure of test.exposure) {
if (!testExposure || exposure == testExposure) {
tests.push({
ident: ident,
// TODO: Simplify this to just a code string.
tests: [{code: test.code}],
exposure: exposure,
resources: test.resources || {}
});
}
}
}
return tests;
}
}
export default Tests;