re2-latin1
Version:
Bindings for RE2: fast, safe alternative to backtracking regular expression engines.
99 lines (82 loc) • 2.83 kB
JavaScript
;
var unit = require("heya-unit");
var RE2 = require("../re2");
// tests
unit.add(module, [
function test_groupsNormal(t) {
"use strict";
eval(t.TEST("RE2('(?<a>\\\\d)').test('9')"));
eval(t.TEST("t.unify(RE2('(?<a>-)', 'g').match('a-b-c'), ['-', '-'])"));
eval(t.TEST("t.unify(RE2('(?<a>-)').split('a-b-c'), ['a', '-', 'b', '-', 'c'])"));
eval(t.TEST("RE2('(?<a>-)', 'g').search('a-b-c') === 1"));
},
function test_groupsExec(t) {
"use strict";
var result = new RE2('(\\d)').exec('k9');
eval(t.TEST("result"));
eval(t.TEST("result[0] === '9'"));
eval(t.TEST("result[1] === '9'"));
eval(t.TEST("result.index === 1"));
eval(t.TEST("result.input === 'k9'"));
eval(t.TEST("typeof result.groups == 'undefined'"));
result = new RE2('(?<a>\\d)').exec('k9');
eval(t.TEST("result"));
eval(t.TEST("result[0] === '9'"));
eval(t.TEST("result[1] === '9'"));
eval(t.TEST("result.index === 1"));
eval(t.TEST("result.input === 'k9'"));
eval(t.TEST("t.unify(result.groups, {a: '9'})"));
},
function test_groupsMatch(t) {
"use strict";
var result = new RE2('(\\d)').match('k9');
eval(t.TEST("result"));
eval(t.TEST("result[0] === '9'"));
eval(t.TEST("result[1] === '9'"));
eval(t.TEST("result.index === 1"));
eval(t.TEST("result.input === 'k9'"));
eval(t.TEST("typeof result.groups == 'undefined'"));
result = new RE2('(?<a>\\d)').match('k9');
eval(t.TEST("result"));
eval(t.TEST("result[0] === '9'"));
eval(t.TEST("result[1] === '9'"));
eval(t.TEST("result.index === 1"));
eval(t.TEST("result.input === 'k9'"));
eval(t.TEST("t.unify(result.groups, {a: '9'})"));
},
function test_groupsMatch(t) {
"use strict";
eval(t.TEST("RE2('(?<w>\\\\w)(?<d>\\\\d)', 'g').replace('a1b2c', '$2$1') === '1a2bc'"));
eval(t.TEST("RE2('(?<w>\\\\w)(?<d>\\\\d)', 'g').replace('a1b2c', '$<d>$<w>') === '1a2bc'"));
eval(t.TEST("RE2('(?<w>\\\\w)(?<d>\\\\d)', 'g').replace('a1b2c', replacerByNumbers) === '1a2bc'"));
eval(t.TEST("RE2('(?<w>\\\\w)(?<d>\\\\d)', 'g').replace('a1b2c', replacerByNames) === '1a2bc'"));
function replacerByNumbers(match, group1, group2, index, source, groups) {
return group2 + group1;
}
function replacerByNames(match, group1, group2, index, source, groups) {
return groups.d + groups.w;
}
},
function test_groupsInvalid(t) {
"use strict";
try {
RE2('(?<>.)');
t.test(false); // shouldn'be here
} catch(e) {
eval(t.TEST("e instanceof SyntaxError"));
}
// TODO: do we need to enforce the correct id?
// try {
// RE2('(?<1>.)');
// t.test(false); // shouldn'be here
// } catch(e) {
// eval(t.TEST("e instanceof SyntaxError"));
// }
try {
RE2('(?<a>.)(?<a>.)');
t.test(false); // shouldn'be here
} catch(e) {
eval(t.TEST("e instanceof SyntaxError"));
}
}
]);