re2-latin1
Version:
Bindings for RE2: fast, safe alternative to backtracking regular expression engines.
143 lines (101 loc) • 5.38 kB
JavaScript
;
var unit = require("heya-unit");
var RE2 = require("../re2");
// tests
unit.add(module, [
// These tests are copied from MDN:
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split
function test_split(t) {
"use strict";
var re = new RE2(/\s+/);
var result = re.split("Oh brave new world that has such people in it.");
eval(t.TEST("t.unify(result, ['Oh', 'brave', 'new', 'world', 'that', 'has', 'such', 'people', 'in', 'it.'])"));
re = new RE2(",");
result = re.split("Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec");
eval(t.TEST("t.unify(result, ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'])"));
re = new RE2(",");
result = re.split(",Jan,Feb,Mar,Apr,May,Jun,,Jul,Aug,Sep,Oct,Nov,Dec,");
eval(t.TEST("t.unify(result, ['','Jan','Feb','Mar','Apr','May','Jun','','Jul','Aug','Sep','Oct','Nov','Dec',''])"));
re = new RE2(/\s*;\s*/);
result = re.split("Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand ");
eval(t.TEST("t.unify(result, ['Harry Trump', 'Fred Barney', 'Helen Rigby', 'Bill Abel', 'Chris Hand '])"));
re = new RE2(/\s+/);
result = re.split("Hello World. How are you doing?", 3);
eval(t.TEST("t.unify(result, ['Hello', 'World.', 'How'])"));
re = new RE2(/(\d)/);
result = re.split("Hello 1 word. Sentence number 2.");
eval(t.TEST("t.unify(result, ['Hello ', '1', ' word. Sentence number ', '2', '.'])"));
eval(t.TEST("RE2(/[x-z]*/).split('asdfghjkl').reverse().join('') === 'lkjhgfdsa'"));
},
function test_splitInvalid(t) {
"use strict";
var re = RE2('');
try {
re.split({ toString() { throw "corner"; } });
t.test(false); // shouldn't be here
} catch(e) {
eval(t.TEST("e === 'corner'"));
}
},
function test_cornerCases(t) {
"use strict";
var re = new RE2(/1/);
var result = re.split("23456");
eval(t.TEST("t.unify(result, ['23456'])"));
},
// Unicode tests
function test_splitUnicode(t) {
"use strict";
var re = new RE2(/\s+/u);
var result = re.split("Она не понимает, что этим убивает меня.");
eval(t.TEST("t.unify(result, ['Она', 'не', 'понимает,', 'что', 'этим', 'убивает', 'меня.'])"));
re = new RE2(",", "u");
result = re.split("Пн,Вт,Ср,Чт,Пт,Сб,Вс");
eval(t.TEST("t.unify(result, ['Пн','Вт','Ср','Чт','Пт','Сб','Вс'])"));
re = new RE2(/\s*;\s*/u);
result = re.split("Ваня Иванов ;Петро Петренко; Саша Машин ; Маша Сашина");
eval(t.TEST("t.unify(result, ['Ваня Иванов', 'Петро Петренко', 'Саша Машин', 'Маша Сашина'])"));
re = new RE2(/\s+/u);
result = re.split("Привет мир. Как дела?", 3);
eval(t.TEST("t.unify(result, ['Привет', 'мир.', 'Как'])"));
re = new RE2(/(\d)/u);
result = re.split("Привет 1 слово. Предложение номер 2.");
eval(t.TEST("t.unify(result, ['Привет ', '1', ' слово. Предложение номер ', '2', '.'])"));
eval(t.TEST("RE2(/[э-я]*/u).split('фывапролд').reverse().join('') === 'длорпавыф'"));
},
// Buffer tests
function test_splitBuffer(t) {
"use strict";
var re = new RE2(/\s+/u);
var result = re.split(new Buffer("Она не понимает, что этим убивает меня."));
eval(t.TEST("t.unify(verifyBuffer(result, t), ['Она', 'не', 'понимает,', 'что', 'этим', 'убивает', 'меня.'])"));
re = new RE2(",", "u");
result = re.split(new Buffer("Пн,Вт,Ср,Чт,Пт,Сб,Вс"));
eval(t.TEST("t.unify(verifyBuffer(result, t), ['Пн','Вт','Ср','Чт','Пт','Сб','Вс'])"));
re = new RE2(/\s*;\s*/u);
result = re.split(new Buffer("Ваня Иванов ;Петро Петренко; Саша Машин ; Маша Сашина"));
eval(t.TEST("t.unify(verifyBuffer(result, t), ['Ваня Иванов', 'Петро Петренко', 'Саша Машин', 'Маша Сашина'])"));
re = new RE2(/\s+/u);
result = re.split(new Buffer("Привет мир. Как дела?"), 3);
eval(t.TEST("t.unify(verifyBuffer(result, t), ['Привет', 'мир.', 'Как'])"));
re = new RE2(/(\d)/u);
result = re.split(new Buffer("Привет 1 слово. Предложение номер 2."));
eval(t.TEST("t.unify(verifyBuffer(result, t), ['Привет ', '1', ' слово. Предложение номер ', '2', '.'])"));
eval(t.TEST("RE2(/[э-я]*/u).split(new Buffer('фывапролд')).map(function(x) { return x.toString(); }).reverse().join('') === 'длорпавыф'"));
},
// Sticky tests
function test_splitSticky(t) {
"use strict";
var re = new RE2(/\s+/y); // sticky is ignored
var result = re.split("Oh brave new world that has such people in it.");
eval(t.TEST("t.unify(result, ['Oh', 'brave', 'new', 'world', 'that', 'has', 'such', 'people', 'in', 'it.'])"));
var result2 = re.split(" Oh brave new world that has such people in it.");
eval(t.TEST("t.unify(result2, ['', 'Oh', 'brave', 'new', 'world', 'that', 'has', 'such', 'people', 'in', 'it.'])"));
}
]);
function verifyBuffer(buf, t) {
return buf.map(function(x) {
t.test(x instanceof Buffer);
return x.toString();
});
}