-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathquantifiers.test.tsx
46 lines (38 loc) · 1.47 KB
/
quantifiers.test.tsx
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
import { one, oneOrMore, optionally, zeroOrMore } from '../quantifiers/base';
import { buildPattern, buildRegex } from '../compiler';
test('"oneOrMore" quantifier', () => {
expect(buildPattern(oneOrMore('a'))).toEqual('a+');
expect(buildPattern(oneOrMore('ab'))).toEqual('(?:ab)+');
});
test('"one" quantifier', () => {
expect(buildPattern(one('a'))).toEqual('a');
expect(buildPattern(one('ab'))).toEqual('ab');
});
test('"optionally" quantifier', () => {
expect(buildPattern(optionally('a'))).toEqual('a?');
expect(buildPattern(optionally('ab'))).toEqual('(?:ab)?');
});
test('"zeroOrMore" quantifier', () => {
expect(buildPattern(zeroOrMore('a'))).toEqual('a*');
expect(buildPattern(zeroOrMore('ab'))).toEqual('(?:ab)*');
});
test('oneOrMore does not generate capture when grouping', () => {
const regex = buildRegex(oneOrMore('aa'));
const groups = [...'aa'.match(regex)!];
expect(groups).toEqual(['aa']);
});
test('one does not generate capture when grouping', () => {
const regex = buildRegex(one('aa'));
const groups = [...'aa'.match(regex)!];
expect(groups).toEqual(['aa']);
});
test('optionally does not generate capture when grouping', () => {
const regex = buildRegex(optionally('aa'));
const groups = [...'aa'.match(regex)!];
expect(groups).toEqual(['aa']);
});
test('zeroOrMore does not generate capture when grouping', () => {
const regex = buildRegex(zeroOrMore('aa'));
const groups = [...'aa'.match(regex)!];
expect(groups).toEqual(['aa']);
});