/
patterns.test.ts
40 lines (36 loc) · 1.55 KB
/
patterns.test.ts
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
import { RegExpPatternDefinition } from '@cspell/cspell-types';
import { isDefined } from '../util/util';
import { resolvePatterns } from './patterns';
describe('patterns', () => {
const patterns: RegExpPatternDefinition[] = [
{
name: 'comment-single-line',
pattern: /#.*/g,
},
{
name: 'comment-multi-line',
pattern: /(?:\/\*[\s\S]*?\*\/)/g,
},
{
name: 'comments',
pattern: ['comment-single-line', 'comment-multi-line'],
},
{ name: 'string', pattern: '".*?"' },
{ name: 'a', pattern: ['b', 'c'] },
{ name: 'b', pattern: ['a', 'c'] },
];
const patternsByName = new Map(patterns.map((p) => [p.name, p]));
function selectPatterns(...patterns: string[]): RegExpPatternDefinition[] {
return patterns.map((p) => patternsByName.get(p)).filter(isDefined);
}
const p = selectPatterns;
test.each`
regExpList | patternDefinitions | expected
${[]} | ${[]} | ${[]}
${['string', 'hello']} | ${p('string', 'comments')} | ${[/".*?"/gim, /hello/gim]}
${['string', 'comments']} | ${patterns} | ${[/".*?"/gim, /#.*/g, /(?:\/\*[\s\S]*?\*\/)/g]}
${['a', 'b']} | ${patterns} | ${[/c/gim]}
`('resolvePatterns $regExpList', ({ regExpList, patternDefinitions, expected }) => {
expect(resolvePatterns(regExpList, patternDefinitions)).toEqual(expected);
});
});