1 | "use strict";
|
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
4 | };
|
5 | Object.defineProperty(exports, "__esModule", { value: true });
|
6 | var assert_1 = __importDefault(require("assert"));
|
7 | var TreeRegexp_1 = __importDefault(require("../src/TreeRegexp"));
|
8 | describe('TreeRegexp', function () {
|
9 | it('exposes group source', function () {
|
10 | var tr = new TreeRegexp_1.default(/(a(?:b)?)(c)/);
|
11 | assert_1.default.deepStrictEqual(tr.groupBuilder.children.map(function (gb) { return gb.source; }), [
|
12 | 'a(?:b)?',
|
13 | 'c',
|
14 | ]);
|
15 | });
|
16 | it('builds tree', function () {
|
17 | var tr = new TreeRegexp_1.default(/(a(?:b)?)(c)/);
|
18 | var group = tr.match('ac');
|
19 | assert_1.default.strictEqual(group.value, 'ac');
|
20 | assert_1.default.strictEqual(group.children[0].value, 'a');
|
21 | assert_1.default.deepStrictEqual(group.children[0].children, []);
|
22 | assert_1.default.strictEqual(group.children[1].value, 'c');
|
23 | });
|
24 | it('ignores `?:` as a non-capturing group', function () {
|
25 | var tr = new TreeRegexp_1.default(/a(?:b)(c)/);
|
26 | var group = tr.match('abc');
|
27 | assert_1.default.strictEqual(group.value, 'abc');
|
28 | assert_1.default.strictEqual(group.children.length, 1);
|
29 | });
|
30 | it('ignores `?!` as a non-capturing group', function () {
|
31 | var tr = new TreeRegexp_1.default(/a(?!b)(.+)/);
|
32 | var group = tr.match('aBc');
|
33 | assert_1.default.strictEqual(group.value, 'aBc');
|
34 | assert_1.default.strictEqual(group.children.length, 1);
|
35 | });
|
36 | it('ignores `?=` as a non-capturing group', function () {
|
37 | var tr = new TreeRegexp_1.default(/a(?=[b])(.+)/);
|
38 | var group = tr.match('abc');
|
39 | assert_1.default.strictEqual(group.value, 'abc');
|
40 | assert_1.default.strictEqual(group.children.length, 1);
|
41 | assert_1.default.strictEqual(group.children[0].value, 'bc');
|
42 | });
|
43 | it('ignores `?<=` as a non-capturing group', function () {
|
44 | var tr = new TreeRegexp_1.default(/a(.+)(?<=c)$/);
|
45 | var group = tr.match('abc');
|
46 | assert_1.default.strictEqual(group.value, 'abc');
|
47 | assert_1.default.strictEqual(group.children.length, 1);
|
48 | assert_1.default.strictEqual(group.children[0].value, 'bc');
|
49 | });
|
50 | it('ignores `?<!` as a non-capturing group', function () {
|
51 | var tr = new TreeRegexp_1.default(/a(.+?)(?<!b)$/);
|
52 | var group = tr.match('abc');
|
53 | assert_1.default.strictEqual(group.value, 'abc');
|
54 | assert_1.default.strictEqual(group.children.length, 1);
|
55 | assert_1.default.strictEqual(group.children[0].value, 'bc');
|
56 | });
|
57 | it('matches optional group', function () {
|
58 | var tr = new TreeRegexp_1.default(/^Something( with an optional argument)?/);
|
59 | var group = tr.match('Something');
|
60 | assert_1.default.strictEqual(group.children[0].value, null);
|
61 | });
|
62 | it('matches nested groups', function () {
|
63 | var tr = new TreeRegexp_1.default(/^A (\d+) thick line from ((\d+),\s*(\d+),\s*(\d+)) to ((\d+),\s*(\d+),\s*(\d+))/);
|
64 | var group = tr.match('A 5 thick line from 10,20,30 to 40,50,60');
|
65 | assert_1.default.strictEqual(group.children[0].value, '5');
|
66 | assert_1.default.strictEqual(group.children[1].value, '10,20,30');
|
67 | assert_1.default.strictEqual(group.children[1].children[0].value, '10');
|
68 | assert_1.default.strictEqual(group.children[1].children[1].value, '20');
|
69 | assert_1.default.strictEqual(group.children[1].children[2].value, '30');
|
70 | assert_1.default.strictEqual(group.children[2].value, '40,50,60');
|
71 | assert_1.default.strictEqual(group.children[2].children[0].value, '40');
|
72 | assert_1.default.strictEqual(group.children[2].children[1].value, '50');
|
73 | assert_1.default.strictEqual(group.children[2].children[2].value, '60');
|
74 | });
|
75 | it('detects multiple non capturing groups', function () {
|
76 | var tr = new TreeRegexp_1.default(/(?:a)(:b)(\?c)(d)/);
|
77 | var group = tr.match('a:b?cd');
|
78 | assert_1.default.strictEqual(group.children.length, 3);
|
79 | });
|
80 | it('works with escaped backslash', function () {
|
81 | var tr = new TreeRegexp_1.default(/foo\\(bar|baz)/);
|
82 | var group = tr.match('foo\\bar');
|
83 | assert_1.default.strictEqual(group.children.length, 1);
|
84 | });
|
85 | it('works with escaped slash', function () {
|
86 | var tr = new TreeRegexp_1.default(/^I go to '\/(.+)'$/);
|
87 | var group = tr.match("I go to '/hello'");
|
88 | assert_1.default.strictEqual(group.children.length, 1);
|
89 | });
|
90 | it('works with digit and word', function () {
|
91 | var tr = new TreeRegexp_1.default(/^(\d) (\w+)$/);
|
92 | var group = tr.match('2 you');
|
93 | assert_1.default.strictEqual(group.children.length, 2);
|
94 | });
|
95 | it('captures non capturing groups with capturing groups inside', function () {
|
96 | var tr = new TreeRegexp_1.default('the stdout(?: from "(.*?)")?');
|
97 | var group = tr.match('the stdout');
|
98 | assert_1.default.strictEqual(group.value, 'the stdout');
|
99 | assert_1.default.strictEqual(group.children[0].value, null);
|
100 | assert_1.default.strictEqual(group.children.length, 1);
|
101 | });
|
102 | it('works with flags', function () {
|
103 | var tr = new TreeRegexp_1.default(/HELLO/i);
|
104 | var group = tr.match('hello');
|
105 | assert_1.default.strictEqual(group.value, 'hello');
|
106 | });
|
107 | it('does not consider parenthesis in character class as group', function () {
|
108 | var tr = new TreeRegexp_1.default(/^drawings: ([A-Z, ()]+)$/);
|
109 | var group = tr.match('drawings: ONE(TWO)');
|
110 | assert_1.default.strictEqual(group.value, 'drawings: ONE(TWO)');
|
111 | assert_1.default.strictEqual(group.children.length, 1);
|
112 | assert_1.default.strictEqual(group.children[0].value, 'ONE(TWO)');
|
113 | });
|
114 | });
|
115 |
|
\ | No newline at end of file |