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 RegularExpression_1 = __importDefault(require("../src/RegularExpression"));
|
8 | var ParameterTypeRegistry_1 = __importDefault(require("../src/ParameterTypeRegistry"));
|
9 | describe('RegularExpression', function () {
|
10 | it('documents match arguments', function () {
|
11 | var parameterRegistry = new ParameterTypeRegistry_1.default();
|
12 |
|
13 | var expr = /I have (\d+) cukes? in my (\w+) now/;
|
14 | var expression = new RegularExpression_1.default(expr, parameterRegistry);
|
15 | var args = expression.match('I have 7 cukes in my belly now');
|
16 | assert_1.default.strictEqual(7, args[0].getValue(null));
|
17 | assert_1.default.strictEqual('belly', args[1].getValue(null));
|
18 |
|
19 | });
|
20 | it('does no transform by default', function () {
|
21 | assert_1.default.deepStrictEqual(match(/(\d\d)/, '22')[0], '22');
|
22 | });
|
23 | it('does not transform anonymous', function () {
|
24 | assert_1.default.deepStrictEqual(match(/(.*)/, '22')[0], '22');
|
25 | });
|
26 | it('transforms negative int', function () {
|
27 | assert_1.default.deepStrictEqual(match(/(-?\d+)/, '-22')[0], -22);
|
28 | });
|
29 | it('transforms positive int', function () {
|
30 | assert_1.default.deepStrictEqual(match(/(\d+)/, '22')[0], 22);
|
31 | });
|
32 | it('transforms float without integer part', function () {
|
33 | assert_1.default.deepStrictEqual(match(new RegExp("(" + ParameterTypeRegistry_1.default.FLOAT_REGEXP.source + ")"), '.22')[0], 0.22);
|
34 | });
|
35 | it('transforms float with sign', function () {
|
36 | assert_1.default.deepStrictEqual(match(new RegExp("(" + ParameterTypeRegistry_1.default.FLOAT_REGEXP.source + ")"), '-1.22')[0], -1.22);
|
37 | });
|
38 | it('returns null when there is no match', function () {
|
39 | assert_1.default.strictEqual(match(/hello/, 'world'), null);
|
40 | });
|
41 | it('matches nested capture group without match', function () {
|
42 | assert_1.default.deepStrictEqual(match(/^a user( named "([^"]*)")?$/, 'a user'), [
|
43 | null,
|
44 | ]);
|
45 | });
|
46 | it('matches nested capture group with match', function () {
|
47 | assert_1.default.deepStrictEqual(match(/^a user( named "([^"]*)")?$/, 'a user named "Charlie"'), ['Charlie']);
|
48 | });
|
49 | it('matches capture group nested in optional one', function () {
|
50 | var regexp = /^a (pre-commercial transaction |pre buyer fee model )?purchase(?: for \$(\d+))?$/;
|
51 | assert_1.default.deepStrictEqual(match(regexp, 'a purchase'), [null, null]);
|
52 | assert_1.default.deepStrictEqual(match(regexp, 'a purchase for $33'), [null, 33]);
|
53 | assert_1.default.deepStrictEqual(match(regexp, 'a pre buyer fee model purchase'), [
|
54 | 'pre buyer fee model ',
|
55 | null,
|
56 | ]);
|
57 | });
|
58 | it('ignores non capturing groups', function () {
|
59 | assert_1.default.deepStrictEqual(match(/(\S+) ?(can|cannot)? (?:delete|cancel) the (\d+)(?:st|nd|rd|th) (attachment|slide) ?(?:upload)?/, 'I can cancel the 1st slide upload'), ['I', 'can', 1, 'slide']);
|
60 | });
|
61 | it('works with escaped parenthesis', function () {
|
62 | assert_1.default.deepStrictEqual(match(/Across the line\(s\)/, 'Across the line(s)'), []);
|
63 | });
|
64 | it('exposes regexp and source', function () {
|
65 | var regexp = /I have (\d+) cukes? in my (.+) now/;
|
66 | var expression = new RegularExpression_1.default(regexp, new ParameterTypeRegistry_1.default());
|
67 | assert_1.default.deepStrictEqual(expression.regexp, regexp);
|
68 | assert_1.default.deepStrictEqual(expression.source, regexp.source);
|
69 | });
|
70 | it('does not take consider parenthesis in character class as group', function () {
|
71 | var expression = new RegularExpression_1.default(/^drawings: ([A-Z_, ()]+)$/, new ParameterTypeRegistry_1.default());
|
72 | var args = expression.match('drawings: ONE, TWO(ABC)');
|
73 | assert_1.default.strictEqual(args[0].getValue(this), 'ONE, TWO(ABC)');
|
74 | });
|
75 | });
|
76 | var match = function (regexp, text) {
|
77 | var parameterRegistry = new ParameterTypeRegistry_1.default();
|
78 | var regularExpression = new RegularExpression_1.default(regexp, parameterRegistry);
|
79 | var args = regularExpression.match(text);
|
80 | if (!args) {
|
81 | return null;
|
82 | }
|
83 | return args.map(function (arg) { return arg.getValue(null); });
|
84 | };
|
85 |
|
\ | No newline at end of file |