···
const parseTag = (quasis, ...expressions) => parse(quasis, expressions);
-
it('supports parsing expressions', () => {
-
expect(parseTag`${1}`).toEqual({
-
alternation: undefined,
it('supports parsing expressions with quantifiers', () => {
-
expect(ast).toHaveProperty('sequence.0.quantifier', '?');
-
expect(ast).toHaveProperty('sequence.0.quantifier', '+');
-
expect(ast).toHaveProperty('sequence.0.quantifier', '*');
it('supports top-level alternations', () => {
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}?`;
-
expect(ast).toHaveProperty('sequence.0.quantifier', '?');
it('supports groups with quantifiers', () => {
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(`
-
"alternation": Object {
···
const parseTag = (quasis, ...expressions) => parse(quasis, expressions);
it('supports parsing expressions with quantifiers', () => {
+
expect(ast).toHaveProperty('0.quantifier', '?');
+
expect(ast).toHaveProperty('0.quantifier', '+');
+
expect(ast).toHaveProperty('0.quantifier', '*');
it('supports top-level alternations', () => {
ast = parseTag`${1} | ${2}`;
+
expect(ast).toHaveProperty('length', 1);
+
expect(ast).toHaveProperty('0.expression', 1);
+
expect(ast).toHaveProperty('alternation.0.expression', 2);
ast = parseTag`${1}? | ${2}?`;
+
expect(ast).toHaveProperty('0.quantifier', '?');
it('supports groups with quantifiers', () => {
ast = parseTag`(${1} ${2})`;
+
expect(ast).toHaveProperty('length', 1);
+
expect(ast).toHaveProperty('0.sequence.length', 2);
+
expect(ast).toHaveProperty('0.sequence.0.expression', 1);
+
expect(ast).toHaveProperty('0.sequence.1.expression', 2);
ast = parseTag`(${1} ${2}?)?`;
+
expect(ast).toHaveProperty('length', 1);
+
expect(ast).toHaveProperty('0.quantifier', '?');
+
expect(ast).toHaveProperty('0.sequence.0.quantifier', undefined);
it('supports non-capturing groups', () => {
const ast = parseTag`(?: ${1})`;
+
expect(ast).toHaveProperty('length', 1);
+
expect(ast).toHaveProperty('0.capture', ':');
+
expect(ast).toHaveProperty('0.sequence.length', 1);
it('supports positive lookahead groups', () => {
const ast = parseTag`(?= ${1})`;
+
expect(ast).toHaveProperty('length', 1);
+
expect(ast).toHaveProperty('0.capture', '=');
+
expect(ast).toHaveProperty('0.sequence.length', 1);
it('supports negative lookahead groups', () => {
const ast = parseTag`(?! ${1})`;
+
expect(ast).toHaveProperty('length', 1);
+
expect(ast).toHaveProperty('0.capture', '!');
+
expect(ast).toHaveProperty('0.sequence.length', 1);
it('supports groups with alternates', () => {
expect(parseTag`(${1} | ${2}) ${3}`).toMatchInlineSnapshot(`