···
const parseTag = (quasis, ...expressions) => parse(quasis, expressions);
5
-
it('supports parsing expressions', () => {
6
-
expect(parseTag`${1}`).toEqual({
10
-
quantifier: undefined,
13
-
alternation: undefined,
it('supports parsing expressions with quantifiers', () => {
21
-
expect(ast).toHaveProperty('sequence.0.quantifier', '?');
9
+
expect(ast).toHaveProperty('0.quantifier', '?');
24
-
expect(ast).toHaveProperty('sequence.0.quantifier', '+');
12
+
expect(ast).toHaveProperty('0.quantifier', '+');
27
-
expect(ast).toHaveProperty('sequence.0.quantifier', '*');
15
+
expect(ast).toHaveProperty('0.quantifier', '*');
it('supports top-level alternations', () => {
ast = parseTag`${1} | ${2}`;
34
-
expect(ast).toHaveProperty('sequence.length', 1);
35
-
expect(ast).toHaveProperty('sequence.0.expression', 1);
36
-
expect(ast).toHaveProperty('alternation.sequence.0.expression', 2);
22
+
expect(ast).toHaveProperty('length', 1);
23
+
expect(ast).toHaveProperty('0.expression', 1);
24
+
expect(ast).toHaveProperty('alternation.0.expression', 2);
ast = parseTag`${1}? | ${2}?`;
39
-
expect(ast).toHaveProperty('sequence.0.quantifier', '?');
27
+
expect(ast).toHaveProperty('0.quantifier', '?');
it('supports groups with quantifiers', () => {
ast = parseTag`(${1} ${2})`;
46
-
expect(ast).toHaveProperty('sequence.length', 1);
47
-
expect(ast).toHaveProperty('sequence.0.sequence.sequence.length', 2);
48
-
expect(ast).toHaveProperty('sequence.0.sequence.sequence.0.expression', 1);
49
-
expect(ast).toHaveProperty('sequence.0.sequence.sequence.1.expression', 2);
34
+
expect(ast).toHaveProperty('length', 1);
35
+
expect(ast).toHaveProperty('0.sequence.length', 2);
36
+
expect(ast).toHaveProperty('0.sequence.0.expression', 1);
37
+
expect(ast).toHaveProperty('0.sequence.1.expression', 2);
ast = parseTag`(${1} ${2}?)?`;
52
-
expect(ast).toHaveProperty('sequence.length', 1);
53
-
expect(ast).toHaveProperty('sequence.0.quantifier', '?');
54
-
expect(ast).toHaveProperty(
55
-
'sequence.0.sequence.sequence.0.quantifier',
40
+
expect(ast).toHaveProperty('length', 1);
41
+
expect(ast).toHaveProperty('0.quantifier', '?');
42
+
expect(ast).toHaveProperty('0.sequence.0.quantifier', undefined);
it('supports non-capturing groups', () => {
const ast = parseTag`(?: ${1})`;
62
-
expect(ast).toHaveProperty('sequence.length', 1);
63
-
expect(ast).toHaveProperty('sequence.0.capture', ':');
64
-
expect(ast).toHaveProperty('sequence.0.sequence.sequence.length', 1);
47
+
expect(ast).toHaveProperty('length', 1);
48
+
expect(ast).toHaveProperty('0.capture', ':');
49
+
expect(ast).toHaveProperty('0.sequence.length', 1);
it('supports positive lookahead groups', () => {
const ast = parseTag`(?= ${1})`;
69
-
expect(ast).toHaveProperty('sequence.length', 1);
70
-
expect(ast).toHaveProperty('sequence.0.capture', '=');
71
-
expect(ast).toHaveProperty('sequence.0.sequence.sequence.length', 1);
54
+
expect(ast).toHaveProperty('length', 1);
55
+
expect(ast).toHaveProperty('0.capture', '=');
56
+
expect(ast).toHaveProperty('0.sequence.length', 1);
it('supports negative lookahead groups', () => {
const ast = parseTag`(?! ${1})`;
76
-
expect(ast).toHaveProperty('sequence.length', 1);
77
-
expect(ast).toHaveProperty('sequence.0.capture', '!');
78
-
expect(ast).toHaveProperty('sequence.0.sequence.sequence.length', 1);
61
+
expect(ast).toHaveProperty('length', 1);
62
+
expect(ast).toHaveProperty('0.capture', '!');
63
+
expect(ast).toHaveProperty('0.sequence.length', 1);
it('supports groups with alternates', () => {
expect(parseTag`(${1} | ${2}) ${3}`).toMatchInlineSnapshot(`
86
-
"sequence": Object {
87
-
"alternation": Object {