UNPKG

5.91 kBJavaScriptView Raw
1"use strict";
2var __importDefault = (this && this.__importDefault) || function (mod) {
3 return (mod && mod.__esModule) ? mod : { "default": mod };
4};
5Object.defineProperty(exports, "__esModule", { value: true });
6var assert_1 = __importDefault(require("assert"));
7var TreeRegexp_1 = __importDefault(require("../src/TreeRegexp"));
8describe('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//# sourceMappingURL=TreeRegexpTest.js.map
\No newline at end of file