UNPKG

cucumber-expressions

Version:

Cucumber Expressions - a simpler alternative to Regular Expressions

112 lines 5.87 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var assert_1 = __importDefault(require("assert")); var TreeRegexp_1 = __importDefault(require("../src/TreeRegexp")); describe('TreeRegexp', function () { it('exposes group source', function () { var tr = new TreeRegexp_1.default(/(a(?:b)?)(c)/); assert_1.default.deepStrictEqual(tr.groupBuilder.children.map(function (gb) { return gb.source; }), ['a(?:b)?', 'c']); }); it('builds tree', function () { var tr = new TreeRegexp_1.default(/(a(?:b)?)(c)/); var group = tr.match('ac'); assert_1.default.strictEqual(group.value, 'ac'); assert_1.default.strictEqual(group.children[0].value, 'a'); assert_1.default.deepStrictEqual(group.children[0].children, []); assert_1.default.strictEqual(group.children[1].value, 'c'); }); it('ignores `?:` as a non-capturing group', function () { var tr = new TreeRegexp_1.default(/a(?:b)(c)/); var group = tr.match('abc'); assert_1.default.strictEqual(group.value, 'abc'); assert_1.default.strictEqual(group.children.length, 1); }); it('ignores `?!` as a non-capturing group', function () { var tr = new TreeRegexp_1.default(/a(?!b)(.+)/); var group = tr.match('aBc'); assert_1.default.strictEqual(group.value, 'aBc'); assert_1.default.strictEqual(group.children.length, 1); }); it('ignores `?=` as a non-capturing group', function () { var tr = new TreeRegexp_1.default(/a(?=[b])(.+)/); var group = tr.match('abc'); assert_1.default.strictEqual(group.value, 'abc'); assert_1.default.strictEqual(group.children.length, 1); assert_1.default.strictEqual(group.children[0].value, 'bc'); }); it('ignores `?<=` as a non-capturing group', function () { var tr = new TreeRegexp_1.default(/a(.+)(?<=c)$/); var group = tr.match('abc'); assert_1.default.strictEqual(group.value, 'abc'); assert_1.default.strictEqual(group.children.length, 1); assert_1.default.strictEqual(group.children[0].value, 'bc'); }); it('ignores `?<!` as a non-capturing group', function () { var tr = new TreeRegexp_1.default(/a(.+?)(?<!b)$/); var group = tr.match('abc'); assert_1.default.strictEqual(group.value, 'abc'); assert_1.default.strictEqual(group.children.length, 1); assert_1.default.strictEqual(group.children[0].value, 'bc'); }); it('matches optional group', function () { var tr = new TreeRegexp_1.default(/^Something( with an optional argument)?/); var group = tr.match('Something'); assert_1.default.strictEqual(group.children[0].value, null); }); it('matches nested groups', function () { var tr = new TreeRegexp_1.default(/^A (\d+) thick line from ((\d+),\s*(\d+),\s*(\d+)) to ((\d+),\s*(\d+),\s*(\d+))/); var group = tr.match('A 5 thick line from 10,20,30 to 40,50,60'); assert_1.default.strictEqual(group.children[0].value, '5'); assert_1.default.strictEqual(group.children[1].value, '10,20,30'); assert_1.default.strictEqual(group.children[1].children[0].value, '10'); assert_1.default.strictEqual(group.children[1].children[1].value, '20'); assert_1.default.strictEqual(group.children[1].children[2].value, '30'); assert_1.default.strictEqual(group.children[2].value, '40,50,60'); assert_1.default.strictEqual(group.children[2].children[0].value, '40'); assert_1.default.strictEqual(group.children[2].children[1].value, '50'); assert_1.default.strictEqual(group.children[2].children[2].value, '60'); }); it('detects multiple non capturing groups', function () { var tr = new TreeRegexp_1.default(/(?:a)(:b)(\?c)(d)/); var group = tr.match('a:b?cd'); assert_1.default.strictEqual(group.children.length, 3); }); it('works with escaped backslash', function () { var tr = new TreeRegexp_1.default(/foo\\(bar|baz)/); var group = tr.match('foo\\bar'); assert_1.default.strictEqual(group.children.length, 1); }); it('works with escaped slash', function () { var tr = new TreeRegexp_1.default(/^I go to '\/(.+)'$/); var group = tr.match("I go to '/hello'"); assert_1.default.strictEqual(group.children.length, 1); }); it('works with digit and word', function () { var tr = new TreeRegexp_1.default(/^(\d) (\w+)$/); var group = tr.match('2 you'); assert_1.default.strictEqual(group.children.length, 2); }); it('captures non capturing groups with capturing groups inside', function () { var tr = new TreeRegexp_1.default('the stdout(?: from "(.*?)")?'); var group = tr.match('the stdout'); assert_1.default.strictEqual(group.value, 'the stdout'); assert_1.default.strictEqual(group.children[0].value, null); assert_1.default.strictEqual(group.children.length, 1); }); it('works with flags', function () { var tr = new TreeRegexp_1.default(/HELLO/i); var group = tr.match('hello'); assert_1.default.strictEqual(group.value, 'hello'); }); it('does not consider parenthesis in character class as group', function () { var tr = new TreeRegexp_1.default(/^drawings: ([A-Z, ()]+)$/); var group = tr.match('drawings: ONE(TWO)'); assert_1.default.strictEqual(group.value, 'drawings: ONE(TWO)'); assert_1.default.strictEqual(group.children.length, 1); assert_1.default.strictEqual(group.children[0].value, 'ONE(TWO)'); }); }); //# sourceMappingURL=TreeRegexpTest.js.map