···
it('supports parsing expressions', () => {
expect(parseTag`${1}`).toEqual({
···
-
expect(ast).toHaveProperty('sequence.0.type', 'expression');
expect(ast).toHaveProperty('sequence.0.quantifier', '?');
-
expect(ast).toHaveProperty('sequence.0.type', 'expression');
expect(ast).toHaveProperty('sequence.0.quantifier', '+');
-
expect(ast).toHaveProperty('sequence.0.type', 'expression');
expect(ast).toHaveProperty('sequence.0.quantifier', '*');
···
ast = parseTag`${1} | ${2}`;
expect(ast).toHaveProperty('sequence.length', 1);
-
expect(ast).toHaveProperty('sequence.0.type', 'expression');
expect(ast).toHaveProperty('sequence.0.expression', 1);
-
expect(ast).toHaveProperty('alternation.type', 'sequence');
expect(ast).toHaveProperty('alternation.sequence.0.expression', 2);
ast = parseTag`${1}? | ${2}?`;
···
ast = parseTag`(${1} ${2})`;
expect(ast).toHaveProperty('sequence.length', 1);
-
expect(ast).toHaveProperty('sequence.0.type', 'group');
expect(ast).toHaveProperty('sequence.0.sequence.sequence.length', 2);
expect(ast).toHaveProperty('sequence.0.sequence.sequence.0.expression', 1);
expect(ast).toHaveProperty('sequence.0.sequence.sequence.1.expression', 2);
ast = parseTag`(${1} ${2}?)?`;
expect(ast).toHaveProperty('sequence.length', 1);
-
expect(ast).toHaveProperty('sequence.0.type', 'group');
expect(ast).toHaveProperty('sequence.0.quantifier', '?');
-
expect(ast).toHaveProperty('sequence.0.sequence.sequence.0.quantifier', null);
it('supports non-capturing groups', () => {
const ast = parseTag`(?: ${1})`;
expect(ast).toHaveProperty('sequence.length', 1);
-
expect(ast).toHaveProperty('sequence.0.type', 'group');
expect(ast).toHaveProperty('sequence.0.capture', ':');
expect(ast).toHaveProperty('sequence.0.sequence.sequence.length', 1);
···
it('supports positive lookahead groups', () => {
const ast = parseTag`(?= ${1})`;
expect(ast).toHaveProperty('sequence.length', 1);
-
expect(ast).toHaveProperty('sequence.0.type', 'group');
expect(ast).toHaveProperty('sequence.0.capture', '=');
expect(ast).toHaveProperty('sequence.0.sequence.sequence.length', 1);
···
it('supports negative lookahead groups', () => {
const ast = parseTag`(?! ${1})`;
expect(ast).toHaveProperty('sequence.length', 1);
-
expect(ast).toHaveProperty('sequence.0.type', 'group');
expect(ast).toHaveProperty('sequence.0.capture', '!');
expect(ast).toHaveProperty('sequence.0.sequence.sequence.length', 1);
···
it('supports groups with alternates', () => {
expect(parseTag`(${1} | ${2}) ${3}`).toMatchInlineSnapshot(`
···
it('supports parsing expressions', () => {
expect(parseTag`${1}`).toEqual({
+
alternation: undefined,
···
expect(ast).toHaveProperty('sequence.0.quantifier', '?');
expect(ast).toHaveProperty('sequence.0.quantifier', '+');
expect(ast).toHaveProperty('sequence.0.quantifier', '*');
···
ast = parseTag`${1} | ${2}`;
expect(ast).toHaveProperty('sequence.length', 1);
expect(ast).toHaveProperty('sequence.0.expression', 1);
expect(ast).toHaveProperty('alternation.sequence.0.expression', 2);
ast = parseTag`${1}? | ${2}?`;
···
ast = parseTag`(${1} ${2})`;
expect(ast).toHaveProperty('sequence.length', 1);
expect(ast).toHaveProperty('sequence.0.sequence.sequence.length', 2);
expect(ast).toHaveProperty('sequence.0.sequence.sequence.0.expression', 1);
expect(ast).toHaveProperty('sequence.0.sequence.sequence.1.expression', 2);
ast = parseTag`(${1} ${2}?)?`;
expect(ast).toHaveProperty('sequence.length', 1);
expect(ast).toHaveProperty('sequence.0.quantifier', '?');
+
expect(ast).toHaveProperty(
+
'sequence.0.sequence.sequence.0.quantifier',
it('supports non-capturing groups', () => {
const ast = parseTag`(?: ${1})`;
expect(ast).toHaveProperty('sequence.length', 1);
expect(ast).toHaveProperty('sequence.0.capture', ':');
expect(ast).toHaveProperty('sequence.0.sequence.sequence.length', 1);
···
it('supports positive lookahead groups', () => {
const ast = parseTag`(?= ${1})`;
expect(ast).toHaveProperty('sequence.length', 1);
expect(ast).toHaveProperty('sequence.0.capture', '=');
expect(ast).toHaveProperty('sequence.0.sequence.sequence.length', 1);
···
it('supports negative lookahead groups', () => {
const ast = parseTag`(?! ${1})`;
expect(ast).toHaveProperty('sequence.length', 1);
expect(ast).toHaveProperty('sequence.0.capture', '!');
expect(ast).toHaveProperty('sequence.0.sequence.sequence.length', 1);
···
it('supports groups with alternates', () => {
expect(parseTag`(${1} | ${2}) ${3}`).toMatchInlineSnapshot(`